rgb颜色传感器:RGB颜色传感器(示例代码)

2021/11/06 19:35 · 传感器知识资讯 ·  · rgb颜色传感器:RGB颜色传感器(示例代码)已关闭评论
摘要:

rgb颜色传感器:RGB颜色传感器(示例代码)RGB颜色传感器。传感器芯片不知道是TCS230,或是TCS3200。二者pinout及电气性能一样。左边的模块有8个引脚,LED常亮。S0,S1默认上拉为高电平,/OE下拉低电平。S2,S3,OUT三个引脚供单片机接口。如下:照片中右边的模块有10个引脚,原理与8pin相同,只是多了一个LED控制引脚。默认LED点亮,接低电平熄灭:S

rgb颜色传感器: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);
}
  
rgb颜色传感器:RGB颜色传感器(示例代码)  第1张

rgb颜色传感器:rgb颜色传感器

  使用复合结构
  超级RGB传感器的开发,是通过对传感头结构的重新设计,以
  求更为优异的整体表现。
  发射器使用了光纤,能够产生难以置信的单一光点,同时还缩
  小了传感头的体积。
  光线接收回路内置在传感头中,从而提高了检测能力和检测稳
  定性。

  支持三重16位计算的RGB光源
  使用三色光源进行的目标识别
  超级RGB传感器结合了三个独立的彩色LED。各种颜色信号
  在接收器中被转换成16位数据来进行颜色识别,这样就可以
  不受物体振动的影响确保检测的性。
  简易灵敏度调整,单键校正
  只需按下一个键就可以实现校正的超
  级RGB传感器。这种简单的方式消除
  了不同人员操作时产生的变动,并确
  保持续、稳定的检测。

  较少受到形状、位置、倾斜度和表面光泽的影响
  CZ-H35S/CZ-H37S结合了一个偏光滤镜,该偏光滤
  镜可以消除光泽部位的反光并只凭借物体的色彩组成
  来进行识别。即使改变物体的状况,CZ-H35S/
  CZ-H37S仍能保持的检测。
rgb颜色传感器:RGB颜色传感器(示例代码)  第2张

rgb颜色传感器:颜色传感器

产品介绍

LTR-381RGB-MT颜色传感器是将一个集成的低电压I2C环境光传感器(ALS)和彩色传感器(CS)封装在一个2x2微型LED上,LTR-381RGB-MT光宝RGB颜色传感器将光(红色、绿色、蓝色和IR)强度转换为能够直接I2C接口的数字输出信号,ALS在宽动态范围内提供线性响应,非常适合于非常低或明亮的环境亮度下的应用。

LTR-381RGB-MT光宝RGB颜色传感器 特点:
I2C接口(标准模式@100kHz或快速模式@400kHz)/I2C interface (Standard mode @100kHz or Fast mode @400kHz)
环境光和RGB二合一封装在超小尺寸LED上/Ambient Light / Advanced RGB in ultra-small chipled package
睡眠模式功耗极低/Very low power consumption with sleep mode capability
操作电压:1.7V-3.6V/Operating voltage ranges: 1.7V to 3.6V
工作温度:-40 — +85℃/Operating temperature ranges: -40 to +85 oC
内置温度补偿电路/Built-in temperature compensation circuit
具有上下阈值的ALS的可编程中断功能/Programmable interrupt function for ALS with upper and lower thresholds
RoHS and Halogen free compliant

LTR-381RGB-MT光宝RGB颜色传感器 应用:
控制移动显示面板的亮度和颜色,
计算和消费设备
智能机器人

光宝RGB颜色传感器LTR-381RGB-MT 外形尺寸:

光宝RGB颜色传感器LTR-381RGB-MT 应用电路:

LTR-381RGB-MT颜色传感器详细资讯、相关程序文件及规格书,请联系光宝代理商芳莲电子。
rgb颜色传感器:RGB颜色传感器(示例代码)  第3张

rgb颜色传感器:颜色传感器模块|从零开始,电子工程超入门|罗姆传感器评估套件|罗姆传感器|罗姆半导体集团(ROHM Semiconductor)

使Arduino+各种传感器的电子制作更轻松的罗姆传感器评估套件。
截至上次发文,我们学习了使用地磁传感器的基础知识。接下来,作为连载,这次我们要学习使用以前从未接触过的"颜色传感器"来验证罗姆传感器评估套件的强大功能。

此次的电子工程配方
完成为止的大致时间标准:60分钟
必要零件
Arduino主体(Arduino UNO R3 或者 Arduino UNO SMD Rev3)

罗姆传感器评估套件

带散热基板的1W大功率全彩的RGB LED
※罗姆传感器评估套件可通过以下网站购买!
AMEYA360
RightIC

何谓颜色传感器?
恰如其名,颜色传感器是可以获取颜色数据的传感器。颜色传感器还有"色彩传感器"、"颜色识别传感器"、"辨色传感器"、"数字颜色传感器"等名称。颜色传感器的原理是通过其内部的红(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)
#include
#include
BH1745NUC bh1745nuc(BH1745NUC_DEVICE_ADDRESS_39);
void setup() {
byte rc;
Serial.begin(9600);
while (!Serial);
Wire.begin();
rc=bh1745nuc.init();
}
void loop() {
byte rc;
unsigned short rgbc[4];
rc=bh1745nuc.get_val(rgbc);
if (rc==0) {
Serial.write("BH1745NUC (RED)=");
Serial.println(rgbc[0]);
Serial.write("BH1745NUC (GREEN)=");
Serial.println(rgbc[1]);
Serial.write("BH1745NUC (BLUE)=");
Serial.println(rgbc[2]);
Serial.write("BH1745NUC (CLEAR)=");
Serial.println(rgbc[3]);
Serial.println();
}
delay(500);
}

照片6 颜色传感器样本程序的运行结果

观看串行监视器中显示的数值,可以看见RED、GREEN、BLUE中增加了CLEAR。这个CLEAR表示可以获取可视光波长强度的值。一边观察串行监视器,一边将带颜色的物体靠近传感器,或者将光靠近传感器,可以发现传感器的值会发生变化。若将传感器遮蔽起来,由于光自身无法进入传感器,CLEAR的值会变小。这种情况下,RGB的数值也会变小,很难进行颜色判别。与此相反,若用彩色LED等照射传感器,则可以检测到超过的数值。由此可见,通过彩色LED等进行输入是比较合适的。

利用颜色传感器分析颜色,用全彩色LED显示
我们通过样品对颜色传感器的动作进行确认后,下一步将对其进行具体的应用。首先,为了正确处理颜色数据,我们必须制作一个简单的电路,即通过颜色传感器判别颜色,并将判别的颜色用全彩色LED显示出来。
将颜色传感器的值通过全彩色LED显示的sketch程序
#include
#include
BH1745NUC bh1745nuc(BH1745NUC_DEVICE_ADDRESS_39);
void setup() {
byte rc;
Serial.begin(9600);
while (!Serial);
Wire.begin();
rc=bh1745nuc.init();
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
}
void loop() {
byte rc;
unsigned short rgbc[4];
rc=bh1745nuc.get_val(rgbc);
int rVal=0;
int gVal=0;
int bVal=0;
int maxVal=0;
if (rc==0) {
for(int i=0;i<3;i++){
if(maxVal < rgbc[i]){
maxVal=rgbc[i];
}
}
rVal=(float(rgbc[0])/maxVal)*255;
gVal=(float(rgbc[1])/maxVal)*255;
bVal=(float(rgbc[2])/maxVal)*255;
Serial.print(rVal);
Serial.print(",");
Serial.print(gVal);
Serial.print(",");
Serial.print(bVal);
Serial.print(",");
Serial.print(rgbc[3]);
Serial.println(" ");
}
analogWrite(9,rVal);
analogWrite(10,gVal);
analogWrite(11,bVal);
delay(500);
analogWrite(9,LOW);
analogWrite(10,LOW);
analogWrite(11,LOW);
delay(500);
}
このコンテンツを見るためにはJavaScriptを有効にしてください。Please enable JavaScript to watch this content.
for(int i=0;i<3;i++){ if(maxVal < rgbc[i]){ maxVal=rgbc[i]; } } 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 #include
#include
BH1745NUC bh1745nuc(BH1745NUC_DEVICE_ADDRESS_39);
void setup() {
byte rc;
Serial.begin(9600);
while (!Serial);
Wire.begin();
rc=bh1745nuc.init();
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
}
void loop() {
byte rc;
unsigned short rgbc[4];
rc=bh1745nuc.get_val(rgbc);
int rVal=0;
int gVal=0;
int bVal=0;
int maxVal=0;
if (rc==0) {
for(int i=0;i&lt;3;i++){
if(maxVal &lt; rgbc[i]){
maxVal=rgbc[i];
}
}
rVal=(float(rgbc[0])/maxVal)*255;
gVal=(float(rgbc[1])/maxVal)*255;
bVal=(float(rgbc[2])/maxVal)*255;
//それぞれの色の閾値を設定
if(rVal &lt; 50){
rVal=0;
}
if(gVal &lt; 50){
gVal=0;
}
if(bVal &lt; 50){
bVal=0;
}
Serial.print(rVal);
Serial.print(",");
Serial.print(gVal);
Serial.print(",");
Serial.print(bVal);
Serial.print(",");
Serial.print(rgbc[3]);
Serial.println(" ");
}
analogWrite(9,rVal);
analogWrite(10,gVal);
analogWrite(11,bVal);
delay(100);
}

このコンテンツを見るためにはJavaScriptを有効にしてください。Please enable JavaScript to watch this content.

这一边的颜色清晰地反映出来了。整体上的印象是比以往的操作更轻松。
总结
不同的颜色传感器、使用方法,有时会出现各自十分有趣的情形。下一次,我们将在颜色传感器的基础上将气压传感器、温度传感器等多个传感器组合在一起,制作出更为智能的照明元器件!

您可能感兴趣的文章

本文地址:https://www.ceomba.cn/2607.html
文章标签: ,  
版权声明:本文为原创文章,版权归 ceomba 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!