網頁最後修改時間:2018/02/27
而此篇網頁改用 TCS34725 做為取色的感測器,加入一個開始取色的按鈕,經 Gamma 校正後使用 WS2812B (或 APA102) 全彩 LED 顯色,取色後的原始數據與 Gamma 校正後的數據可輸出至 Serial Moitor 或 (和) 整合型 LCD 上。實際測試後的結果顯示,效果更佳、更快!可自行參考網頁中測試的影片。
TCS34725 是一顆顏色感測器 (可看賣場裡的說明),除了可取回 RGBC (紅、綠、藍和透明光) 值之外,根據官方釋出的文件也說明了計算亮度和色溫的方法 (Calculating Color Temperature and Illuminance),但在這裡只是提出,其計算方式與範例,可參考相關的 Arduino 函式庫。
接下來,先由電路圖看起!
硬體參考接線圖:
因為使用兩種不同的可定址全彩 LED 來顯示取得的顏色值,所以有兩個接線圖;基本上,兩者的電路沒多大差異!
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
*WS2812B 做為顯示 LED:
TCS34725-with-WS2812B-RGB-LED 接線圖 |
* APA102 做為顯示 LED:
TCS24725-with-APA102-RGB-LED 接線圖 |
* 實際接好線的電路:
下面是將 WS2812B 和 APA102 兩個 LED 的電路全部接在一起的電路,使用的時候只能選擇插上其中一款 LED 做顯示;即便兩個一起裝上,也只有一個會正確顯示!
另外,電源的使用上要注意不要直接使用 Arduino UNO 上面的 5V 電源給全部電路用,要使用外接電源;如下圖最右邊插在電路板電源處的紅黑兩條線,就是外接電源線用的。
實際接好線的電路 |
網頁所使用的零件可至下面分類網頁購買:
- TCS34725-(整合IR遮光濾光片)顏色光感測數位轉換模組
- WS2812B 焊接電路板
- WS2812B 黑色焊接電路板
- APA102 5050 全彩 LED 點光源焊接電路板
- {5V}整合型{4/8BIT,IIC,4SPI}1602英文字型藍底白字LCD螢幕
上面只列出重點元件,其餘請搜尋賣場或向其他賣場購買
*********************************************************************************測試結果影片:
錄影畫面 |
從響應圖並對照影片中取值的結果可以清楚看到,取值的時候會伴隨著其他部分的數據;例如,藍色紙卡取色時,也會有綠色值,但紅色值則會相對很低。
下面是實測的兩則影片,請觀賞!
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* WS2812B 做為顯示 LED:
Serial Monitor Log, TCS34725+WS2812B |
* APA102 做為顯示 LED:
Serial Monitor Log, TCS34725+APA102 |
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
有購買 TCS34725 的使用者,網頁中所需相關資料已放置於雲端硬碟,請自行下載使用!
其餘的使用者,請根據說明自行修改,相關需要的資料請參考網頁最下方的連結,不再另外提供!
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
影片中所使用的程式碼,是從下載的 TCS34725 函式庫裡的範例程式 {TCS34725} / colorview 所修改,Arduino IDE v1.8.5 編譯 (Arduino UNO 開發板),修改與增加的部分有:
- 加入一個取色啟動的按鈕
- 加入整合型 LCD 的支援
- 移除原先程式裡使用的 RGB LED,改用可大量串接使用的可定址全彩 LED ( WS2812B / APA102 )
完成上面項目之後,就可以開始進行測試。不過有一點需要注意,那就是環境光源的種類與強弱會影響檢測的結果。若結果因為這樣的關係造成誤差,可以改變 TCS34725 在程式 ( line:19 ) 一開始宣告實體裡的兩個引數值:積分時間 (Integration Time)和增益 (Gain)。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
積分時間跟暫存器 ( 0x01 (7:0) ) 的 ATIME 有關,公式為:
Integration Time (ms) = ( 256 - ATIME ) * 2.4
Max RGBC Count = ( 256 - ATIME ) * 1024
Max RGBC Count 最大值只能到 65535;函式庫預設的選項有下面幾個可以選擇:
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*///*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
積分時間跟暫存器 ( 0x01 (7:0) ) 的 ATIME 有關,公式為:
Integration Time (ms) = ( 256 - ATIME ) * 2.4
Max RGBC Count = ( 256 - ATIME ) * 1024
Max RGBC Count 最大值只能到 65535;函式庫預設的選項有下面幾個可以選擇:
- TCS34725_INTEGRATIONTIME_2_4MS
- TCS34725_INTEGRATIONTIME_24MS
- TCS34725_INTEGRATIONTIME_50MS
- TCS34725_INTEGRATIONTIME_101MS
- TCS34725_INTEGRATIONTIME_154MS
- TCS34725_INTEGRATIONTIME_700MS
- TCS34725_GAIN_1X
- TCS34725_GAIN_4X
- TCS34725_GAIN_16X
- TCS34725_GAIN_60X
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
* Arduino 函式庫:
程式碼裡所使用的函式庫,可點擊下面連結下載壓縮檔自行安裝
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Arduino 燒錄 Hex 檔:
雖然沒有在網頁中提供原始程式碼,但是在這裡提供 APA102 和 WS2812B 兩種全彩 LED 兩個的 Arduino Hex 燒錄檔案;硬體線路不需要使用整合型 LCD。
Hex 檔案下載之後,使用下面提供的燒錄軟體,操作方式與 Arduino IDE 一樣,選擇好 Hex 檔和通訊埠,就能上傳。
- 下載 Arduino UNO Hex 檔 (APA102 和 WS2812B 兩個版本)
- 下載 Arduino UNO Hex 檔燒錄程式
實際使用過 TCS3200 與 TCS34725 發現;TCS34725 接線用的比較少,測量速度快,支援積分時間與增益調整,能夠在低光源或是不同照明條件下的測量,而且能夠用來輔助量測色溫與照度 ... 等,在需要用到顏色檢測的應用場合中,是現今市場上一款非常好的顏色感測器,值得選用。
結束之前,讓我們一起來看看這款顏色感測器實際的應用:分類 M&M 巧克力的顏色
<< 部落格相關文章 >>
大大您好, 請問您是否有試過
回覆刪除串接多顆TCS34725 RGB sensor 在一塊Arduino 版上
是否若要使用TCS34725就必須要一對一的Arduino 版
謝謝
TCS34725 只有一個通訊地址,不能做切換,所以如果要一次跟多顆 TCS34725 做 I2C 通訊,可以考慮 TCA9548A(8 通道 IIC / I2C 擴充)模組,只要在原程式多加入切換欲讀寫的 I2C 通道的程式碼,就能讀取最多八個 TCS34725;要更多,就再多買。
刪除感謝您的回覆
回覆刪除請問如果想寫一個辨色後控制led燈的開關要怎麼做呢~
回覆刪除例如辨色為綠色的時候黃光的LED燈亮起,橘色的時候白光的LED燈亮起之類的
不同的顏色設定不同的LED燈亮起,共有三顆LED燈分別為黃光、白光、暖白光
謝謝!!!
先取得同一顏色輸出多次的 RGB 值做運算得到一個平均值,然後設定一個合理的範圍值,當取得的數值或在這個範圍內稱之為該種顏色,然後對應條件是做輸出就可以了。
刪除網頁裡面的影片也是用這樣的方式下去分類各種顏色的糖果的,可以上它網站去看看程式是怎麼寫的。
謝謝!!!
刪除大大您好,請問使用此顏色感測器後,還需要作白平衡校正嗎?
回覆刪除TCS34725 支持輸出RGB顏色數據,不需要白平衡;但沒人阻止你做,如果你覺得需要。
刪除程式是由下面的範例做修改的,可看到裡面是沒有白平衡校正
https://github.com/adafruit/Adafruit_TCS34725/blob/master/examples/colorview/colorview.ino
謝謝
刪除請問拿這個去量螢幕上的顏色,不知可不可行?
回覆刪除看到有些sensor說明裡,註明了是量測非發光體.
沒這樣用過!但應該有專用於螢幕量測的感測器。
刪除謝謝!
刪除目前好像沒看到像您介紹的這個,好入手也易上手,能給螢幕用的sensor.
對丫, 我也正在找能夠檢測螢幕的感測器
回覆刪除