(SKU:RB-02S035)TCS3200顏色傳感器
目錄 |
產(chǎn)品概述
TCS3200顏色傳感器是全彩的顏色檢測(cè)器,是一款簡(jiǎn)單易用、小巧輕便、性價(jià)比較高的顏色識(shí)別、檢測(cè)傳感器。包括了一塊TAOS公司最新退出的顏色到頻率轉(zhuǎn)換芯片 TCS3200D RGB感應(yīng)芯片和4個(gè)白色LED燈,TCS3200能在一定的范圍內(nèi)檢測(cè)和測(cè)量幾乎所有的可見光。TCS3200有大量的光檢測(cè)器,每個(gè)都有紅綠藍(lán)和清除4種濾光器。每6種顏色濾光器均勻地按數(shù)組分布來清除顏色中偏移位置的顏色分量。內(nèi)置的振蕩器能輸出方波,其頻率與所選擇的光的強(qiáng)度成比例關(guān)系。
規(guī)格參數(shù)
- 顏色識(shí)別芯片:TCS3200D
- 輸出頻率范圍:10kHz - 12kHz,占空比50%
- 工作電壓:+2.7v - +5.5v
- 工作電流:1.4 mA
- 檢測(cè)狀態(tài):靜態(tài)檢測(cè)
- 最佳檢測(cè)距離:10mm
- 工作溫度:-40°C - +85°C
- 尺寸大小:35.8mm * 35.8mm * 10.8mm
- 重量大?。?.7g
- 固定孔:3mm * 4個(gè)
- 對(duì)角固定孔間距:16.60 mm
- 相鄰固定孔間距:11.74 mm
- 發(fā)光顏色:高亮白光
接口定義
- S0:輸出頻率選擇輸入腳
- S1:輸出頻率選擇輸入腳
- OE:低電壓使能端
- GND:接電源地
- Vcc:接電源正
- OUT:輸出端
- S2:輸出頻率選擇輸入腳
- S3:輸出頻率選擇輸入腳
使用方法
工作原理
三原色感應(yīng)原理
- 通常所看到的物體的顏色,實(shí)際上是物體表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反應(yīng)。白色是由各種頻率的可見光混合在一起構(gòu)成的,也就是說白光中包含著各種顏色的色光(如紅R、黃Y、綠G、青V、藍(lán)B、紫P)。根據(jù)德國(guó)物理學(xué)家赫姆霍茲(Helinholtz)的三原色理論可知,各種顏色是由不同比例的三原色(紅、綠、藍(lán))混合而成的。所以,如果知道構(gòu)成各種顏色的三原色的值,就能夠知道所測(cè)試物體的顏色。
TCS3200 顏色識(shí)別原理
- 對(duì)于TCS3200 來說,當(dāng)選定一個(gè)顏色濾波器時(shí),它只允許某種特定的原色通過,阻止其它原色的通過。例如:當(dāng)選擇紅色濾波器時(shí),入射光中只有紅色可以通過,藍(lán)色和綠色都被阻止,這樣就可以得到紅色光的光強(qiáng);同理,選擇藍(lán)色濾波器或綠色濾波器時(shí),就可以得到藍(lán)色光和綠色光的光強(qiáng)。通過這三個(gè)值,就可以分析投射到 TCS3200 傳感器上的光的顏色。
白平衡原理
- 白平衡就是告訴系統(tǒng)什么是白色。從理論上講,白色是由等量的紅色、綠色和藍(lán)色混合而成的;但實(shí)際上,白色中的三原色并不完全相等,并且對(duì)于 TCS3200 的光傳感器來說,它對(duì)這三種基本色的敏感性是不相同的,導(dǎo)致TCS3200 的 RGB 輸出并不相等,因此在測(cè)試前必須進(jìn)行白平衡調(diào)整,使得 TCS3200 對(duì)所檢測(cè)的“白色”中的三原色是相等的。進(jìn)行白平衡調(diào)整是為后續(xù)的顏色識(shí)別作準(zhǔn)備。
在本裝置中,白平衡調(diào)整的具體步驟和方法如下:
- 將傳感器至于一張白紙上,使用產(chǎn)品上的發(fā)光二極管照射到白紙上,使入射光能夠通過反射傳到 TCS3200 上,然后根據(jù)前面所介紹的方法,依次選通紅色、綠色和藍(lán)色濾波器,分別測(cè)得紅色、綠色和藍(lán)色的值,然后就可計(jì)算出需要的三個(gè)調(diào)整參數(shù)。
當(dāng)用 TCS3200 識(shí)別顏色時(shí),就用這三個(gè)參數(shù)對(duì)所測(cè)顏色的R 、G 和B 進(jìn)行調(diào)整。這里有兩種方法來計(jì)算調(diào)整參數(shù):
- 依次選通三種顏色的濾波器,然后對(duì) TCS230的輸出脈沖依次進(jìn)行計(jì)數(shù)。當(dāng)計(jì)數(shù)到255 時(shí)停止計(jì)數(shù),分別計(jì)算每個(gè)通道所用的時(shí)間。這些時(shí)間對(duì)應(yīng)于實(shí)際測(cè)試時(shí) TCS3200 每種濾波器所采用的時(shí)間基準(zhǔn),在這段時(shí)間內(nèi)所測(cè)得的脈沖數(shù)就是所對(duì)應(yīng)的 R 、G 和 B 的值。
- 設(shè)置定時(shí)器為一固定時(shí)間( 例如10ms ),然后選通三種顏色的濾波器,計(jì)算這段時(shí)間內(nèi) TCS3200 的輸出脈沖數(shù),計(jì)算出一個(gè)比例因子,通過這個(gè)比例因子可以把這些脈沖數(shù)變?yōu)?55。在實(shí)際測(cè)試時(shí),使用同樣的時(shí)間進(jìn)行計(jì)數(shù),把測(cè)得的脈沖數(shù)再乘以求得的比例因子,然后就可以得到所對(duì)應(yīng)的 R 、G 和B 的值。
編程原理
TCS3200 模塊與 Arduino UNO 的實(shí)驗(yàn)接線如下圖所示。TCS3200 顏色傳感器能讀取三種基本色(RGB),但 RGB 輸出并不相等,因此在測(cè)試前必須進(jìn)行白平衡的調(diào)整,使 TCS3200 對(duì)所檢測(cè)的白色中的三原色相等。進(jìn)行白平衡調(diào)整是為后續(xù)的顏色識(shí)別作準(zhǔn)備。因此在本例程中,首先需要點(diǎn)亮 LED 燈,延時(shí) 4s,通過白平衡測(cè)試,計(jì)算得到白色物體的 RGB 值 255 與 1s 內(nèi)三色光脈沖數(shù)的 RGB 比例因子,那么:
- 紅、綠、藍(lán)三色光分別對(duì)應(yīng)的 1s 內(nèi) TCS3200 輸出脈沖數(shù) * 相應(yīng)的比例因子 = RGB 標(biāo)準(zhǔn)值
然后,通過調(diào)用定時(shí)器中斷函數(shù),每 1s 產(chǎn)生中斷后,計(jì)算出該時(shí)間內(nèi)的紅、綠、藍(lán)三種光線通過濾波器時(shí)產(chǎn)生的脈沖數(shù),再將 TCS3200 輸出的信號(hào)脈沖個(gè)數(shù)分別存儲(chǔ)到相應(yīng)的顏色的數(shù)組變量中,本例程設(shè)置了輸出該數(shù)組的值,其代表了 RGB 三種顏色的值。
硬件接線圖
- 顏色傳感器 S0 連接 Arduino UNO 控制器 D6(數(shù)字接口6號(hào))
- 顏色傳感器 S1 連接 Arduino UNO 控制器 D5(數(shù)字接口5號(hào))
- 顏色傳感器 S2 連接 Arduino UNO 控制器 D4(數(shù)字接口4號(hào))
- 顏色傳感器 S3 連接 Arduino UNO 控制器 D3(數(shù)字接口3號(hào))
- 顏色傳感器 OUT 連接 Arduino UNO 控制器 D2(數(shù)字接口2號(hào))
- 顏色傳感器 OE、GND 連接 Arduino UNO 控制器電源地(GND)
- 顏色傳感器 +5v 連接 Arduino UNO 控制器電源正(Vcc)
例子程序
完成硬件連接后,將 TimerOne庫(kù)文件粘貼到 Arduino IDE 軟件的 libraries 文件中(庫(kù)文件可以直接在此點(diǎn)擊下載),無庫(kù)文件或?qū)?kù)文件放錯(cuò)位置代碼編譯可能將會(huì)出現(xiàn)錯(cuò)誤提示,將代碼編譯后下載到Arduino里。
#include <TimerOne.h> // 引用 TimerOne.h 庫(kù)文件 #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,用于存儲(chǔ)計(jì)數(shù)頻率 int g_array[3]; //定義整型數(shù)組變量 g_array[3],用于存儲(chǔ)RGB的值 int g_flag = 0; //定義整形變量 g_flag 并賦初值為0,用于過濾器排列 float g_SF[3]; //定義浮點(diǎn)型數(shù)組變量g_SF[3],用于存儲(chǔ)RGB比例因子 int value[3]; //定義定義整型數(shù)組變量value[3],用于判斷顏色 // 初始化 tsc3200 和設(shè)置內(nèi)置振蕩器方波頻率與其輸出信號(hào)頻率的比例因子為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ù),計(jì)算 TCS3200 輸出信號(hào)的脈沖數(shù) void TSC_Count() { g_count ++ ; } /*定時(shí)器中斷函數(shù),每 1s 中斷后,把該時(shí)間內(nèi)的紅、綠、藍(lán)三種廣信通過濾波器時(shí), * TCS3200 輸出信號(hào)脈沖個(gè)數(shù)分別儲(chǔ)存到數(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)的紅光通過濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù) g_array[0] = g_count;//儲(chǔ)存 1s 內(nèi)的紅光通過濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù) TSC_WB(HIGH, HIGH);// 選擇讓綠色光線通過濾波器的模式 break; case 2: Serial.print("->Frequency G="); // 串口打印字符串"->Frequency G=" Serial.println(g_count);// 串口打印 1s 內(nèi)的綠光通過濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù) g_array[1] = g_count;//儲(chǔ)存 1s 內(nèi)的綠光通過濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(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)光通過濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù) Serial.println("->WB End"); // 串口打印字符串"->WB End" g_array[2] = g_count;//儲(chǔ)存 1s 內(nèi)的藍(lán)光通過濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù) TSC_WB(HIGH, LOW); // 選擇無濾波器模式 break; default: g_count = 0;//計(jì)數(shù)器清零 break; } } //設(shè)置反射光中紅、綠、藍(lán)三色光分別通過濾波器時(shí)如何處理數(shù)據(jù)的標(biāo)志 //該函數(shù)被 TSC_Callback( )調(diào)用 void TSC_WB(int Level0, int Level1) { g_count = 0;//計(jì)數(shù)值清零 g_flag ++;//輸出信號(hào)計(jì)數(shù)標(biāo)志 TSC_FilterColor(Level0, Level1);//濾波器模式 Timer1.setPeriod(1000000);//設(shè)置輸出信號(hào)脈沖計(jì)數(shù)時(shí)長(zhǎng)為 1s } //初始化 void setup() { TSC_Init(); Serial.begin(9600);//打開串口并設(shè)置通信波特率為 9600 Timer1.initialize();//定時(shí)器初始化,默認(rèn)觸發(fā)值為 1s Timer1.attachInterrupt(TSC_Callback); // 設(shè)置定時(shí)器1的中斷,中斷調(diào)用函數(shù)為 TSC_Callback() //設(shè)置 TCS3200 輸出信號(hào)的上升沿觸發(fā)中斷,中斷調(diào)用函數(shù)為 TSC_Count() attachInterrupt(0, TSC_Count, RISING);//外部中斷口初始0 delay(4000);// 延遲 4s ,以等待被測(cè)試物體紅、綠、藍(lán)三色在 1s 內(nèi)的 TCS3200 輸出信號(hào)脈沖計(jì)數(shù) //通過白平衡測(cè)試,計(jì)算得到白色物體 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)三色光分別對(duì)應(yīng)的1s內(nèi)TCS3200輸出脈沖數(shù)乘以相應(yīng)的比例因子就是RGB標(biāo)準(zhǔn)值 //打印被測(cè)物體的RGB值 for(int i=0; i<3; i++) Serial.println(int(g_array[i] * g_SF[i])); } //主程序 void loop() { g_flag = 0; //每獲得一次被測(cè)物體RGB顏色值需時(shí)4s delay(4000); //打印出被測(cè)物體RGB顏色值 for(int i=0; i<3; i++) Serial.println(int(g_array[i] * g_SF[i])); }
程序效果
如果程序編譯正常,并且正確上傳到 Arduino UNO 控制器中,就可以通過串口監(jiān)視器可以查看當(dāng)前檢測(cè)的 RGB 值,從而判斷顏色。白平衡效果如下圖所示:
應(yīng)用例程
硬件設(shè)備
- Carduino UNO R3 控制器 * 1個(gè)
- Arduino 傳感器擴(kuò)展板V5.0 * 1個(gè)
- Color Sensor顏色傳感器模塊 * 1個(gè)
- 3P傳感器連接線 * 5個(gè)
- 4P傳感器連接線 * 2個(gè)
- IR&LED Modue * 5個(gè) (紅、白、藍(lán)、黃、綠色各一個(gè))
- USB 數(shù)據(jù)通信線 * 1個(gè)
- 色板 * 1個(gè)
接線說明
- 顏色傳感器與 Arduino UNO 控制器的連接同例子程序相同
- 將各種顏色食人魚燈連接到 Arduino傳感器擴(kuò)展板上,連接方式:
(1)紅色食人魚燈接數(shù)字口 8號(hào)
(2)黃色燈接數(shù)字口 9號(hào)
(3)綠色燈接數(shù)字口10號(hào)
(4)藍(lán)色燈接數(shù)字口 11號(hào)
(5)白色燈接數(shù)字口 12號(hào)
應(yīng)用例程
例子程序
完成硬件連接后,將 TimerOne庫(kù)文件粘貼到 Arduino IDE 軟件的 libraries 文件中(庫(kù)文件可以直接在此點(diǎn)擊下載),無庫(kù)文件或?qū)?kù)文件放錯(cuò)位置代碼編譯可能將會(huì)出現(xiàn)錯(cuò)誤提示,將代碼編譯后下載到Arduino里。
#include <TimerOne.h> // 引用 TimerOne.h 庫(kù)文件 #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,用于存儲(chǔ)計(jì)數(shù)頻率 int g_array[3]; //定義整型數(shù)組變量 g_array[3],用于存儲(chǔ)RGB的值 int g_flag = 0; //定義整形變量 g_flag 并賦初值為0,用于過濾器排列 float g_SF[3]; //定義浮點(diǎn)型數(shù)組變量g_SF[3],用于存儲(chǔ)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 ++ ; // 自動(dòng)計(jì)算頻率 } 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)用程序效果
- 在以上步驟完成后,我們首先需要在其程序啟動(dòng)后白平衡(白平衡在上文中已介紹),下圖為Arduino實(shí)驗(yàn)代碼的白平衡實(shí)驗(yàn)現(xiàn)象:
- 在完成白平衡后(上圖實(shí)驗(yàn)現(xiàn)象即白色食人魚燈亮起,也是其系統(tǒng)在檢測(cè)到白色后的現(xiàn)象)就可以檢測(cè)其他顏色了。白平衡只是系統(tǒng)對(duì)白色的一種數(shù)值反饋(即告訴系統(tǒng)什么是白色),本模塊識(shí)別、檢測(cè)后讀出的只是 R 、G、B 的值,對(duì)應(yīng)其檢測(cè)到的顏色R、G、B 值,該測(cè)試程序編寫者特編寫了一段應(yīng)用五種顏色食人魚燈來顯示其檢測(cè)到的顏色。判斷語句中的范圍為程序編寫者在實(shí)驗(yàn)室環(huán)境下所測(cè)得的R 、G、B 值。更換環(huán)境后應(yīng)予以更改其對(duì)應(yīng)顏色判斷的R、G、B 值范圍。測(cè)試程序( 顏色檢測(cè)程序)中涉及到了紅、黃、綠、藍(lán)、白五種顏色,而色板上為六種顏色,多出一種顏色黑色是為了做出對(duì)比 :在檢測(cè)中遇到非該檢測(cè)顏色時(shí)(即不滿足判斷語句的條件時(shí))應(yīng)只在串口打印"->Other Color" ,而無其他現(xiàn)象產(chǎn)生。下圖為Arduino實(shí)驗(yàn)代碼在檢測(cè)到其他顏色時(shí)的實(shí)驗(yàn)現(xiàn)象
視頻演示
產(chǎn)品相關(guān)推薦
購(gòu)買地址
周邊產(chǎn)品推薦
Carduino UNO R3 控制器
灰度傳感器
Arduino ColorPAL Color Sensor 進(jìn)口顏色傳感器 顏色識(shí)別
Arduino 高亮LED食人魚燈
相關(guān)問題解答
相關(guān)學(xué)習(xí)資料
視頻: 運(yùn)用顏色傳感器進(jìn)行多彩顏色識(shí)別檢測(cè)
視頻: 愛上Arduino與愛上Processing互動(dòng)之顏色過度識(shí)別
視頻: 紅外無線發(fā)射接收之顏色識(shí)別系統(tǒng)
奧松機(jī)器人技術(shù)論壇