RGB顏色傳感器


RGB顏色傳感器。傳感器芯片不知道是TCS230,或是TCS3200。二者pinout及電氣性能一樣。左邊的模塊有8個引腳,LED常亮。S0, S1 默認上拉為高電平,/OE下拉低電平。S2, S3, OUT 三個引腳供單片機接口。如下:

照片中右邊的模塊有10個引腳,原理與8pin相同,只是多了一個LED控制引腳。默認LED點亮,接低電平熄滅:

S2, S3選擇顏色通道,如下表。OUT輸出50% duty方波,方波頻率與光強成比例,規格書給出的范圍為 10-20kHz(周期50-100us):

 程序需要us級時鍾。分別選擇R、G、B通道,測量OUT方波周期/頻率,可轉換為 RGB三原色。實測方波周期在10-160us范圍內,並且受環境光照條件等的影響。如下圖,第一行為白色測量值(白平衡),接下來每2行為一種顏色的測量值及RGB轉換值,分別為紅色、綠色、藍色、黃色。最后2行為白色測量值及RGB轉換值:

轉換算法如下。使用了白色校正,即以白色的RGB通道測量值分別為RGB三原色的上限,將測量值規范化到0-255范圍內。測量值(原始值)為方波周期,單位為us。注意,頻率的比值,等於周期的比值的倒數,因此,下面代碼中的宏 _App_GetComponent() 用白色測量值除以待轉換的測量值,而不是相反:

typedef struct {
    uint32_t red;
    uint32_t green;
    uint32_t blue;
} _App_Color;

#define _App_GetComponent(t, w) ( (t)>(w) ? (255 * (w) / (t)) : 255 )

void _App_ToRGB(_App_Color *raw, _App_Color *white) {
    raw->red = _App_GetComponent(raw->red, white->red);
    raw->green = _App_GetComponent(raw->green, white->green);
    raw->blue = _App_GetComponent(raw->blue, white->blue);
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM