(SKU:RB-02S035)TCS3200顏色傳感器

來自ALSROBOT WiKi
跳轉(zhuǎn)至: 導(dǎo)航、 搜索
02S03501.png

目錄

產(chǎn)品概述

TCS3200顏色傳感器是全彩的顏色檢測器,是一款簡單易用、小巧輕便、性價比較高的顏色識別、檢測傳感器。包括了一塊TAOS公司最新退出的顏色到頻率轉(zhuǎn)換芯片 TCS3200D RGB感應(yīng)芯片和4個白色LED燈,TCS3200能在一定的范圍內(nèi)檢測和測量幾乎所有的可見光。TCS3200有大量的光檢測器,每個都有紅綠藍(lán)和清除4種濾光器。每6種顏色濾光器均勻地按數(shù)組分布來清除顏色中偏移位置的顏色分量。內(nèi)置的振蕩器能輸出方波,其頻率與所選擇的光的強度成比例關(guān)系。

規(guī)格參數(shù)

  1. 顏色識別芯片:TCS3200D
  2. 輸出頻率范圍:10kHz - 12kHz,占空比50%
  3. 工作電壓:+2.7v - +5.5v
  4. 工作電流:1.4 mA
  5. 檢測狀態(tài):靜態(tài)檢測
  6. 最佳檢測距離:10mm
  7. 工作溫度:-40°C - +85°C
  8. 尺寸大小:35.8mm * 35.8mm * 10.8mm
  9. 重量大?。?.7g
  10. 固定孔:3mm * 4個
  11. 對角固定孔間距:16.60 mm
  12. 相鄰固定孔間距:11.74 mm
  13. 發(fā)光顏色:高亮白光

接口定義

  • S0:輸出頻率選擇輸入腳
  • S1:輸出頻率選擇輸入腳
  • OE:低電壓使能端
  • GND:接電源地
  • Vcc:接電源正
  • OUT:輸出端
  • S2:輸出頻率選擇輸入腳
  • S3:輸出頻率選擇輸入腳

使用方法

工作原理

三原色感應(yīng)原理

通常所看到的物體的顏色,實際上是物體表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反應(yīng)。白色是由各種頻率的可見光混合在一起構(gòu)成的,也就是說白光中包含著各種顏色的色光(如紅R、黃Y、綠G、青V、藍(lán)B、紫P)。根據(jù)德國物理學(xué)家赫姆霍茲(Helinholtz)的三原色理論可知,各種顏色是由不同比例的三原色(紅、綠、藍(lán))混合而成的。所以,如果知道構(gòu)成各種顏色的三原色的值,就能夠知道所測試物體的顏色。

TCS3200 顏色識別原理

對于TCS3200 來說,當(dāng)選定一個顏色濾波器時,它只允許某種特定的原色通過,阻止其它原色的通過。例如:當(dāng)選擇紅色濾波器時,入射光中只有紅色可以通過,藍(lán)色和綠色都被阻止,這樣就可以得到紅色光的光強;同理,選擇藍(lán)色濾波器或綠色濾波器時,就可以得到藍(lán)色光和綠色光的光強。通過這三個值,就可以分析投射到 TCS3200 傳感器上的光的顏色。

白平衡原理

白平衡就是告訴系統(tǒng)什么是白色。從理論上講,白色是由等量的紅色、綠色和藍(lán)色混合而成的;但實際上,白色中的三原色并不完全相等,并且對于 TCS3200 的光傳感器來說,它對這三種基本色的敏感性是不相同的,導(dǎo)致TCS3200 的 RGB 輸出并不相等,因此在測試前必須進(jìn)行白平衡調(diào)整,使得 TCS3200 對所檢測的“白色”中的三原色是相等的。進(jìn)行白平衡調(diào)整是為后續(xù)的顏色識別作準(zhǔn)備。

在本裝置中,白平衡調(diào)整的具體步驟和方法如下:

  • 將傳感器至于一張白紙上,使用產(chǎn)品上的發(fā)光二極管照射到白紙上,使入射光能夠通過反射傳到 TCS3200 上,然后根據(jù)前面所介紹的方法,依次選通紅色、綠色和藍(lán)色濾波器,分別測得紅色、綠色和藍(lán)色的值,然后就可計算出需要的三個調(diào)整參數(shù)。

當(dāng)用 TCS3200 識別顏色時,就用這三個參數(shù)對所測顏色的R 、G 和B 進(jìn)行調(diào)整。這里有兩種方法來計算調(diào)整參數(shù):

  • 依次選通三種顏色的濾波器,然后對 TCS230的輸出脈沖依次進(jìn)行計數(shù)。當(dāng)計數(shù)到255 時停止計數(shù),分別計算每個通道所用的時間。這些時間對應(yīng)于實際測試時 TCS3200 每種濾波器所采用的時間基準(zhǔn),在這段時間內(nèi)所測得的脈沖數(shù)就是所對應(yīng)的 R 、G 和 B 的值。
  • 設(shè)置定時器為一固定時間( 例如10ms ),然后選通三種顏色的濾波器,計算這段時間內(nèi) TCS3200 的輸出脈沖數(shù),計算出一個比例因子,通過這個比例因子可以把這些脈沖數(shù)變?yōu)?55。在實際測試時,使用同樣的時間進(jìn)行計數(shù),把測得的脈沖數(shù)再乘以求得的比例因子,然后就可以得到所對應(yīng)的 R 、G 和B 的值。

編程原理

TCS3200 模塊與 Arduino UNO 的實驗接線如下圖所示。TCS3200 顏色傳感器能讀取三種基本色(RGB),但 RGB 輸出并不相等,因此在測試前必須進(jìn)行白平衡的調(diào)整,使 TCS3200 對所檢測的白色中的三原色相等。進(jìn)行白平衡調(diào)整是為后續(xù)的顏色識別作準(zhǔn)備。因此在本例程中,首先需要點亮 LED 燈,延時 4s,通過白平衡測試,計算得到白色物體的 RGB 值 255 與 1s 內(nèi)三色光脈沖數(shù)的 RGB 比例因子,那么:

  • 紅、綠、藍(lán)三色光分別對應(yīng)的 1s 內(nèi) TCS3200 輸出脈沖數(shù) * 相應(yīng)的比例因子 = RGB 標(biāo)準(zhǔn)值

然后,通過調(diào)用定時器中斷函數(shù),每 1s 產(chǎn)生中斷后,計算出該時間內(nèi)的紅、綠、藍(lán)三種光線通過濾波器時產(chǎn)生的脈沖數(shù),再將 TCS3200 輸出的信號脈沖個數(shù)分別存儲到相應(yīng)的顏色的數(shù)組變量中,本例程設(shè)置了輸出該數(shù)組的值,其代表了 RGB 三種顏色的值。

硬件接線圖

Yansejiexian.jpg
  • 顏色傳感器 S0 連接 Arduino UNO 控制器 D6(數(shù)字接口6號)
  • 顏色傳感器 S1 連接 Arduino UNO 控制器 D5(數(shù)字接口5號)
  • 顏色傳感器 S2 連接 Arduino UNO 控制器 D4(數(shù)字接口4號)
  • 顏色傳感器 S3 連接 Arduino UNO 控制器 D3(數(shù)字接口3號)
  • 顏色傳感器 OUT 連接 Arduino UNO 控制器 D2(數(shù)字接口2號)
  • 顏色傳感器 OE、GND 連接 Arduino UNO 控制器電源地(GND)
  • 顏色傳感器 +5v 連接 Arduino UNO 控制器電源正(Vcc)

例子程序

完成硬件連接后,將 TimerOne庫文件粘貼到 Arduino IDE 軟件的 libraries 文件中(庫文件可以直接在此點擊下載),無庫文件或?qū)煳募佩e位置代碼編譯可能將會出現(xiàn)錯誤提示,將代碼編譯后下載到Arduino里。

#include <TimerOne.h>   // 引用 TimerOne.h 庫文件 
#define S0 6            // 定義 S0為引腳6 
#define S1 5            // 定義 S1為引腳5 
#define S2 4            // 定義 S2為引腳4 
#define S3 3            // 定義 S3為引腳3 
#define OUT 2           // 定義 OUT為引腳2 
int   g_count = 0;      //定義整型變量 g_count并賦初值為0,用于存儲計數(shù)頻率 
int   g_array[3];       //定義整型數(shù)組變量 g_array[3],用于存儲RGB的值 
int   g_flag = 0;       //定義整形變量 g_flag 并賦初值為0,用于過濾器排列 
float g_SF[3];          //定義浮點型數(shù)組變量g_SF[3],用于存儲RGB比例因子 
int   value[3];        //定義定義整型數(shù)組變量value[3],用于判斷顏色 
//  初始化 tsc3200 和設(shè)置內(nèi)置振蕩器方波頻率與其輸出信號頻率的比例因子為2% 
void TSC_Init() 
{                                                                   
  pinMode(S0, OUTPUT);      // 定義S0為輸出狀態(tài) 
  pinMode(S1, OUTPUT);      // 定義S1為輸出狀態(tài) 
  pinMode(S2, OUTPUT);      // 定義S2為輸出狀態(tài) 
  pinMode(S3, OUTPUT);      // 定義S3為輸出狀態(tài) 
  pinMode(OUT, INPUT);      // 定義OUT為輸入狀態(tài)  
  digitalWrite(S0, LOW);    //定義S0為低電平 
  digitalWrite(S1, HIGH);   // 定義 S1為高電平 
                            //輸出頻率縮放 2% 
}  
//  選擇濾波模式,決定讓紅、綠、藍(lán)哪一種光線通過濾波器
void TSC_FilterColor(int Level01, int Level02) 
{ 
  if(Level01 != 0)             // 如果Level01  不等于0   
     Level01 = HIGH;         //則Level01  為高電平 
  if(Level02 != 0)             // 如果Level02  不等于0 
     Level02 = HIGH;         //則Level02  為高電平 
  digitalWrite(S2, Level01);       // 將Level01值送給S2 
  digitalWrite(S3, Level02);       // 將Level02值送給S3 
                              // 選擇過濾器顏色 
} 
//中斷函數(shù),計算 TCS3200 輸出信號的脈沖數(shù)
void TSC_Count() 
{ 
  g_count ++ ;                  
} 
/*定時器中斷函數(shù),每 1s 中斷后,把該時間內(nèi)的紅、綠、藍(lán)三種廣信通過濾波器時,
 * TCS3200 輸出信號脈沖個數(shù)分別儲存到數(shù)組 g_array[3] 的相應(yīng)元素變量中
 */
void TSC_Callback() 
{ 
  switch(g_flag) 
  { 
    case 0:  
         Serial.println("->WB Start");// 串口打印字符串"->WB Start" 
         TSC_WB(LOW, LOW);// 選擇讓紅色光線通過濾波器的模式 
         break; 
    case 1: 
         Serial.print("->Frequency R=");  // 串口打印字符串"->Frequency R=" 
         Serial.println(g_count);// 串口打印 1s 內(nèi)的紅光通過濾波器時,TCS3200 輸出的脈沖個數(shù) 
         g_array[0] = g_count;//儲存 1s 內(nèi)的紅光通過濾波器時,TCS3200 輸出的脈沖個數(shù)           
         TSC_WB(HIGH, HIGH);// 選擇讓綠色光線通過濾波器的模式
         break; 
    case 2: 
         Serial.print("->Frequency G=");  // 串口打印字符串"->Frequency G=" 
         Serial.println(g_count);// 串口打印 1s 內(nèi)的綠光通過濾波器時,TCS3200 輸出的脈沖個數(shù) 
         g_array[1] = g_count;//儲存 1s 內(nèi)的綠光通過濾波器時,TCS3200 輸出的脈沖個數(shù)  
         TSC_WB(LOW, HIGH);//選擇讓藍(lán)色光線通過濾波器的模式  
         break; 
    case 3: 
         Serial.print("->Frequency B=");  // 串口打印字符串"->Frequency B=" 
         Serial.println(g_count);// 串口打印 1s 內(nèi)的藍(lán)光通過濾波器時,TCS3200 輸出的脈沖個數(shù)
         Serial.println("->WB End");     // 串口打印字符串"->WB End" 
         g_array[2] = g_count;//儲存 1s 內(nèi)的藍(lán)光通過濾波器時,TCS3200 輸出的脈沖個數(shù) 
         TSC_WB(HIGH, LOW); // 選擇無濾波器模式                                                                     
         break; 
   default: 
         g_count = 0;//計數(shù)器清零 
         break; 
  } 
} 
//設(shè)置反射光中紅、綠、藍(lán)三色光分別通過濾波器時如何處理數(shù)據(jù)的標(biāo)志
//該函數(shù)被 TSC_Callback( )調(diào)用
void TSC_WB(int Level0, int Level1)      
{ 
  g_count = 0;//計數(shù)值清零 
  g_flag ++;//輸出信號計數(shù)標(biāo)志
  TSC_FilterColor(Level0, Level1);//濾波器模式 
  Timer1.setPeriod(1000000);//設(shè)置輸出信號脈沖計數(shù)時長為 1s 
} 
//初始化
void setup() 
{  
  TSC_Init(); 
  Serial.begin(9600);//打開串口并設(shè)置通信波特率為 9600 
  Timer1.initialize();//定時器初始化,默認(rèn)觸發(fā)值為 1s
  Timer1.attachInterrupt(TSC_Callback);     
  // 設(shè)置定時器1的中斷,中斷調(diào)用函數(shù)為 TSC_Callback()
  //設(shè)置 TCS3200 輸出信號的上升沿觸發(fā)中斷,中斷調(diào)用函數(shù)為 TSC_Count()   
  attachInterrupt(0, TSC_Count, RISING);//外部中斷口初始0 
  delay(4000);// 延遲 4s ,以等待被測試物體紅、綠、藍(lán)三色在 1s 內(nèi)的 TCS3200 輸出信號脈沖計數(shù)
 //通過白平衡測試,計算得到白色物體 RGB 值 255 與 1s 內(nèi)三色光脈沖數(shù)的 RGB 比例因子
  for(int i=0; i<3; i++) 
  Serial.println(g_array[i]);             //串口打印 g_array[i] 變量值 
  g_SF[0] = 255.0/ g_array[0];     //紅色光比例因子
  g_SF[1] = 255.0/ g_array[1] ;    //綠色光比例因子
  g_SF[2] = 255.0/ g_array[2] ;    //藍(lán)色光比例因子
  //打印白平衡后的紅、綠、藍(lán)三色的 RGB 比例因子
  Serial.println(g_SF[0],5);
  Serial.println(g_SF[1],5);
  Serial.println(g_SF[2],5);
  //紅、綠、藍(lán)三色光分別對應(yīng)的1s內(nèi)TCS3200輸出脈沖數(shù)乘以相應(yīng)的比例因子就是RGB標(biāo)準(zhǔn)值
 //打印被測物體的RGB值
  for(int i=0; i<3; i++)
    Serial.println(int(g_array[i] * g_SF[i]));  
}
//主程序 
void loop() 
{ 
  g_flag = 0;
   //每獲得一次被測物體RGB顏色值需時4s
   delay(4000);
   //打印出被測物體RGB顏色值
   for(int i=0; i<3; i++)
   Serial.println(int(g_array[i] * g_SF[i])); 
   } 

程序效果

如果程序編譯正常,并且正確上傳到 Arduino UNO 控制器中,就可以通過串口監(jiān)視器可以查看當(dāng)前檢測的 RGB 值,從而判斷顏色。白平衡效果如下圖所示:

02S03502.png

應(yīng)用例程

硬件設(shè)備

  1. Carduino UNO R3 控制器 * 1個
  2. Arduino 傳感器擴(kuò)展板V5.0 * 1個
  3. Color Sensor顏色傳感器模塊 * 1個
  4. 3P傳感器連接線 * 5個
  5. 4P傳感器連接線 * 2個
  6. IR&LED Modue * 5個 (紅、白、藍(lán)、黃、綠色各一個)
  7. USB 數(shù)據(jù)通信線 * 1個
  8. 色板 * 1個

接線說明

  • 顏色傳感器與 Arduino UNO 控制器的連接同例子程序相同
  • 將各種顏色食人魚燈連接到 Arduino傳感器擴(kuò)展板上,連接方式:

(1)紅色食人魚燈接數(shù)字口 8號
(2)黃色燈接數(shù)字口 9號
(3)綠色燈接數(shù)字口10號
(4)藍(lán)色燈接數(shù)字口 11號
(5)白色燈接數(shù)字口 12號

應(yīng)用例程

例子程序

完成硬件連接后,將 TimerOne庫文件粘貼到 Arduino IDE 軟件的 libraries 文件中(庫文件可以直接在此點擊下載),無庫文件或?qū)煳募佩e位置代碼編譯可能將會出現(xiàn)錯誤提示,將代碼編譯后下載到Arduino里。

#include <TimerOne.h>       // 引用 TimerOne.h 庫文件 
#define S0     6            // 定義 S0為引腳6 
#define S1     5            // 定義 S1為引腳5 
#define S2     4            // 定義 S2為引腳4 
#define S3     3            // 定義 S3為引腳3 
#define OUT    2           // 定義 OUT為引腳2 
#define Rs      8           // 定義 Rs為引腳8 
#define Ys      9           // 定義 Ys為引腳9 
#define Gs      10          // 定義 Gs為引腳10 
#define Bs      11          // 定義 Bs為引腳11 
#define Ws      12         // 定義 Ws為引腳12 
int   g_count = 0;   //定義整型變量 g_count并賦初值為0,用于存儲計數(shù)頻率 
int   g_array[3];    //定義整型數(shù)組變量 g_array[3],用于存儲RGB的值 
int   g_flag = 0;   	 //定義整形變量 g_flag 并賦初值為0,用于過濾器排列 
float g_SF[3];       //定義浮點型數(shù)組變量g_SF[3],用于存儲RGB比例因子 
int   value[3];      //定義定義整型數(shù)組變量value[3],用于判斷顏色 
//  初始化tsc230 和設(shè)置頻率 
void TSC_Init() 
{                                                                   
  pinMode(S0, OUTPUT);      // 定義S0為輸出狀態(tài) 
  pinMode(S1, OUTPUT);      // 定義S1為輸出狀態(tài) 
  pinMode(S2, OUTPUT);      // 定義S2為輸出狀態(tài) 
  pinMode(S3, OUTPUT);      // 定義S3為輸出狀態(tài) 
  pinMode(OUT, INPUT);      // 定義OUT為輸入狀態(tài) 
 
  digitalWrite(S0, LOW);      //定義S0為低電平 
  digitalWrite(S1, HIGH);     // 定義 S1為高電平 
                           //輸出頻率縮放 2% 
}  
//  選擇過濾器的顏色  
void TSC_FilterColor(int Level01, int Level02) 
{ 
  if(Level01 != 0)             // 如果Level01  不等于0   
     Level01 = HIGH;         //則Level01  為高電平 
  if(Level02 != 0)             // 如果Level02  不等于0 
     Level02 = HIGH;         //則Level02  為高電平 
  digitalWrite(S2, Level01);       // 將Level01值送給S2 
  digitalWrite(S3, Level02);       // 將Level02值送給S3 
                              // 選擇過濾器顏色 
} 
void TSC_Count() 
{ 
  g_count ++ ;                  // 自動計算頻率 
} 
void TSC_Callback() 
{ 
  switch(g_flag) 
  { 
    case 0:  
         Serial.println("->WB Start");    // 串口打印字符串"->WB Start" 
         TSC_WB(LOW, LOW);        // 沒有過濾紅色 
         break; 
    case 1: 
         Serial.print("->Frequency R=");  // 串口打印字符串"->Frequency R=" 
         Serial.println(g_count);         // 串口打印 g_count變量值 
         g_array[0] = g_count;           
         TSC_WB(HIGH, HIGH);       // 沒有過濾綠色 
         break; 
    case 2: 
         Serial.print("->Frequency G=");  // 串口打印字符串"->Frequency G=" 
         Serial.println(g_count);         // 串口打印 g_count變量值 
         g_array[1] = g_count; 
         TSC_WB(LOW, HIGH);       // 沒有過濾藍(lán)色 
         break; 
    case 3: 
         Serial.print("->Frequency B=");  // 串口打印字符串"->Frequency B=" 
         Serial.println(g_count);         // 串口打印 g_count變量值 
         Serial.println("->WB End");     // 串口打印字符串"->WB End" 
         g_array[2] = g_count; 
         TSC_WB(HIGH, LOW);       // 清除(無過濾)                                                                      
         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);           //設(shè)置一秒周期 
} 
void setup() 
{ 
  pinMode(Rs,OUTPUT);               //設(shè)定Rs引腳為輸出狀態(tài) 
  pinMode(Ys,OUTPUT);               //設(shè)定Ys引腳為輸出狀態(tài) 
  pinMode(Gs,OUTPUT);               //設(shè)定Gs引腳為輸出狀態(tài) 
  pinMode(Bs,OUTPUT);               //設(shè)定Bs引腳為輸出狀態(tài) 
  pinMode(Ws,OUTPUT);              //設(shè)定Ws引腳為輸出狀態(tài) 
  TSC_Init();                         //初始化tcs230 
  Serial.begin(9600);                   //打開串口并設(shè)置通信波特率為 9600 
  Timer1.initialize();                      //初始化默認(rèn)是一秒 
  Timer1.attachInterrupt(TSC_Callback);     // 外部中斷為一秒   
  attachInterrupt(0, TSC_Count, RISING);    //外部中斷口初始0 
  delay(4000);                          // 延遲4 秒 
  for(int i=0; i<3; i++) 
     Serial.println(g_array[i]);             //串口打印 g_array[i] 變量值 
  g_SF[0] = 255.0/ g_array[0];            //紅色的比例因子 
  g_SF[1] = 255.0/ g_array[1] ;           // 綠色的比例因子 
  g_SF[2] = 255.0/ g_array[2] ;           // 藍(lán)色的比例因子 
  
  Serial.println(g_SF[0]);               // 串口打印 g_SF[0]變量值 
  Serial.println(g_SF[1]);               // 串口打印 g_SF[1]變量值 
  Serial.println(g_SF[2]);               // 串口打印 g_SF[2]變量值 
} 
void loop() 
{ 
   g_flag = 0; 
   for(int i=0; i<3; i++) 
   {Serial.println(int(g_array[i] * g_SF[i])); //串口打印g_array[i] * g_SF[i]變量值 
    value[i]=int(g_array[i] * g_SF[i]);  //將g_array[i] * g_SF[i]值賦值給value[i] 
   } 
      if (((value[0]>168)  &&  (value[0]<208)) && ((value[1]>66) && (value[1]<106)) && ((value[2]>67) && (value[2]<107)))    
 // 如果變量 value[i]數(shù)值滿足為紅色值范圍則執(zhí)行下面語句 
       { 
Serial.println("->Red");                //串口打印字符串"->Red" 
        digitalWrite(Rs,HIGH);                //Rs定義為高電平 
        digitalWrite(Ys,LOW);                //Ys定義為低電平 
        digitalWrite(Gs,LOW);                //Gs定義為低電平                     
        digitalWrite(Bs,LOW);                //Bs 定義為低電平                                                                  
        digitalWrite(Ws,LOW);               //Ws定義為低電平 
       } 
        else if (((value[0]>235) && (value[0]<275)) && ((value[1]> 198) && (value[1]<238)) && ((value[2]>96) && (value[2]<136)))     
 //如果變量 value[i]數(shù)值滿足為黃色值范圍則執(zhí)行下面語句 
       {
 Serial.println("->Yellow");             //串口打印字符串"->Yellow" 
        digitalWrite(Rs,LOW);                //Rs 定義為低電平 
        digitalWrite(Ys,HIGH);               //Ys 定義為高電平 
        digitalWrite(Gs,LOW);               //Gs 定義為低電平 
        digitalWrite(Bs,LOW);               //Bs 定義為低電平 
        digitalWrite(Ws,LOW);              //Ws 定義為低電平 
       } 
        else if (((value[0]>74) && (value[0]<114)) && ((value[1]>119)  && (value[1]<159)) && ((value[2]>76) && (value[2]<116)))     
 //如果變量 value[i]數(shù)值滿足為綠色值范圍則執(zhí)行下面語句 
       { 
Serial.println("->Green");              //串口打印字符串"->Green" 
        digitalWrite(Rs,LOW);                //Rs 定義為低電平 
        digitalWrite(Ys,LOW);                //Ys定義為低電平 
        digitalWrite(Gs,HIGH);               //Gs 定義為高電平 
        digitalWrite(Bs,LOW);               //Bs 定義為低電平 
        digitalWrite(Ws,LOW);              //Ws 定義為低電平 
       } 
        else  if(((value[0]>46)  &&  (value[0]<86))  &&  ((value[1]>71)  &&  (value[1]<111))  && ((value[2]>117) && (value[2]<157)))   
  //如果變量 value[i]數(shù)值滿足為藍(lán)色值范圍則執(zhí)行下面語句 
       { 
Serial.println("->Blue");               //串口打印字符串"->Blue" 
        digitalWrite(Rs,LOW);                //Rs 定義為低電平 
        digitalWrite(Ys,LOW);               //Ys 定義為低電平 
        digitalWrite(Gs,LOW);               //Gs 定義為低電平 
        digitalWrite(Bs,HIGH);              //Bs定義為高電平 
        digitalWrite(Ws,LOW);             //Ws定義為低電平 
       } 
        else if (((value[0]>230) && (value[0]<280)) && ((value[1]> 230) && (value[1]<280)) && ((value[2]>230) && (value[2]<280)))    
 //如果變量 value[i]數(shù)值滿足為白色值范圍則執(zhí)行下面語句 
       { 
Serial.println("->White");              //串口打印字符串"->White" 
        digitalWrite(Rs,LOW);                //Rs 定義為低電平 
        digitalWrite(Ys,LOW);                //Ys定義為低電平 
        digitalWrite(Gs,LOW);               //Gs 定義為低電平 
        digitalWrite(Bs,LOW);               //Bs 定義為低電平 
        digitalWrite(Ws,HIGH);              //Ws 定義為高電平 
       } 
        else if (value[0]>0 && value[1]>0 && value[2]>0) 
         //如果變量 value[i]數(shù)值不滿足上述顏色值范圍則執(zhí)行下面語句 
       { 
Serial.println("->Other Color");        //串口打印字符串"->Other Color" 
        digitalWrite(Rs,LOW);               //Rs 定義為低電平 
        digitalWrite(Ys,LOW);               //Ys 定義為低電平 
        digitalWrite(Gs,LOW);               //Gs 定義為低電平 
        digitalWrite(Bs,LOW);               //Bs 定義為低電平 
        digitalWrite(Ws,LOW);              //Ws 定義為低電平 
       } 
delay(4000);}                             //延遲4 秒
 

應(yīng)用程序效果

在以上步驟完成后,我們首先需要在其程序啟動后白平衡(白平衡在上文中已介紹),下圖為Arduino實驗代碼的白平衡實驗現(xiàn)象:
Hih6.jpg
在完成白平衡后(上圖實驗現(xiàn)象即白色食人魚燈亮起,也是其系統(tǒng)在檢測到白色后的現(xiàn)象)就可以檢測其他顏色了。白平衡只是系統(tǒng)對白色的一種數(shù)值反饋(即告訴系統(tǒng)什么是白色),本模塊識別、檢測后讀出的只是 R 、G、B 的值,對應(yīng)其檢測到的顏色R、G、B 值,該測試程序編寫者特編寫了一段應(yīng)用五種顏色食人魚燈來顯示其檢測到的顏色。判斷語句中的范圍為程序編寫者在實驗室環(huán)境下所測得的R 、G、B 值。更換環(huán)境后應(yīng)予以更改其對應(yīng)顏色判斷的R、G、B 值范圍。測試程序( 顏色檢測程序)中涉及到了紅、黃、綠、藍(lán)、白五種顏色,而色板上為六種顏色,多出一種顏色黑色是為了做出對比 :在檢測中遇到非該檢測顏色時(即不滿足判斷語句的條件時)應(yīng)只在串口打印"->Other Color" ,而無其他現(xiàn)象產(chǎn)生。下圖為Arduino實驗代碼在檢測到其他顏色時的實驗現(xiàn)象
Vadrb7.jpg
Vadrb8.jpg
Vadrb9.jpg
Vadrb10.jpg
Vadrb11.jpg

視頻演示

Hong wai yan se 01.png
Yan se 01.png


產(chǎn)品相關(guān)推薦

Erweima.png

購買地址

TCS3200D 顏色傳感器

周邊產(chǎn)品推薦

Carduino UNO R3 控制器
灰度傳感器
Arduino ColorPAL Color Sensor 進(jìn)口顏色傳感器 顏色識別
Arduino 高亮LED食人魚燈

相關(guān)問題解答

Arduino 顏色傳感器評測

相關(guān)學(xué)習(xí)資料

視頻: 運用顏色傳感器進(jìn)行多彩顏色識別檢測
視頻: 愛上Arduino與愛上Processing互動之顏色過度識別
視頻: 紅外無線發(fā)射接收之顏色識別系統(tǒng)
奧松機器人技術(shù)論壇