搜索
热搜: ROHM 模拟 车载
查看: 3293|回复: 7

[分享] 罗姆传感器评估套件-颜色传感器3

  [复制链接]

该用户从未签到

2248

主题

1万

帖子

1

精华

论坛元老

最后登录
2024-4-25
发表于 2018-10-30 09:16:39 | 显示全部楼层 |阅读模式
本帖最后由 wudianjun2001 于 2018-10-30 09:23 编辑

利用颜色传感器分析颜色,用全彩色LED显示
我们通过样品对颜色传感器的动作进行确认后,下一步将对其进行具体的应用。首先,为了正确处理颜色数据,我们必须制作一个简单的电路,即通过颜色传感器判别颜色,并将判别的颜色用全彩色LED显示出来。
将颜色传感器的值通过全彩色LED显示的sketch程序

Code-Example
#include <Wire.h>

#include <BH1745NUC.h>



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&amp;lt;3;i++){

if(maxVal &amp;lt; rgbc){

maxVal  = rgbc;

}

}



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

}


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
#include <Wire.h>

#include <BH1745NUC.h>



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&amp;lt;3;i++){

if(maxVal &amp;lt; rgbc){

maxVal  = rgbc;
}

}



rVal  =  (float(rgbc[0])/maxVal)*255;

gVal  =  (float(rgbc[1])/maxVal)*255;

bVal  =  (float(rgbc[2])/maxVal)*255;



//それぞれの色の閾値を設定

if(rVal &amp;lt; 50){

rVal = 0;

}

if(gVal &amp;lt; 50){

gVal = 0;

}

if(bVal &amp;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);

}

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

使用道具 举报

该用户从未签到

205

主题

1万

帖子

0

精华

论坛元老

最后登录
2023-6-10
发表于 2018-10-30 09:45:41 | 显示全部楼层
很不错
回复

使用道具 举报

该用户从未签到

205

主题

1万

帖子

0

精华

论坛元老

最后登录
2023-6-10
发表于 2018-10-30 09:45:57 | 显示全部楼层
有几套啊
回复

使用道具 举报

该用户从未签到

21

主题

382

帖子

0

精华

金牌会员

最后登录
2023-8-17
发表于 2018-10-30 11:02:10 | 显示全部楼层
不错            
回复 支持 反对

使用道具 举报

该用户从未签到

49

主题

2250

帖子

0

精华

论坛元老

最后登录
2020-12-15
发表于 2018-11-2 17:35:17 | 显示全部楼层
666            
回复 支持 反对

使用道具 举报

该用户从未签到

89

主题

513

帖子

0

精华

金牌会员

最后登录
2022-3-30
发表于 2018-11-2 20:23:41 | 显示全部楼层

看看
回复

使用道具 举报

该用户从未签到

3

主题

119

帖子

0

精华

中级会员

最后登录
2021-12-21
发表于 2018-11-15 13:23:30 | 显示全部楼层
666   操作很亮眼
回复 支持 反对

使用道具 举报

该用户从未签到

21

主题

382

帖子

0

精华

金牌会员

最后登录
2023-8-17
发表于 2018-11-15 18:05:15 | 显示全部楼层
斜体字看着不是太美观
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|罗姆半导体技术社区

GMT+8, 2024-4-25 11:57 , Processed in 0.103938 second(s), 18 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表