使Arduino+各种传感器的电子制作更轻松的罗姆传感器评估套件。
何谓颜色传感器?
恰如其名,颜色传感器是可以获取颜色数据的传感器。颜色传感器还有"色彩传感器"、"颜色识别传感器"、"辨色传感器"、"数字颜色传感器"等名称。颜色传感器的原理是通过其内部的红(R)、绿(G)、蓝(B)传感器加上滤色器将可视光区分为不同的信号来获取颜色数据。
罗姆传感器评估套件中搭载了"BH1745NUC"作为颜色传感器模块。
照片1 颜色传感器模块BH1745NUC
照片2 颜色传感器模块BH1745NUC
颜色传感器的试用
下面,我们介绍通过Arduino使用颜色传感器的方法。
颜色传感器的安装
从下图可知,颜色传感器的安装区域与地磁传感器一样,均为I2C I/F区。关于电源电压,地磁传感器为1.8V,颜色传感器为3V,因此应将左上方的电源电压切换跳线针脚切换到3V的位置。
图1 传感器护罩的连接方法说明
照片3 颜色传感器的安装
安装完成后,应进行Arduino的程序设定。
下载颜色传感器用的库文件
接下来,和地磁传感器时一样,应安装使用传感器的库。通过颜色传感器说明页面下方的软件下载来下载库文件。
图2 颜色传感器用库文件的下载
文件下载完成后,打开Arduino IDE添加库,选择下载的文件"BH1745NUC.zip",颜色传感器的动作准备即告完成。
照片4 添加库"BH1745NUC"
顺利添加库后,可以在"sketch示例"及"使用库"的栏中确认BH1745NUC的标识。
照片5 BH1745NUC被添加到库
运行颜色传感器的样本程序(sketch)
从sketch示例中,调用BH1745NUC的样本程序。该程序单纯显示颜色传感器获取的值。
※样本程序(sketch)的编译未通过时,可能是Arduino IDE较旧,请用最新的Arduino IDE进行尝试。
BH1745NUC的样本程序(sketch)
照片6 颜色传感器样本程序的运行结果
观看串行监视器中显示的数值,可以看见RED、GREEN、BLUE中增加了CLEAR。这个CLEAR表示可以获取可视光波长强度的值。一边观察串行监视器,一边将带颜色的物体靠近传感器,或者将光靠近传感器,可以发现传感器的值会发生变化。若将传感器遮蔽起来,由于光自身无法进入传感器,CLEAR的值会变小。这种情况下,RGB的数值也会变小,很难进行颜色判别。与此相反,若用彩色LED等照射传感器,则可以检测到超过10000的数值。由此可见,通过彩色LED等进行输入是比较合适的。
利用颜色传感器分析颜色,用全彩色LED显示
我们通过样品对颜色传感器的动作进行确认后,下一步将对其进行具体的应用。首先,为了正确处理颜色数据,我们必须制作一个简单的电路,即通过颜色传感器判别颜色,并将判别的颜色用全彩色LED显示出来。
将颜色传感器的值通过全彩色LED显示的sketch程序
for(int i=0;i<3;i++){
if(maxVal < rgbc){
maxVal = rgbc;
}
}
rVal = (float(rgbc[0])/maxVal)*255;
gVal = (float(rgbc[1])/maxVal)*255;
bVal = (float(rgbc[2])/maxVal)*255;
此程序改变了样本程序的一部分。在红色指定的部分,RGB获取最大值,将其作为最大值(maxVal)保存在变量中,然后与该最大值进行比较,计算出RGB各颜色的强度比率(float(rgbc[0])/maxVal部分)。然后,由于AnalogWrite可输出0~255的值,通过颜色强度比率乘以AnalogWrite的最大值255,将检出的颜色大致转换为RGB,输出到全彩色LED中。
由于试用的全彩色LED的特性不同,有时会出现无法正确反映RGB各值的情况,这种情况下可通过调整LED的电阻值、或者忽略程序中的小值等方法,来获取分级的颜色。在以下程序中,我们将红色字符部分小于50的各值忽略不计,将其作为0来处理。
//设定各颜色的阈值
if(rVal < 50){
rVal = 0;
}
if(gVal < 50){
gVal = 0;
}
if(bVal < 50){
bVal = 0;
}
将颜色传感器的值通过全彩色LED显示的sketch程序2
这一边的颜色清晰地反映出来了。整体上的印象是比以往的操作更轻松。 总结ROHM Sensor shield-EVK-001传感器套件免费申请
https://www.cirmall.com/bbs/thread-63300-1-1.html
|