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);
}

  

转载于:https://www.cnblogs.com/vinccc/p/8322113.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值