Arduino 的一个组件,是用一个小芯片获得颜色信息的。
由一个白色led照射物体,然后光反射到芯片上。
这个颜色信息关键的获取地方是:
如果有光照射芯片,
在一段时间 t 内,一种颜色比如 r 会一直返回脉冲 rn ,
最后就有颜色的几个数值, rn gn 和 bn
再把它们 map 到 0-255 ,(map函数是:比如 0 - 2000 的范围,map 到 0 - 255,如果是1000 的话,map出来的就是 127左右,这样子) 就是 rgb 值了。
那么问题是:
map 要指定一个范围,
这个范围固定后,那么在反射光亮度不高,那么 map 出来的值就很小,可能就在 0-30 的样子,接近黑色。或者反射光太强了, map出来的值就太大,一直在 240以上,接近白光了。
这样这个取色就只能在一定的反射距离内,然后周围还不能太亮或者太暗。
就是这个范围怎么才能动态计算,像手机摄像机的亮度自适应一样。
求个思路~
1
Septembers 2015-02-18 20:17:39 +08:00
你需要引入lux
拓展阅读1: https://en.wikipedia.org/wiki/Lux 拓展阅读2: https://github.com/Kilian/f.lux-indicator-applet |
2
kokutou OP |
3
loading 2015-02-18 20:23:36 +08:00 via Android
光敏电阻不好吗?
|
4
mhycy 2015-02-18 20:37:49 +08:00
你需要的是一个信号自动增益控制(AGC)模块,但是这是需要参照物的。
对于摄像机,参照可以直接是CMOS单元产生的电压/电流强度。 那么只要稳定在一个合适的范围就对了,最高的子像素电平不超过处理上限就行。 下限就不管了,反正取的是一个固定的区间(动态范围) 对于你这个需求,首先你需要获得一个独立于最终颜色值的一个数据用于前置处理。 不然依赖颜色是无法计算的。 |
5
akfish 2015-02-18 21:03:56 +08:00
你需要在可控环境下做校准,通过实验获得传感器在特定亮度下的频率响应曲线。
至于亮度对于测量结果的影响,你可以在不同亮度条件下测量多组响应曲线,尝试拟合出频率响应曲线以亮度为自变量的函数。然后测量时先测亮度,用测得得的亮度计算响应曲线。 要么就限制使用环境,比如采样点保持黑暗,用已知的人工光源照明。 你可以去找些现成的color sensor的datasheet来看看,比如: https://www.sparkfun.com/datasheets/Sensors/Imaging/AV02-0314EN.pdf 第5页就是响应曲线 |