“SKU:RB-02S035 TCS3200顏色傳感器”的版本間的差異

來(lái)自ALSROBOT WiKi
跳轉(zhuǎn)至: 導(dǎo)航、 搜索
?相關(guān)資料
第2行: 第2行:
 
==產(chǎn)品概述==
 
==產(chǎn)品概述==
 
TCS3200顏色傳感器是全彩的顏色檢測(cè)器,是一款簡(jiǎn)單易用、小巧輕便、性價(jià)比較高的顏色識(shí)別、檢測(cè)傳感器。包括了一塊TAOS公司最新退出的顏色到頻率轉(zhuǎn)換芯片 TCS3200D RGB感應(yīng)芯片和4個(gè)白色LED燈,TCS3200能在一定的范圍內(nèi)檢測(cè)和測(cè)量幾乎所有的可見(jiàn)光。TCS3200有大量的光檢測(cè)器,每個(gè)都有紅綠藍(lán)和清除4種濾光器。每6種顏色濾光器均勻地按數(shù)組分布來(lái)清除顏色中偏移位置的顏色分量。內(nèi)置的振蕩器能輸出方波,其頻率與所選擇的光的強(qiáng)度成比例關(guān)系。
 
TCS3200顏色傳感器是全彩的顏色檢測(cè)器,是一款簡(jiǎn)單易用、小巧輕便、性價(jià)比較高的顏色識(shí)別、檢測(cè)傳感器。包括了一塊TAOS公司最新退出的顏色到頻率轉(zhuǎn)換芯片 TCS3200D RGB感應(yīng)芯片和4個(gè)白色LED燈,TCS3200能在一定的范圍內(nèi)檢測(cè)和測(cè)量幾乎所有的可見(jiàn)光。TCS3200有大量的光檢測(cè)器,每個(gè)都有紅綠藍(lán)和清除4種濾光器。每6種顏色濾光器均勻地按數(shù)組分布來(lái)清除顏色中偏移位置的顏色分量。內(nèi)置的振蕩器能輸出方波,其頻率與所選擇的光的強(qiáng)度成比例關(guān)系。
?
==規(guī)格參數(shù)==
+
 
 +
==產(chǎn)品參數(shù)==
 
# 顏色識(shí)別芯片:TCS3200D
 
# 顏色識(shí)別芯片:TCS3200D
 
# 輸出頻率范圍:10kHz - 12kHz,占空比50%
 
# 輸出頻率范圍:10kHz - 12kHz,占空比50%
第16行: 第17行:
 
# 相鄰固定孔間距:11.74 mm
 
# 相鄰固定孔間距:11.74 mm
 
# 發(fā)光顏色:高亮白光
 
# 發(fā)光顏色:高亮白光
?
==接口定義==
+
14.接口定義
?
* S0:輸出頻率選擇輸入腳
+
: S0:輸出頻率選擇輸入腳
?
* S1:輸出頻率選擇輸入腳
+
: S1:輸出頻率選擇輸入腳
?
* OE:低電壓使能端
+
: OE:低電壓使能端
?
* GND:接電源地
+
: GND:接電源地
?
* Vcc:接電源正
+
: Vcc:接電源正
?
* OUT:輸出端
+
: OUT:輸出端
?
* S2:輸出頻率選擇輸入腳
+
: S2:輸出頻率選擇輸入腳
?
* S3:輸出頻率選擇輸入腳
+
: S3:輸出頻率選擇輸入腳
?
==使用方法==
+
 
?
===工作原理===
+
==工作原理==
?
====三原色感應(yīng)原理====
+
 
 +
===三原色感應(yīng)原理===
 
:通常所看到的物體的顏色,實(shí)際上是物體表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反應(yīng)。白色是由各種頻率的可見(jiàn)光混合在一起構(gòu)成的,也就是說(shuō)白光中包含著各種顏色的色光(如紅R、黃Y、綠G、青V、藍(lán)B、紫P)。根據(jù)德國(guó)物理學(xué)家赫姆霍茲(Helinholtz)的三原色理論可知,各種顏色是由不同比例的三原色(紅、綠、藍(lán))混合而成的。所以,如果知道構(gòu)成各種顏色的三原色的值,就能夠知道所測(cè)試物體的顏色。<br/>
 
:通常所看到的物體的顏色,實(shí)際上是物體表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反應(yīng)。白色是由各種頻率的可見(jiàn)光混合在一起構(gòu)成的,也就是說(shuō)白光中包含著各種顏色的色光(如紅R、黃Y、綠G、青V、藍(lán)B、紫P)。根據(jù)德國(guó)物理學(xué)家赫姆霍茲(Helinholtz)的三原色理論可知,各種顏色是由不同比例的三原色(紅、綠、藍(lán))混合而成的。所以,如果知道構(gòu)成各種顏色的三原色的值,就能夠知道所測(cè)試物體的顏色。<br/>
?
==== TCS3200 顏色識(shí)別原理====
+
 
 +
=== TCS3200 顏色識(shí)別原理===
 
:對(duì)于TCS3200 來(lái)說(shuō),當(dāng)選定一個(gè)顏色濾波器時(shí),它只允許某種特定的原色通過(guò),阻止其它原色的通過(guò)。例如:當(dāng)選擇紅色濾波器時(shí),入射光中只有紅色可以通過(guò),藍(lán)色和綠色都被阻止,這樣就可以得到紅色光的光強(qiáng);同理,選擇藍(lán)色濾波器或綠色濾波器時(shí),就可以得到藍(lán)色光和綠色光的光強(qiáng)。通過(guò)這三個(gè)值,就可以分析投射到 TCS3200 傳感器上的光的顏色。<br/>
 
:對(duì)于TCS3200 來(lái)說(shuō),當(dāng)選定一個(gè)顏色濾波器時(shí),它只允許某種特定的原色通過(guò),阻止其它原色的通過(guò)。例如:當(dāng)選擇紅色濾波器時(shí),入射光中只有紅色可以通過(guò),藍(lán)色和綠色都被阻止,這樣就可以得到紅色光的光強(qiáng);同理,選擇藍(lán)色濾波器或綠色濾波器時(shí),就可以得到藍(lán)色光和綠色光的光強(qiáng)。通過(guò)這三個(gè)值,就可以分析投射到 TCS3200 傳感器上的光的顏色。<br/>
?
====白平衡原理====
+
 
 +
===白平衡原理===
 
:白平衡就是告訴系統(tǒng)什么是白色。從理論上講,白色是由等量的紅色、綠色和藍(lán)色混合而成的;但實(shí)際上,白色中的三原色并不完全相等,并且對(duì)于 TCS3200 的光傳感器來(lái)說(shuō),它對(duì)這三種基本色的敏感性是不相同的,導(dǎo)致TCS3200 的 RGB 輸出并不相等,因此在測(cè)試前必須進(jìn)行白平衡調(diào)整,使得 TCS3200 對(duì)所檢測(cè)的“白色”中的三原色是相等的。進(jìn)行白平衡調(diào)整是為后續(xù)的顏色識(shí)別作準(zhǔn)備。<br/>
 
:白平衡就是告訴系統(tǒng)什么是白色。從理論上講,白色是由等量的紅色、綠色和藍(lán)色混合而成的;但實(shí)際上,白色中的三原色并不完全相等,并且對(duì)于 TCS3200 的光傳感器來(lái)說(shuō),它對(duì)這三種基本色的敏感性是不相同的,導(dǎo)致TCS3200 的 RGB 輸出并不相等,因此在測(cè)試前必須進(jìn)行白平衡調(diào)整,使得 TCS3200 對(duì)所檢測(cè)的“白色”中的三原色是相等的。進(jìn)行白平衡調(diào)整是為后續(xù)的顏色識(shí)別作準(zhǔn)備。<br/>
 
在本裝置中,白平衡調(diào)整的具體步驟和方法如下:
 
在本裝置中,白平衡調(diào)整的具體步驟和方法如下:
第38行: 第42行:
 
* 依次選通三種顏色的濾波器,然后對(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 的值。
 
* 依次選通三種顏色的濾波器,然后對(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è)比例因子,通過(guò)這個(gè)比例因子可以把這些脈沖數(shù)變?yōu)?55。在實(shí)際測(cè)試時(shí),使用同樣的時(shí)間進(jìn)行計(jì)數(shù),把測(cè)得的脈沖數(shù)再乘以求得的比例因子,然后就可以得到所對(duì)應(yīng)的 R 、G 和B 的值。
 
* 設(shè)置定時(shí)器為一固定時(shí)間( 例如10ms ),然后選通三種顏色的濾波器,計(jì)算這段時(shí)間內(nèi) TCS3200 的輸出脈沖數(shù),計(jì)算出一個(gè)比例因子,通過(guò)這個(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,通過(guò)白平衡測(cè)試,計(jì)算得到白色物體的 RGB 值 255 與 1s 內(nèi)三色光脈沖數(shù)的 RGB 比例因子,那么:
 
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,通過(guò)白平衡測(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)值
 
* 紅、綠、藍(lán)三色光分別對(duì)應(yīng)的 1s 內(nèi) TCS3200 輸出脈沖數(shù) * 相應(yīng)的比例因子 = RGB 標(biāo)準(zhǔn)值
 
然后,通過(guò)調(diào)用定時(shí)器中斷函數(shù),每 1s 產(chǎn)生中斷后,計(jì)算出該時(shí)間內(nèi)的紅、綠、藍(lán)三種光線通過(guò)濾波器時(shí)產(chǎn)生的脈沖數(shù),再將 TCS3200 輸出的信號(hào)脈沖個(gè)數(shù)分別存儲(chǔ)到相應(yīng)的顏色的數(shù)組變量中,本例程設(shè)置了輸出該數(shù)組的值,其代表了 RGB 三種顏色的值。
 
然后,通過(guò)調(diào)用定時(shí)器中斷函數(shù),每 1s 產(chǎn)生中斷后,計(jì)算出該時(shí)間內(nèi)的紅、綠、藍(lán)三種光線通過(guò)濾波器時(shí)產(chǎn)生的脈沖數(shù),再將 TCS3200 輸出的信號(hào)脈沖個(gè)數(shù)分別存儲(chǔ)到相應(yīng)的顏色的數(shù)組變量中,本例程設(shè)置了輸出該數(shù)組的值,其代表了 RGB 三種顏色的值。
?
===硬件接線圖===
+
 
 +
==使用方法==
 +
===example1_Arduino===
 +
 
 +
* 硬件接線圖
 
[[文件:yansejiexian.jpg|700px|有框|居中]]
 
[[文件:yansejiexian.jpg|700px|有框|居中]]
?
* 顏色傳感器 S0 連接 Arduino UNO 控制器 D6(數(shù)字接口6號(hào))
+
* 接線說(shuō)明
?
* 顏色傳感器 S1 連接 Arduino UNO 控制器 D5(數(shù)字接口5號(hào))
+
:* 顏色傳感器 S0 連接 Arduino UNO 控制器 D6(數(shù)字接口6號(hào))
?
* 顏色傳感器 S2 連接 Arduino UNO 控制器 D4(數(shù)字接口4號(hào))
+
:* 顏色傳感器 S1 連接 Arduino UNO 控制器 D5(數(shù)字接口5號(hào))
?
* 顏色傳感器 S3 連接 Arduino UNO 控制器 D3(數(shù)字接口3號(hào))
+
:* 顏色傳感器 S2 連接 Arduino UNO 控制器 D4(數(shù)字接口4號(hào))
?
* 顏色傳感器 OUT 連接 Arduino UNO 控制器 D2(數(shù)字接口2號(hào))
+
:* 顏色傳感器 S3 連接 Arduino UNO 控制器 D3(數(shù)字接口3號(hào))
?
* 顏色傳感器 OE、GND 連接 Arduino UNO 控制器電源地(GND)
+
:* 顏色傳感器 OUT 連接 Arduino UNO 控制器 D2(數(shù)字接口2號(hào))
?
* 顏色傳感器 +5v 連接 Arduino UNO 控制器電源正(Vcc)
+
:* 顏色傳感器 OE、GND 連接 Arduino UNO 控制器電源地(GND)
?
===例子程序===
+
:* 顏色傳感器 +5v 連接 Arduino UNO 控制器電源正(Vcc)
 +
 
 +
* 示例程序
 
'''* 說(shuō)明:'''顏色傳感器使用了 Arduino 的外部中斷功能,所以此程序適用于 Arduino UNO 控制器(外部中斷 0 為數(shù)字引腳 2 號(hào)),如果要使用其他型號(hào)的 Arduino 控制器,只需對(duì)應(yīng)修改中斷標(biāo)號(hào)或者連接的引腳即可。<br/>
 
'''* 說(shuō)明:'''顏色傳感器使用了 Arduino 的外部中斷功能,所以此程序適用于 Arduino UNO 控制器(外部中斷 0 為數(shù)字引腳 2 號(hào)),如果要使用其他型號(hào)的 Arduino 控制器,只需對(duì)應(yīng)修改中斷標(biāo)號(hào)或者連接的引腳即可。<br/>
?
例如:結(jié)合 Leonardo 控制器來(lái)使用 TCS3200 顏色傳感器,則需要將 setup 中的外部中斷語(yǔ)句修改,其他接線方法一致<br/>
+
 
 +
例:結(jié)合 Leonardo 控制器來(lái)使用 TCS3200 顏色傳感器,則需要將 setup 中的外部中斷語(yǔ)句修改,其他接線方法一致<br/>
 
原語(yǔ)句為:attachInterrupt(0, TSC_Count, RISING);//外部中斷口初始0 <br/>
 
原語(yǔ)句為:attachInterrupt(0, TSC_Count, RISING);//外部中斷口初始0 <br/>
 
修改后語(yǔ)句為:attachInterrupt(1, TSC_Count, RISING);//外部中斷口初始1 <br/>
 
修改后語(yǔ)句為:attachInterrupt(1, TSC_Count, RISING);//外部中斷口初始1 <br/>
?
原因: Leonardo 的數(shù)字 2 號(hào)接口為外部中斷 1,而 UNO 控制器的數(shù)字 2 號(hào)接口為外部中斷 0,具體可以查閱 [https://www.arduino.cc/en/Main/ArduinoBoardLeonardo Arduino 官網(wǎng)說(shuō)明]<br/>
+
原因: Leonardo 的數(shù)字 2 號(hào)接口為外部中斷 1,而 UNO 控制器的數(shù)字 2 號(hào)接口為外部中斷 0,具體可以查閱Arduino官網(wǎng)相應(yīng)產(chǎn)品說(shuō)明:https://www.arduino.cc/ <br/>
 +
 
 
<pre style='color:blue'>
 
<pre style='color:blue'>
 
#include <TimerOne.h>  // 引用 TimerOne.h 庫(kù)文件  
 
#include <TimerOne.h>  // 引用 TimerOne.h 庫(kù)文件  
第179行: 第192行:
 
</pre>
 
</pre>
  
?
===程序效果===
+
* 程序效果
 
如果程序編譯正常,并且正確上傳到 Arduino UNO 控制器中,就可以通過(guò)串口監(jiān)視器可以查看當(dāng)前檢測(cè)的 RGB 值,從而判斷顏色。白平衡效果如下圖所示:
 
如果程序編譯正常,并且正確上傳到 Arduino UNO 控制器中,就可以通過(guò)串口監(jiān)視器可以查看當(dāng)前檢測(cè)的 RGB 值,從而判斷顏色。白平衡效果如下圖所示:
 
[[文件:02S03502.png|500px|有框|居中]]
 
[[文件:02S03502.png|500px|有框|居中]]
  
?
===應(yīng)用例程===
+
===example2_Arduino===
?
====硬件設(shè)備====
+
* 硬件設(shè)備
 
# [http://lifestyle201.com/goods-546.html Carduino UNO R3 控制器] * 1個(gè)  
 
# [http://lifestyle201.com/goods-546.html Carduino UNO R3 控制器] * 1個(gè)  
 
# [http://lifestyle201.com/goods-147.html Arduino 傳感器擴(kuò)展板V5.0] * 1個(gè)                 
 
# [http://lifestyle201.com/goods-147.html Arduino 傳感器擴(kuò)展板V5.0] * 1個(gè)                 
第194行: 第207行:
 
# 色板 * 1個(gè)
 
# 色板 * 1個(gè)
  
?
====接線說(shuō)明====
+
* 接線說(shuō)明
 
* 顏色傳感器與 Arduino UNO 控制器的連接同例子程序相同
 
* 顏色傳感器與 Arduino UNO 控制器的連接同例子程序相同
 
* 將各種顏色食人魚燈連接到 Arduino傳感器擴(kuò)展板上,連接方式:<br/>
 
* 將各種顏色食人魚燈連接到 Arduino傳感器擴(kuò)展板上,連接方式:<br/>
第202行: 第215行:
 
(4)藍(lán)色燈接數(shù)字口 11號(hào) <br/>
 
(4)藍(lán)色燈接數(shù)字口 11號(hào) <br/>
 
(5)白色燈接數(shù)字口 12號(hào) <br/>
 
(5)白色燈接數(shù)字口 12號(hào) <br/>
?
====應(yīng)用例程====
+
 
?
====例子程序====
+
* 示例程序
?
完成硬件連接后,將 [http://pan.baidu.com/s/1eRvi7uy TimerOne庫(kù)文件]粘貼到 Arduino IDE 軟件的 libraries 文件中(庫(kù)文件可以直接在此點(diǎn)擊下載),無(wú)庫(kù)文件或?qū)?kù)文件放錯(cuò)位置代碼編譯可能將會(huì)出現(xiàn)錯(cuò)誤提示,將代碼編譯后下載到Arduino里。
+
 
<pre style='color:blue'>
 
<pre style='color:blue'>
 
#include <TimerOne.h>      // 引用 TimerOne.h 庫(kù)文件  
 
#include <TimerOne.h>      // 引用 TimerOne.h 庫(kù)文件  
第382行: 第394行:
 
  </pre>
 
  </pre>
  
?
====應(yīng)用程序效果====
+
* 程序效果
 
:在以上步驟完成后,我們首先需要在其程序啟動(dòng)后白平衡(白平衡在上文中已介紹),下圖為Arduino實(shí)驗(yàn)代碼的白平衡實(shí)驗(yàn)現(xiàn)象:
 
:在以上步驟完成后,我們首先需要在其程序啟動(dòng)后白平衡(白平衡在上文中已介紹),下圖為Arduino實(shí)驗(yàn)代碼的白平衡實(shí)驗(yàn)現(xiàn)象:
 
[[文件:hih6.jpg|500px|有框|居中]]
 
[[文件:hih6.jpg|500px|有框|居中]]

2018年9月29日 (六) 13:36的版本

02S03501.png

目錄

產(chǎn)品概述

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

產(chǎn)品參數(shù)

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

14.接口定義

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

工作原理

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

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

TCS3200 顏色識(shí)別原理

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

白平衡原理

白平衡就是告訴系統(tǒng)什么是白色。從理論上講,白色是由等量的紅色、綠色和藍(lán)色混合而成的;但實(shí)際上,白色中的三原色并不完全相等,并且對(duì)于 TCS3200 的光傳感器來(lái)說(shuō),它對(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ā)光二極管照射到白紙上,使入射光能夠通過(guò)反射傳到 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)整。這里有兩種方法來(lái)計(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è)比例因子,通過(guò)這個(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,通過(guò)白平衡測(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)值

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

使用方法

example1_Arduino

  • 硬件接線圖
Yansejiexian.jpg
  • 接線說(shuō)明
  • 顏色傳感器 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)
  • 示例程序

* 說(shuō)明:顏色傳感器使用了 Arduino 的外部中斷功能,所以此程序適用于 Arduino UNO 控制器(外部中斷 0 為數(shù)字引腳 2 號(hào)),如果要使用其他型號(hào)的 Arduino 控制器,只需對(duì)應(yīng)修改中斷標(biāo)號(hào)或者連接的引腳即可。

例:結(jié)合 Leonardo 控制器來(lái)使用 TCS3200 顏色傳感器,則需要將 setup 中的外部中斷語(yǔ)句修改,其他接線方法一致
原語(yǔ)句為:attachInterrupt(0, TSC_Count, RISING);//外部中斷口初始0
修改后語(yǔ)句為:attachInterrupt(1, TSC_Count, RISING);//外部中斷口初始1
原因: Leonardo 的數(shù)字 2 號(hào)接口為外部中斷 1,而 UNO 控制器的數(shù)字 2 號(hào)接口為外部中斷 0,具體可以查閱Arduino官網(wǎng)相應(yīng)產(chǎn)品說(shuō)明:https://www.arduino.cc/

#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,用于過(guò)濾器排列 
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)哪一種光線通過(guò)濾波器
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 
                              // 選擇過(guò)濾器顏色 
} 
//中斷函數(shù),計(jì)算 TCS3200 輸出信號(hào)的脈沖數(shù)
void TSC_Count() 
{ 
  g_count ++ ;                  
} 
/*定時(shí)器中斷函數(shù),每 1s 中斷后,把該時(shí)間內(nèi)的紅、綠、藍(lán)三種廣信通過(guò)濾波器時(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);// 選擇讓紅色光線通過(guò)濾波器的模式 
         break; 
    case 1: 
         Serial.print("->Frequency R=");  // 串口打印字符串"->Frequency R=" 
         Serial.println(g_count);// 串口打印 1s 內(nèi)的紅光通過(guò)濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù) 
         g_array[0] = g_count;//儲(chǔ)存 1s 內(nèi)的紅光通過(guò)濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù)           
         TSC_WB(HIGH, HIGH);// 選擇讓綠色光線通過(guò)濾波器的模式
         break; 
    case 2: 
         Serial.print("->Frequency G=");  // 串口打印字符串"->Frequency G=" 
         Serial.println(g_count);// 串口打印 1s 內(nèi)的綠光通過(guò)濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù) 
         g_array[1] = g_count;//儲(chǔ)存 1s 內(nèi)的綠光通過(guò)濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù)  
         TSC_WB(LOW, HIGH);//選擇讓藍(lán)色光線通過(guò)濾波器的模式  
         break; 
    case 3: 
         Serial.print("->Frequency B=");  // 串口打印字符串"->Frequency B=" 
         Serial.println(g_count);// 串口打印 1s 內(nèi)的藍(lán)光通過(guò)濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù)
         Serial.println("->WB End");     // 串口打印字符串"->WB End" 
         g_array[2] = g_count;//儲(chǔ)存 1s 內(nèi)的藍(lán)光通過(guò)濾波器時(shí),TCS3200 輸出的脈沖個(gè)數(shù) 
         TSC_WB(HIGH, LOW); // 選擇無(wú)濾波器模式                                                                     
         break; 
   default: 
         g_count = 0;//計(jì)數(shù)器清零 
         break; 
  } 
} 
//設(shè)置反射光中紅、綠、藍(lán)三色光分別通過(guò)濾波器時(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);//打開(kāi)串口并設(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ù)
 //通過(guò)白平衡測(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 控制器中,就可以通過(guò)串口監(jiān)視器可以查看當(dāng)前檢測(cè)的 RGB 值,從而判斷顏色。白平衡效果如下圖所示:

02S03502.png

example2_Arduino

  • 硬件設(shè)備
  1. Carduino UNO R3 控制器 * 1個(gè)
  2. Arduino 傳感器擴(kuò)展板V5.0 * 1個(gè)
  3. Color Sensor顏色傳感器模塊 * 1個(gè)
  4. 3P傳感器連接線 * 5個(gè)
  5. 4P傳感器連接線 * 2個(gè)
  6. IR&LED Modue * 5個(gè) (紅、白、藍(lán)、黃、綠色各一個(gè))
  7. USB 數(shù)據(jù)通信線 * 1個(gè)
  8. 色板 * 1個(gè)
  • 接線說(shuō)明
  • 顏色傳感器與 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)

  • 示例程序
#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,用于過(guò)濾器排列 
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% 
}  
//  選擇過(guò)濾器的顏色  
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 
                              // 選擇過(guò)濾器顏色 
} 
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);        // 沒(méi)有過(guò)濾紅色 
         break; 
    case 1: 
         Serial.print("->Frequency R=");  // 串口打印字符串"->Frequency R=" 
         Serial.println(g_count);         // 串口打印 g_count變量值 
         g_array[0] = g_count;           
         TSC_WB(HIGH, HIGH);       // 沒(méi)有過(guò)濾綠色 
         break; 
    case 2: 
         Serial.print("->Frequency G=");  // 串口打印字符串"->Frequency G=" 
         Serial.println(g_count);         // 串口打印 g_count變量值 
         g_array[1] = g_count; 
         TSC_WB(LOW, HIGH);       // 沒(méi)有過(guò)濾藍(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);       // 清除(無(wú)過(guò)濾)                                                                      
         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);                   //打開(kāi)串口并設(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í)行下面語(yǔ)句 
       { 
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í)行下面語(yǔ)句 
       {
 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í)行下面語(yǔ)句 
       { 
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í)行下面語(yǔ)句 
       { 
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í)行下面語(yǔ)句 
       { 
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í)行下面語(yǔ)句 
       { 
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 秒
 
  • 程序效果
在以上步驟完成后,我們首先需要在其程序啟動(dòng)后白平衡(白平衡在上文中已介紹),下圖為Arduino實(shí)驗(yàn)代碼的白平衡實(shí)驗(yàn)現(xiàn)象:
Hih6.jpg
在完成白平衡后(上圖實(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)用五種顏色食人魚燈來(lái)顯示其檢測(cè)到的顏色。判斷語(yǔ)句中的范圍為程序編寫者在實(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í)(即不滿足判斷語(yǔ)句的條件時(shí))應(yīng)只在串口打印"->Other Color" ,而無(wú)其他現(xiàn)象產(chǎn)生。下圖為Arduino實(shí)驗(yàn)代碼在檢測(cè)到其他顏色時(shí)的實(shí)驗(yàn)現(xiàn)象
Vadrb7.jpg
Vadrb8.jpg
Vadrb9.jpg
Vadrb10.jpg
Vadrb11.jpg

視頻演示

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


資料下載

Erweima.png
  • 產(chǎn)品資料

下載鏈接:https://pan.baidu.com/s/1CLPMpWvmYa9fJUk8Mbekew 提取碼:n9j7