码迷,mamicode.com
首页 > 其他好文 > 详细

RGB颜色传感器

时间:2018-01-21 11:01:37      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:环境   因此   blog   图片   microsoft   白平衡   struct   png   tor   

技术分享图片

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

  

RGB颜色传感器

标签:环境   因此   blog   图片   microsoft   白平衡   struct   png   tor   

原文地址:https://www.cnblogs.com/vinccc/p/8322113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!