顏色感測器模組 TCS3200D/TCS230 顏色識別感測器模組
教學範例:
https://atceiling.blogspot.com/2019/08/arduino58tcs3200-gy-31.html
https://sites.google.com/view/rayarduino/tcs3200-color-sensor
影片 https://youtu.be/CPUXxuyd9xw
適用:Arduino樹莓派及MCU開發板拓展
光罩的功能:抗光干擾, 減少誤判感測的光譜數據,讓顏色判讀更精準
TCS3200識別顏色的原理:
1.透過一個陣列的光電檢測器,每個都有紅色,綠色或藍色濾光片,或沒有濾光片(透明)
2.光由三原色(紅、綠、藍)組成的,白光照物體的光反射到晶片 ,分析3個色的數值
3.TCS3200 依序採集 3個顏色的數據
說明:感測一個物體的顏色時,需輪流讓三個顏色通過濾波器檢測當採集紅色時,
只有紅色光可以通過,藍色和綠色都被阻止
4.分析投射到TCS3200感測器上的光來判斷顏色,
5. 模組的S2和S3腳位:設置欲感測的顏色
例如: 感測 藍色,S2為低電位和 S3高電位,接收藍色光的數值
顏色感測器說明:
1.TCS230採用8引腳的SOIC表面貼裝式封裝
2.單一晶片上集成有64個光電二極體共分四種類型。
16個光電二極體帶有紅色濾波器;
16個光電二極體帶有綠色濾波器;
16個光電二極體帶有藍色濾波器;
16個不帶有任何濾波器,可以透過全部的光資訊。
3.光電二極體在晶片內是交叉排列的,最大限度地減少入射光輻射的不均勻性
從而增加顏色識別的精確度
4.另一方面相同顏色的16個光電二極體是並聯連接分佈在二極體陣列中
可以消除顏色的位置誤差。
5.工作時通過兩個可程式設計的引腳來動態選擇所需要的濾波器。
感測器的典型輸出頻率範圍從2 Hz~500 kHz,
通過兩個可程式設計引腳來選擇100%、20%或2%的輸出比例因數或電源關斷模式。
6.輸出比例因數使感測器的輸出能夠適應不同的測量範圍,提高了它的適應能力。
例如:當使用低速的頻率計數器時,就可以選擇小的定標值,
使TCS230的輸出頻率和計數器相匹配。
產品規格:
1.採用原裝進口晶片TCS3200 PCB板採用鍍金工藝
2.TCS3200是TCS230升級版本,效果更好
3.供電電源 3-5v
4.有光罩的 可抗光干擾
5.白色LED,可控制亮滅,可檢測不發光物體顏色
6.可檢測不發光物體顏色
7.PCB尺寸:
無光罩感測器:(L)34mm*(W)25mm
有光罩感測器:(L)34mm*(W)34mm
8.最佳檢測距離:1 cm
白平衡說明:
1.讓系統建立白色光的標準數值。程式須進行白平衡調整,然後程式碼對TCS3200感測產生的三原色做調整
2.白平衡調整後,顏色識別會更真確
3.白平衡調整步驟:
3-1 將白色的光源,照射到TCS3200感測晶片
3-2 依序 分別設定選 紅/綠/藍色濾波器,測得3個色的調整參數。
3-3 程式碼寫TCS3200的輸出脈衝。當計數到255時停止計數,
3-4 分別計算每個通道所用的時間。這些時間對應于實際測試時TCS230每種濾波器所採 用的時間基準,
在這段時間內所測得的脈衝數就是所對應的R、G和B的值。
3-5 設置計時器為一固定時間(例如10 ms),然後選通三種顏色的濾波器,
計算這段時間內TCS230的輸出脈衝數,計算出一個比例因數,
通過這個比例因數可以把這些脈衝數變為255。
3-6在實際測試時,使用同樣的時間進行計數,把測得的脈衝數再乘以求得的比例因數,
然後就可以得到所對應的R、G和B的值
發貨清單:感測器模組 1個 塑膠袋包裝
簡單的測試程式如下:
#include
#define uchar unsigned char
#define uint unsigned int
sbit S0=P1^0; //S0,S1為設置輸出的占空比
sbit S1=P1^1;
sbit S2=P1^3; //S2,S3為設置慮光的模式
sbit S3=P1^4;
sbit OE=P1^2; //使能
void RS232_init()
{
TMOD=0X20; //計時器1工作在方式1
SCON=0x50;
PCON=0X80; //
TH1=TL1=0XFF;//22.1184M晶振,串列傳輸速率設置為115200
TR1=1;
TI=0;
RI=0;
}
void send_char(uchar a) //發送資料
{
SBUF=a;
while(TI==0);
TI=0;
}
uchar get_char() //接收資料
{
while(RI==0);
RI=0;
return SBUF;
}
uint color_display(uchar m)
{
uint time,a;
a=m;
TMOD=0x61; //計數器1,計時器0工作在16位元方式
TH0=TL0=0; //從零開始計數,定時
TH1=TL1=0;
S0=1;
S1=1;
S2=m&0x01;
S3=m&0x02;
OE=0;
TR0=TR1=1;
while(TL1<250);
TR1=TR0=0;
OE=1;
time=TH0*256+TL0;
return(time);
}
// 通過串口來選擇顏色種類的通道,再由於不同顏色對應不同的時間(計數值一樣),
//從而確定不同的顏色。
void main()
{
uint temp;
RS232_init();
OE=1;
while(1)
{
temp=color_display(get_char());
RS232_init();
send_char(temp/1000);
send_char(temp%1000/100);
send_char(temp%100/10);
send_char(temp%10);
}
}