• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

,tcs230就是要给它看白色的东西,手动调吗?如何调啊?

雕爷牛腩 2017-03-28 浏览量:2201
网上有论文说,tcs3414会输出rgb跟白光输出,然后自动调白平衡,但是这个白光输出不理解是哪里的白光,tcs230就是要给它看白色的东西,手动调吗?如何调啊?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
其他答案 数量:3
  • RGB三个通道的信号灵敏度是不同的,白平衡的目的就是让RGB3个通道之间的关系更线性,所以用一个白色的光来把3个通道的值域标定一下。

    • 发布于2017-03-28
    • 举报
    • 评论 0
    • 0
    • 0


  • https://wenku.baidu.com/view/61089cd171fe910ef12df8b1.html  


    LED + RGB 三色荧光方案的特征

    优点:

    1)白色坐标点仅由荧光粉自身决定,与激发晶片无关(可以容忍LED晶片的离散性)。

    2)可以实现极高的颜色还原指数RI.

    3)理论上讲是最简单的制造方案。

    4)色光的稳定性仅仅取决于荧光粉,可以很稳定。

    缺点:

    1)泄漏的紫外光会破坏LED封胶,导致器件寿命问题。

    2)光转换效率不高,自身吸收、透光率等。



    • 发布于2017-03-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 嗨,是您用白紙反射出來的白光給tcs3200/230,然後程式碼再用來校正後,讀取的RGB值較為準確,可參考以下校準用的部分

    #include <TimerOne.h>
    
    #define S0     3
    #define S1     4
    #define S2     5
    #define S3     6
    #define OUT    2
    
    int   g_count = 0;    // 頻率計算
    int   g_array[3];     // 儲存 RGB 值
    int   g_flag = 0;     // RGB 過濾順序
    float g_SF[3];        // 儲存白平衡計算後之 RGB 補償係數
     
    // TCS3200 初始化與輸出頻率設定
    void TSC_Init()
    {
      pinMode(S0, OUTPUT);
      pinMode(S1, OUTPUT);
      pinMode(S2, OUTPUT);
      pinMode(S3, OUTPUT);
      pinMode(OUT, INPUT);
     
      digitalWrite(S0, LOW);  // OUTPUT FREQUENCY SCALING 2%
      digitalWrite(S1, HIGH); 
    }
     
    // 選擇過濾顏色
    void TSC_FilterColor(int Level01, int Level02)
    {
      if(Level01 != 0)
        Level01 = HIGH;
     
      if(Level02 != 0)
        Level02 = HIGH;
     
      digitalWrite(S2, Level01); 
      digitalWrite(S3, Level02); 
    }
     
    void TSC_Count()
    {
      g_count ++ ;
    }
     
    void TSC_Callback()
    {
      switch(g_flag)
      {
        case 0: 
             Serial.println("->WB Start");
             TSC_WB(LOW, LOW);              // Red
             break;
        case 1:
             Serial.print("->Frequency R=");
             Serial.println(g_count);
             g_array[0] = g_count;
             TSC_WB(HIGH, HIGH);            // Green
             break;
        case 2:
             Serial.print("->Frequency G=");
             Serial.println(g_count);
             g_array[1] = g_count;
             TSC_WB(LOW, HIGH);             // Blue
             break;
     
        case 3:
             Serial.print("->Frequency B=");
             Serial.println(g_count);
             Serial.println("->WB End");
             g_array[2] = g_count;
             TSC_WB(HIGH, LOW);             // Clear(no filter)   
             break;
       default:
             g_count = 0;
             break;
      }
    }
    
    // 白平衡
    void TSC_WB(int Level0, int Level1) 
    {
      g_count = 0;
      g_flag ++;
      TSC_FilterColor(Level0, Level1);
      Timer1.setPeriod(1000000);      // us; 每秒觸發 
    }
     
    void setup()
    {
      TSC_Init();
      Serial.begin(9600);
      Timer1.initialize();             // defaulte is 1s
      Timer1.attachInterrupt(TSC_Callback);  
      attachInterrupt(0, TSC_Count, RISING);  
     
      delay(4000);
     
      for(int i=0; i<3; i++)
        Serial.println(g_array[i]);
     
      g_SF[0] = 255.0/ g_array[0];     // R 補償係數
      g_SF[1] = 255.0/ g_array[1] ;    // G 補償係數
      g_SF[2] = 255.0/ g_array[2] ;    // B 補償係數
     
      Serial.println(g_SF[0]);
      Serial.println(g_SF[1]);
      Serial.println(g_SF[2]);
     
    }
     
    void loop()
    {
       g_flag = 0;
       for(int i=0; i<3; i++)
        Serial.println(int(g_array[i] * g_SF[i]));
       delay(4000);
     
    }


    DFrobot也有Wiki.有說明和範例

    http://wiki.dfrobot.com.cn/index.php?title=(SKU:SEN0101)TCS3200%E9%A2%9C%E8%89%B2%E4%BC%A0%E6%84%9F%E5%99%A8

    以上供參考

    • 发布于2017-03-28
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

,tcs230就是要给它看白色的东西,手动调吗?如何调啊?