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

來自ALSROBOT WiKi
跳轉至: 導航、 搜索
?Color Sensor模塊的測試
?產品相關推薦
 
(未顯示3個用戶的9個中間版本)
第1行: 第1行:
?
<br/>
 
 
[[文件:vadrb1.jpg|500px|有框|右]]
 
[[文件:vadrb1.jpg|500px|有框|右]]
?
==.概述==
+
==產品概述==
 
:Color Sensor是一款簡單易用、小巧請便、性價比較高的顏色識別、檢測模塊,與國外同類產品相比,不但體積小,功能強,而且設計巧妙具有以下特點:一、可完成分辨率的光照度/ 頻率轉換;二、色彩和滿度輸出頻率可編程調整;三、可以直接與微處理器或其他邏輯電路相連接,適合各種開發(fā)板、控制器等產品。
 
:Color Sensor是一款簡單易用、小巧請便、性價比較高的顏色識別、檢測模塊,與國外同類產品相比,不但體積小,功能強,而且設計巧妙具有以下特點:一、可完成分辨率的光照度/ 頻率轉換;二、色彩和滿度輸出頻率可編程調整;三、可以直接與微處理器或其他邏輯電路相連接,適合各種開發(fā)板、控制器等產品。
?
==性能描述==
+
==規(guī)格參數==
 
# 顏色光到頻率轉換芯片:TCS3200D
 
# 顏色光到頻率轉換芯片:TCS3200D
 
# 輸出頻率范圍從10kHz~12kHz,占空比50%
 
# 輸出頻率范圍從10kHz~12kHz,占空比50%
第16行: 第15行:
 
# 對角固定孔間距:16.60mm
 
# 對角固定孔間距:16.60mm
 
# 相鄰固定孔間距:11.74mm
 
# 相鄰固定孔間距:11.74mm
?
==Color Sensor模塊的芯片介紹 ==
+
===TCS3200D 芯片介紹 ===
 
:目前的顏色傳感器通常是在獨立的光電二極管上覆蓋經過修正的紅、綠、藍濾波片,然后對輸出信號進行相應的處理,才能將顏色信號識別出來;有的將兩者集合起來,但是輸出模擬信號,需要一個A/D 電路進行采集,對該信號進一步處理,才能進行識別,增加了電路的復雜性,并且存在較大的識別誤差,影響了識別的效果。TA OS(Texas Advanced Optoelectronic Solutions )公司最新推出的顏色傳感器 TCS3200D(如下圖),不僅能夠實現顏色的識別與檢測,與以前的顏色傳感器相比,還具有許多優(yōu)良的新特性。
 
:目前的顏色傳感器通常是在獨立的光電二極管上覆蓋經過修正的紅、綠、藍濾波片,然后對輸出信號進行相應的處理,才能將顏色信號識別出來;有的將兩者集合起來,但是輸出模擬信號,需要一個A/D 電路進行采集,對該信號進一步處理,才能進行識別,增加了電路的復雜性,并且存在較大的識別誤差,影響了識別的效果。TA OS(Texas Advanced Optoelectronic Solutions )公司最新推出的顏色傳感器 TCS3200D(如下圖),不僅能夠實現顏色的識別與檢測,與以前的顏色傳感器相比,還具有許多優(yōu)良的新特性。
 
[[文件:vadrb2.jpg|500px|有框|居中]]
 
[[文件:vadrb2.jpg|500px|有框|居中]]
?
# TCS3200D 芯片的結構框圖與特點:
+
====TCS3200D 芯片的結構框圖與特點====
 
:TCS3200D 是TAOS 公司推出的可編程彩色光到頻率的轉換器,它把可配置的硅光電二極管與電流頻率轉換器集成在一個單一的CMOS 電路上,同時在單一芯片上集成了紅綠藍(RGB)三種濾光器,是業(yè)界第一個有數字兼容接口的RGB彩色傳感器,TCS3200D 的輸出信號是數字量,可以驅動標準的 TTL 或CMOS 邏輯輸入,因此可直接與微處理器或其他邏輯電路相連接,由于輸出的是數字量,并且能夠實現每個彩色信道10位以上的轉換精度,因而不再需要A/D 轉換電路,使電路變得更簡單。  
 
:TCS3200D 是TAOS 公司推出的可編程彩色光到頻率的轉換器,它把可配置的硅光電二極管與電流頻率轉換器集成在一個單一的CMOS 電路上,同時在單一芯片上集成了紅綠藍(RGB)三種濾光器,是業(yè)界第一個有數字兼容接口的RGB彩色傳感器,TCS3200D 的輸出信號是數字量,可以驅動標準的 TTL 或CMOS 邏輯輸入,因此可直接與微處理器或其他邏輯電路相連接,由于輸出的是數字量,并且能夠實現每個彩色信道10位以上的轉換精度,因而不再需要A/D 轉換電路,使電路變得更簡單。  
 
:TCS3200D 采用8 引腳的SOIC 表面貼裝式封裝,在單一芯片上集成有64個光電二極管,這些二極管分為四種類型,其 16個光電二極管帶有紅色濾波器;16個光電二極管帶有綠色濾波器;16個光電二極管帶有藍色濾波器,其余16個不帶有任何濾波器,可以透過全部的光信息,這些光電二極管在芯片內是交叉排列的,能夠最大限度地減少入射光輻射的不均勻性,從而增加顏色識別的精確度;另一方面,相同顏色的 16個光電二極管是并聯連接的,均勻分布在二極管陣列中,可以消除顏色的位置誤差。工作時,通過兩個可編程的引腳來動態(tài)選擇所需要的濾波器,該傳感器的典型輸出頻率范圍從2Hz -500kHz,用戶還可以通過兩個可編程引腳來選擇 100 %、20%或2 %的輸出比例因子,或電源關斷模式。輸出比例因子使傳感器的輸出能夠適應不同的測量范圍,提高了它的適應能力。例如,當使用低速的頻率計數器時,就可以選擇小的定標值,使TCS3200D 的輸出頻率和計數器相匹配。 當入射光投射到TCS3200D 上時,通過光電二極管控制引腳S2、S3的不同組合,可以選擇不同的濾波器;經過電流到頻率轉換器后輸出不同頻率的方波(占空比是50%),不同的顏色和光強對應不同頻率的方波;還可以通過輸出定標控制引腳S0、S1,選擇不同的輸出比例因子,對輸出頻率范圍進行調整,以適應不同的需求。 下面簡要介紹TCS3200D 芯片各個引腳的功能及它的一些組合選項。 S0、S1用于選擇輸出比例因子或電源關斷模式;S2、S3用于選擇濾波器的類型;OE反是頻率輸出使能引腳,可以控制輸出的狀態(tài),當有多個芯片引腳共用微處理器的輸出引腳時,也可以作為片選信號,OUT是頻率輸出引腳,GND是芯片的接地引腳,VCC為芯片提供工作電壓,下表是S0、S1及S2、S3的可用組合。
 
:TCS3200D 采用8 引腳的SOIC 表面貼裝式封裝,在單一芯片上集成有64個光電二極管,這些二極管分為四種類型,其 16個光電二極管帶有紅色濾波器;16個光電二極管帶有綠色濾波器;16個光電二極管帶有藍色濾波器,其余16個不帶有任何濾波器,可以透過全部的光信息,這些光電二極管在芯片內是交叉排列的,能夠最大限度地減少入射光輻射的不均勻性,從而增加顏色識別的精確度;另一方面,相同顏色的 16個光電二極管是并聯連接的,均勻分布在二極管陣列中,可以消除顏色的位置誤差。工作時,通過兩個可編程的引腳來動態(tài)選擇所需要的濾波器,該傳感器的典型輸出頻率范圍從2Hz -500kHz,用戶還可以通過兩個可編程引腳來選擇 100 %、20%或2 %的輸出比例因子,或電源關斷模式。輸出比例因子使傳感器的輸出能夠適應不同的測量范圍,提高了它的適應能力。例如,當使用低速的頻率計數器時,就可以選擇小的定標值,使TCS3200D 的輸出頻率和計數器相匹配。 當入射光投射到TCS3200D 上時,通過光電二極管控制引腳S2、S3的不同組合,可以選擇不同的濾波器;經過電流到頻率轉換器后輸出不同頻率的方波(占空比是50%),不同的顏色和光強對應不同頻率的方波;還可以通過輸出定標控制引腳S0、S1,選擇不同的輸出比例因子,對輸出頻率范圍進行調整,以適應不同的需求。 下面簡要介紹TCS3200D 芯片各個引腳的功能及它的一些組合選項。 S0、S1用于選擇輸出比例因子或電源關斷模式;S2、S3用于選擇濾波器的類型;OE反是頻率輸出使能引腳,可以控制輸出的狀態(tài),當有多個芯片引腳共用微處理器的輸出引腳時,也可以作為片選信號,OUT是頻率輸出引腳,GND是芯片的接地引腳,VCC為芯片提供工作電壓,下表是S0、S1及S2、S3的可用組合。
 
[[文件:vadrb3.jpg|500px|有框|居中]]
 
[[文件:vadrb3.jpg|500px|有框|居中]]
?
# TCS3200D 識別顏色的原理
+
====TCS3200D 識別顏色的原理====
 
:由上面的介紹可知,這種可編程的彩色光到頻率轉換器適合于色度計測量應用領域,如彩色打印、醫(yī)療診斷、計算機彩色監(jiān)視器校準以及油漆、紡織品、化妝品和印刷材料的過程控制和色彩配合。下面以TCS3200D 在色板顏色識別的應用為例,介紹它的具體使用。首先了解一些光與顏色的知識。  
 
:由上面的介紹可知,這種可編程的彩色光到頻率轉換器適合于色度計測量應用領域,如彩色打印、醫(yī)療診斷、計算機彩色監(jiān)視器校準以及油漆、紡織品、化妝品和印刷材料的過程控制和色彩配合。下面以TCS3200D 在色板顏色識別的應用為例,介紹它的具體使用。首先了解一些光與顏色的知識。  
?
# 三原色的感應原理  
+
====三原色的感應原理====
 
:通常所看到的物體顏色,實際上是物體表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反應。白色是由各種頻率的可見光混合在一起構成的,也就是說白光中包含著各種顏色的色光(如紅R、黃Y 、綠G、青V、藍B 、紫P )。根據德國物理學家赫姆霍茲(Helinholtz)的三原色理論可知,各種顏色是由不同比例的三原色(紅、綠、藍)混合而成的。  
 
:通常所看到的物體顏色,實際上是物體表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反應。白色是由各種頻率的可見光混合在一起構成的,也就是說白光中包含著各種顏色的色光(如紅R、黃Y 、綠G、青V、藍B 、紫P )。根據德國物理學家赫姆霍茲(Helinholtz)的三原色理論可知,各種顏色是由不同比例的三原色(紅、綠、藍)混合而成的。  
?
# :TCS3200D 識別顏色的原理  
+
====TCS3200D 識別顏色的原理====
 
:由三原色感應原理可知,如果知道構成各種顏色的三原色的值,就能夠知道所測試物體的顏色。對于TCS3200D 來說,當選定一個顏色濾波器時,它只允許某種特定的原色通過,阻止其他原色的通過。例如:當選擇紅色濾波器時,入射光中只有紅色可以通過,藍色和綠色都被阻止,這樣就可以得到紅色光的光強;同時,選擇其他的濾波器,就可以得到藍色光和綠色光的光強。通過這三個值,就可以分析投射到TCS3200D 傳感器上的光的顏色。   
 
:由三原色感應原理可知,如果知道構成各種顏色的三原色的值,就能夠知道所測試物體的顏色。對于TCS3200D 來說,當選定一個顏色濾波器時,它只允許某種特定的原色通過,阻止其他原色的通過。例如:當選擇紅色濾波器時,入射光中只有紅色可以通過,藍色和綠色都被阻止,這樣就可以得到紅色光的光強;同時,選擇其他的濾波器,就可以得到藍色光和綠色光的光強。通過這三個值,就可以分析投射到TCS3200D 傳感器上的光的顏色。   
?
# 白平衡和顏色識別原理   
+
====白平衡和顏色識別原理====  
 
:白平衡就是告訴系統什么是白色。從理論上講,白色是由等量的紅色、綠色和藍色混合而成的;但實際上,白色中的三原色并不完全相等,并且對于TCS3200D 的光傳感器來說,它對這三種基本色的敏感性是不相同的,導致 TCS3200D 的RGB輸出并不相等,因此在測試前必須進行白平衡調整,使得TCS3200D 對所檢測的"白色"中的三原色是相等的。進行白平衡調整是為后續(xù)的顏色識別作準備。在本裝置中,白平衡調整的具體步驟和方法如下:將傳感器對準色板的白色區(qū)域使其保持靜態(tài)并平行于色板,使入射光能夠良好的反射到TCS3200D 上;根據前面所介紹的方法,依次選通紅色、綠色和藍色濾波器,分別測得紅色、綠色和藍色的值,然后就可計算出需要的3 個調整參數。  
 
:白平衡就是告訴系統什么是白色。從理論上講,白色是由等量的紅色、綠色和藍色混合而成的;但實際上,白色中的三原色并不完全相等,并且對于TCS3200D 的光傳感器來說,它對這三種基本色的敏感性是不相同的,導致 TCS3200D 的RGB輸出并不相等,因此在測試前必須進行白平衡調整,使得TCS3200D 對所檢測的"白色"中的三原色是相等的。進行白平衡調整是為后續(xù)的顏色識別作準備。在本裝置中,白平衡調整的具體步驟和方法如下:將傳感器對準色板的白色區(qū)域使其保持靜態(tài)并平行于色板,使入射光能夠良好的反射到TCS3200D 上;根據前面所介紹的方法,依次選通紅色、綠色和藍色濾波器,分別測得紅色、綠色和藍色的值,然后就可計算出需要的3 個調整參數。  
 
:當TCS3200D 識別顏色時,就用這3 個參數對所測顏色的R、G 和B 進行調整。這里有兩種方法來計算調整參數:1 、依次選通三顏色的濾波器,然后對 TCS3200D 的輸出脈沖依次進行計數。當計數到255 時停止計數,分別計算每個通道所用的時間,這些時間對應于實際測試時TCS3200D 每種濾波器所采用的時間基準,在這段時間內所測得的脈沖數就是所對應的R、G 和B 的值。2 、設置定時器為一固定時間  (例如10ms),然后選通三種顏色的濾波器,計算這段時間內 TCS3200D 的輸出脈沖數,計算出一個比例因子,通過這個比例因子可以把這些脈沖數變?yōu)?255 。在實際測試時,室外同樣的時間進行計數,把測得的脈沖數再乘以求得的比例因子,然后就可以得到所對應的R、G 和B 的值。
 
:當TCS3200D 識別顏色時,就用這3 個參數對所測顏色的R、G 和B 進行調整。這里有兩種方法來計算調整參數:1 、依次選通三顏色的濾波器,然后對 TCS3200D 的輸出脈沖依次進行計數。當計數到255 時停止計數,分別計算每個通道所用的時間,這些時間對應于實際測試時TCS3200D 每種濾波器所采用的時間基準,在這段時間內所測得的脈沖數就是所對應的R、G 和B 的值。2 、設置定時器為一固定時間  (例如10ms),然后選通三種顏色的濾波器,計算這段時間內 TCS3200D 的輸出脈沖數,計算出一個比例因子,通過這個比例因子可以把這些脈沖數變?yōu)?255 。在實際測試時,室外同樣的時間進行計數,把測得的脈沖數再乘以求得的比例因子,然后就可以得到所對應的R、G 和B 的值。
?
==Color Sensor模塊的測試 ==
+
==使用方法 ==
?
實驗接線圖<br/>
+
===硬件設備===
?
[[文件:yansejx.jpg|700px|有框|居中]]
+
Carduino UNO R3 控制器×1  
?
我們使用Arduino控制器來做個測試,需要用到硬件設備如下:
+
#  Arduino  傳感器擴展板V5.0×1                
?
Arduino  控制器×1  
+
#  Color Sensor顏色傳感器模塊×1
?
#  Arduino  傳感器擴展板×1                
+
?
#  Color Sensor模塊×1
+
 
#  3P傳感器連接線×5  
 
#  3P傳感器連接線×5  
 
#  4P傳感器連接線×2  
 
#  4P傳感器連接線×2  
第44行: 第41行:
 
#  USB 數據通信線×1  
 
#  USB 數據通信線×1  
 
#  色板×1  
 
#  色板×1  
 +
===試驗接線圖===
 +
實驗接線圖<br/>
 +
[[文件:yansejiexian.jpg|700px|有框|居中]]
 
:使用杜邦線將Color Sensor 連接到Arduino傳感器擴展板接口上,連接順序為S0接數字口6 ,S1接數字口5 ,S2接數字口4 ,S3接數字口3 ,OUT接數字口2 ,OE、GND接GND,+5V 接+5V 。使用傳感器線將各種顏色食人魚燈連接到 Arduino傳感器擴展板上,連接順序為紅色食人魚燈接數字口 8 ,黃色燈接數字口 9 ,綠色燈接數字口10,藍色燈接數字口 11 ,白色燈接數字口 12。( 注:在使用傳感器線、杜邦線時,應注意對應連接,否則后果自負。) 完成硬件連接后,將 TimerOne庫文件粘貼到arduino軟件的libraries  中(如需庫文件請與我們聯系),無庫文件或將庫文件放錯位置代碼編譯可能將會出現錯誤提示。
 
:使用杜邦線將Color Sensor 連接到Arduino傳感器擴展板接口上,連接順序為S0接數字口6 ,S1接數字口5 ,S2接數字口4 ,S3接數字口3 ,OUT接數字口2 ,OE、GND接GND,+5V 接+5V 。使用傳感器線將各種顏色食人魚燈連接到 Arduino傳感器擴展板上,連接順序為紅色食人魚燈接數字口 8 ,黃色燈接數字口 9 ,綠色燈接數字口10,藍色燈接數字口 11 ,白色燈接數字口 12。( 注:在使用傳感器線、杜邦線時,應注意對應連接,否則后果自負。) 完成硬件連接后,將 TimerOne庫文件粘貼到arduino軟件的libraries  中(如需庫文件請與我們聯系),無庫文件或將庫文件放錯位置代碼編譯可能將會出現錯誤提示。
 
將代碼編譯后下載到Arduino里。Arduino實驗代碼如下。
 
將代碼編譯后下載到Arduino里。Arduino實驗代碼如下。
?
<pre style='color:blue'>#include <TimerOne.h>      // 引用 TimerOne.h 庫文件  
+
===例子程序===
 +
<pre style='color:blue'>
 +
#include <TimerOne.h>      // 引用 TimerOne.h 庫文件  
 
#define S0    6            // 定義 S0為引腳6  
 
#define S0    6            // 定義 S0為引腳6  
 
#define S1    5            // 定義 S1為引腳5  
 
#define S1    5            // 定義 S1為引腳5  
第219行: 第221行:
 
         digitalWrite(Ws,LOW);              //Ws 定義為低電平  
 
         digitalWrite(Ws,LOW);              //Ws 定義為低電平  
 
       }  
 
       }  
?
delay(4000);                               //延遲4 秒 </pre>
+
delay(4000);}                            //延遲4 秒
 +
</pre>
 +
===程序效果===
 
:在以上步驟完成后,我們首先需要在其程序啟動后白平衡(白平衡在上文中已介紹),下圖為Arduino實驗代碼的白平衡實驗現象:
 
:在以上步驟完成后,我們首先需要在其程序啟動后白平衡(白平衡在上文中已介紹),下圖為Arduino實驗代碼的白平衡實驗現象:
 
[[文件:vadrb4.jpg|500px|有框|居中]]
 
[[文件:vadrb4.jpg|500px|有框|居中]]
第230行: 第234行:
 
[[文件:vadrb10.jpg|500px|有框|居中]]
 
[[文件:vadrb10.jpg|500px|有框|居中]]
 
[[文件:vadrb11.jpg|500px|有框|居中]]
 
[[文件:vadrb11.jpg|500px|有框|居中]]
?
→購買地址TCS3200D 顏色傳感器 http://m.gharee.com/goods.php?id=73]
+
==視頻演示==
 +
[[File:hong wai yan se 01.png|400px|左|link=http://v.youku.com/v_show/id_XODc4NDc4MTQw.html?from=y1.7-2]]
 +
[[File:yan se 01.png|400px|居中|link=http://v.youku.com/v_show/id_XMzU0NzEyNDg4.html?from=y1.7-2]]
 +
<br/>
 +
==產品相關推薦==
 +
[[文件:erweima.png|230px|無框|右]]
 +
===購買地址===
 +
[http://m.gharee.com/goods.php?id=73 TCS3200D 顏色傳感器]<br/>
 +
===周邊產品推薦===
 +
[http://m.gharee.com/goods-546.html Carduino UNO R3 控制器]<br/>
 +
[http://m.gharee.com/goods-633.html 灰度傳感器]<br/>
 +
[http://m.gharee.com/goods-176.html Arduino ColorPAL Color Sensor 進口顏色傳感器 顏色識別]<br/>
 +
[http://m.gharee.com/goods-67.html Arduino 高亮LED食人魚燈]<br/>
 +
===相關問題解答===
 +
[http://www.makerspace.cn/forum.php?mod=viewthread&tid=5257&fromuid=10780 Arduino 顏色傳感器評測]<br/>
 +
===相關學習資料===
 +
[http://v.youku.com/v_show/id_XMzU0NzEyNDg4.html?from=y1.7-2 視頻: 運用顏色傳感器進行多彩顏色識別檢測]<br/>
 +
[http://v.youku.com/v_show/id_XNDkxNzIzNzM2.html?from=y1.7-2 視頻: 愛上Arduino與愛上Processing互動之顏色過度識別]<br/>
 +
[http://v.youku.com/v_show/id_XODc4NDc4MTQw.html?from=y1.7-2 視頻: 紅外無線發(fā)射接收之顏色識別系統]<br/>
 +
[http://www.makerspace.cn/portal.php 奧松機器人技術論壇]<br/>

2015年10月21日 (三) 13:48的最后版本

Vadrb1.jpg

目錄

產品概述

Color Sensor是一款簡單易用、小巧請便、性價比較高的顏色識別、檢測模塊,與國外同類產品相比,不但體積小,功能強,而且設計巧妙具有以下特點:一、可完成分辨率的光照度/ 頻率轉換;二、色彩和滿度輸出頻率可編程調整;三、可以直接與微處理器或其他邏輯電路相連接,適合各種開發(fā)板、控制器等產品。

規(guī)格參數

  1. 顏色光到頻率轉換芯片:TCS3200D
  2. 輸出頻率范圍從10kHz~12kHz,占空比50%
  3. 工作電壓:+2.7V~+5.5V
  4. 工作電流:1.4mA
  5. 檢測狀態(tài):靜態(tài)檢測
  6. 最佳檢測距離:10mm
  7. 工作溫度:-40°C~+85°C
  8. 尺寸大?。?5.56mmx 35.56mm x 1.60mm
  9. 重量大小:4.7g
  10. 固定孔直徑:3mm
  11. 對角固定孔間距:16.60mm
  12. 相鄰固定孔間距:11.74mm

TCS3200D 芯片介紹

目前的顏色傳感器通常是在獨立的光電二極管上覆蓋經過修正的紅、綠、藍濾波片,然后對輸出信號進行相應的處理,才能將顏色信號識別出來;有的將兩者集合起來,但是輸出模擬信號,需要一個A/D 電路進行采集,對該信號進一步處理,才能進行識別,增加了電路的復雜性,并且存在較大的識別誤差,影響了識別的效果。TA OS(Texas Advanced Optoelectronic Solutions )公司最新推出的顏色傳感器 TCS3200D(如下圖),不僅能夠實現顏色的識別與檢測,與以前的顏色傳感器相比,還具有許多優(yōu)良的新特性。
Vadrb2.jpg

TCS3200D 芯片的結構框圖與特點

TCS3200D 是TAOS 公司推出的可編程彩色光到頻率的轉換器,它把可配置的硅光電二極管與電流頻率轉換器集成在一個單一的CMOS 電路上,同時在單一芯片上集成了紅綠藍(RGB)三種濾光器,是業(yè)界第一個有數字兼容接口的RGB彩色傳感器,TCS3200D 的輸出信號是數字量,可以驅動標準的 TTL 或CMOS 邏輯輸入,因此可直接與微處理器或其他邏輯電路相連接,由于輸出的是數字量,并且能夠實現每個彩色信道10位以上的轉換精度,因而不再需要A/D 轉換電路,使電路變得更簡單。
TCS3200D 采用8 引腳的SOIC 表面貼裝式封裝,在單一芯片上集成有64個光電二極管,這些二極管分為四種類型,其 16個光電二極管帶有紅色濾波器;16個光電二極管帶有綠色濾波器;16個光電二極管帶有藍色濾波器,其余16個不帶有任何濾波器,可以透過全部的光信息,這些光電二極管在芯片內是交叉排列的,能夠最大限度地減少入射光輻射的不均勻性,從而增加顏色識別的精確度;另一方面,相同顏色的 16個光電二極管是并聯連接的,均勻分布在二極管陣列中,可以消除顏色的位置誤差。工作時,通過兩個可編程的引腳來動態(tài)選擇所需要的濾波器,該傳感器的典型輸出頻率范圍從2Hz -500kHz,用戶還可以通過兩個可編程引腳來選擇 100 %、20%或2 %的輸出比例因子,或電源關斷模式。輸出比例因子使傳感器的輸出能夠適應不同的測量范圍,提高了它的適應能力。例如,當使用低速的頻率計數器時,就可以選擇小的定標值,使TCS3200D 的輸出頻率和計數器相匹配。 當入射光投射到TCS3200D 上時,通過光電二極管控制引腳S2、S3的不同組合,可以選擇不同的濾波器;經過電流到頻率轉換器后輸出不同頻率的方波(占空比是50%),不同的顏色和光強對應不同頻率的方波;還可以通過輸出定標控制引腳S0、S1,選擇不同的輸出比例因子,對輸出頻率范圍進行調整,以適應不同的需求。 下面簡要介紹TCS3200D 芯片各個引腳的功能及它的一些組合選項。 S0、S1用于選擇輸出比例因子或電源關斷模式;S2、S3用于選擇濾波器的類型;OE反是頻率輸出使能引腳,可以控制輸出的狀態(tài),當有多個芯片引腳共用微處理器的輸出引腳時,也可以作為片選信號,OUT是頻率輸出引腳,GND是芯片的接地引腳,VCC為芯片提供工作電壓,下表是S0、S1及S2、S3的可用組合。
Vadrb3.jpg

TCS3200D 識別顏色的原理

由上面的介紹可知,這種可編程的彩色光到頻率轉換器適合于色度計測量應用領域,如彩色打印、醫(yī)療診斷、計算機彩色監(jiān)視器校準以及油漆、紡織品、化妝品和印刷材料的過程控制和色彩配合。下面以TCS3200D 在色板顏色識別的應用為例,介紹它的具體使用。首先了解一些光與顏色的知識。

三原色的感應原理

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

TCS3200D 識別顏色的原理

由三原色感應原理可知,如果知道構成各種顏色的三原色的值,就能夠知道所測試物體的顏色。對于TCS3200D 來說,當選定一個顏色濾波器時,它只允許某種特定的原色通過,阻止其他原色的通過。例如:當選擇紅色濾波器時,入射光中只有紅色可以通過,藍色和綠色都被阻止,這樣就可以得到紅色光的光強;同時,選擇其他的濾波器,就可以得到藍色光和綠色光的光強。通過這三個值,就可以分析投射到TCS3200D 傳感器上的光的顏色。

白平衡和顏色識別原理

白平衡就是告訴系統什么是白色。從理論上講,白色是由等量的紅色、綠色和藍色混合而成的;但實際上,白色中的三原色并不完全相等,并且對于TCS3200D 的光傳感器來說,它對這三種基本色的敏感性是不相同的,導致 TCS3200D 的RGB輸出并不相等,因此在測試前必須進行白平衡調整,使得TCS3200D 對所檢測的"白色"中的三原色是相等的。進行白平衡調整是為后續(xù)的顏色識別作準備。在本裝置中,白平衡調整的具體步驟和方法如下:將傳感器對準色板的白色區(qū)域使其保持靜態(tài)并平行于色板,使入射光能夠良好的反射到TCS3200D 上;根據前面所介紹的方法,依次選通紅色、綠色和藍色濾波器,分別測得紅色、綠色和藍色的值,然后就可計算出需要的3 個調整參數。
當TCS3200D 識別顏色時,就用這3 個參數對所測顏色的R、G 和B 進行調整。這里有兩種方法來計算調整參數:1 、依次選通三顏色的濾波器,然后對 TCS3200D 的輸出脈沖依次進行計數。當計數到255 時停止計數,分別計算每個通道所用的時間,這些時間對應于實際測試時TCS3200D 每種濾波器所采用的時間基準,在這段時間內所測得的脈沖數就是所對應的R、G 和B 的值。2 、設置定時器為一固定時間 (例如10ms),然后選通三種顏色的濾波器,計算這段時間內 TCS3200D 的輸出脈沖數,計算出一個比例因子,通過這個比例因子可以把這些脈沖數變?yōu)?255 。在實際測試時,室外同樣的時間進行計數,把測得的脈沖數再乘以求得的比例因子,然后就可以得到所對應的R、G 和B 的值。

使用方法

硬件設備

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

試驗接線圖

實驗接線圖

Yansejiexian.jpg
使用杜邦線將Color Sensor 連接到Arduino傳感器擴展板接口上,連接順序為S0接數字口6 ,S1接數字口5 ,S2接數字口4 ,S3接數字口3 ,OUT接數字口2 ,OE、GND接GND,+5V 接+5V 。使用傳感器線將各種顏色食人魚燈連接到 Arduino傳感器擴展板上,連接順序為紅色食人魚燈接數字口 8 ,黃色燈接數字口 9 ,綠色燈接數字口10,藍色燈接數字口 11 ,白色燈接數字口 12。( 注:在使用傳感器線、杜邦線時,應注意對應連接,否則后果自負。) 完成硬件連接后,將 TimerOne庫文件粘貼到arduino軟件的libraries 中(如需庫文件請與我們聯系),無庫文件或將庫文件放錯位置代碼編譯可能將會出現錯誤提示。

將代碼編譯后下載到Arduino里。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,用于存儲計數頻率 
int   g_array[3];    //定義整型數組變量 g_array[3],用于存儲RGB的值 
int   g_flag = 0;   	 //定義整形變量 g_flag 并賦初值為0,用于過濾器排列 
float g_SF[3];       //定義浮點型數組變量g_SF[3],用于存儲RGB比例因子 
int   value[3];      //定義定義整型數組變量value[3],用于判斷顏色 
//  初始化tsc230 和設置頻率 
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);       // 沒有過濾藍色 
         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);           //設置一秒周期 
} 
void setup() 
{ 
  pinMode(Rs,OUTPUT);               //設定Rs引腳為輸出狀態(tài) 
  pinMode(Ys,OUTPUT);               //設定Ys引腳為輸出狀態(tài) 
  pinMode(Gs,OUTPUT);               //設定Gs引腳為輸出狀態(tài) 
  pinMode(Bs,OUTPUT);               //設定Bs引腳為輸出狀態(tài) 
  pinMode(Ws,OUTPUT);              //設定Ws引腳為輸出狀態(tài) 
  TSC_Init();                         //初始化tcs230 
  Serial.begin(9600);                   //打開串口并設置通信波特率為 9600 
  Timer1.initialize();                      //初始化默認是一秒 
  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] ;           // 藍色的比例因子 
  
  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]數值滿足為紅色值范圍則執(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]數值滿足為黃色值范圍則執(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]數值滿足為綠色值范圍則執(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]數值滿足為藍色值范圍則執(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]數值滿足為白色值范圍則執(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]數值不滿足上述顏色值范圍則執(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 秒
 

程序效果

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

視頻演示

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


產品相關推薦

Erweima.png

購買地址

TCS3200D 顏色傳感器

周邊產品推薦

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

相關問題解答

Arduino 顏色傳感器評測

相關學習資料

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