发新帖本帖赏金 20.00元(功能说明)我要提问
返回列表
打印
[IDE]

识别色彩只靠RGB吗?有8通道的传感器?看看AS7341的性...

[复制链接]
17773|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2021-7-5 10:54 编辑

#申请原创#
用于色彩识别的传感器有多种,如TCS230、TCS3200及VEML6040等,见图1所示,但这些色彩传感器多是基于RGB来识别色彩的。
图1 色彩传感器
此次介绍的主角AS7341可见光传感器却之有较大的区别,它提供8个可见光检测通道,该传感器的功能模块如图2所示。这8个检测通道的波长分布期间如图3所示。
图2  AS7341传感器模块
图3  8个检测通道的波长分布
为有一个感性的认识,从图4可以了解到传感器所检测的色彩波长区间。
图4  色彩的波长区间

以黄色为例,RGB色彩传感器和AS7341可见光传感器的对比如下表所示。


该可见光传感器是基于ams公司推出的新一代AS7341光谱传感IC,该传感器有8个可见光通道、1个闪烁通道、1个NIR通道和1个未加滤光片的通道。它拥有6个独立的16位ADC通道,且可以并行处理数据。此外,该传感器板载了两颗高亮LED,可在暗光环境下进行补光。

该传感器的技术参数如下:

  • 供电电压:3.3V~5V
  • 可见光测量范围:F1(405-425nm)、F2(435-455nm)、F3(470-490nm)、F4(505-525nm)、F5(545-565nm)、F6(580-600nm)、F7(620-640nm)、F8(670-690nm)
  • 工作电流(不打开LED):<5mA
  • LED驱动电流:1-20等级(4-42mA)
  • I2C地址:0x39
  • 工作温度范围:-30℃~85℃
  • 工作湿度范围:5%RH~85%RH
  • 产品尺寸:18*14mm
其主要的应用方向为:

  • 高准度色彩检测与匹配
  • 颜色混合效果检测
  • 灯光色温调节
  • 灯光氛围控制
  • 植物养殖
该传感器的引脚功能如下表所示:

了解了该传感器的性能,那我们该如何使用它呢?

我们这里介绍的方法是为它配上一块FireBeetle-ESP32开发板,它与传感器的连接情况如图5所示,即除电源引脚连接到3.3V电源外,其它2个引脚是直接连接到I2C接口的对应引脚上。
图5  连接关系

要进行色彩的检测,其实现起来也极为方便,具体的步骤是:
1.以Arduino IDE为开发工具(版本为1.8.5),选取“项目”菜单下“加载库”的“添加一个ZIP库”选项;
2.在文件下载对话框,选取“DFRobot_AS7341-master.ZIP”;
图6加载ZIP库
3.在完成后,在“项目”菜单 “加载库”下即可见到“DFRobot_AS7341-master”选项。有了DFRobot_AS7341库,就可以编写相应的控制程序了。
4选取“文件”菜单下的“新建”选项;
5.录入对应的程序;
6.编译并下载程序后,通过串口监视器即可见到图8和图9的检测结果。
图7 检测程序及程序下载
图8 自然光检测值
图9 弱光检测值

相应的检测程序为:
#include"DFRobot_AS7341.h"
DFRobot_AS7341as7341;
void setup(void)
{
    Serial.begin(115200);
    while (as7341.begin() != 0) {
    Serial.println("IIC init failed,please check if the wire connection is correct");
    delay(1000);
  }
}
void loop(void)
{
  DFRobot_AS7341::sModeOneData_t data1;
  DFRobot_AS7341::sModeTwoData_t data2;
  as7341.startMeasure(as7341.eF1F4ClearNIR);
  data1 = as7341.readSpectralDataOne();
  Serial.print("F1(405-425nm):");
  Serial.println(data1.ADF1);
  Serial.print("F2(435-455nm):");
  Serial.println(data1.ADF2);
  Serial.print("F3(470-490nm):");
  Serial.println(data1.ADF3);
  Serial.print("F4(505-525nm):");   
  Serial.println(data1.ADF4);
  as7341.startMeasure(as7341.eF5F8ClearNIR);
  data2 = as7341.readSpectralDataTwo();
  Serial.print("F5(545-565nm):");
  Serial.println(data2.ADF5);
  Serial.print("F6(580-600nm):");
  Serial.println(data2.ADF6);
  Serial.print("F7(620-640nm):");
  Serial.println(data2.ADF7);
  Serial.print("F8(670-690nm):");
  Serial.println(data2.ADF8);
  Serial.print("Clear:");
  Serial.println(data2.ADCLEAR);
  Serial.print("NIR:");
  Serial.println(data2.ADNIR);
  delay(1000);
}

若通过粉红色的吹塑纸来提供检测的样本,则其检测结果如图11 所示,说明在各色彩通道中F8通道的色彩成分最突出。
图10 粉红色检测

图11粉红色检测值

除了色彩检测外,该传感器还能对指定频率的光进行检测,其程序如图12所示。
图12 光频率检测程序及下载
在自然光的条件下,其检测值如图13所示;在打开白纸灯的情况下,其检测如图14所示,这是由于市电的工频为50Hz,故其结果如此。
图13自然光检测结果
图14 开灯后的检测值

有了可见光传感器AS7341 ,我们在进行色彩的识别是不是方便了很多!


使用特权

评论回复

打赏榜单

21小跑堂 打赏了 20.00 元 2021-07-06
理由:恭喜通过原创文章审核!请多多加油哦!

相关帖子

沙发
lsm12502| | 2021-7-6 14:39 | 只看该作者
编程阶段设置的是光谱波长区间吗?感觉很厉害的样子。

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2021-7-7 08:14 | 只看该作者
lsm12502 发表于 2021-7-6 14:39
编程阶段设置的是光谱波长区间吗?感觉很厉害的样子。

光谱波长区间的定义是靠硬件在各通道来实现的,编程中的语句是为了给出提示,并读取相应的通道值。该传感器确实比较有特点。

使用特权

评论回复
地板
lsm12502| | 2021-7-8 08:48 | 只看该作者
哦,明白了。谢谢。不过这种复杂的传感器确实没接触过。。。。

使用特权

评论回复
5
jinglixixi|  楼主 | 2021-7-8 10:30 | 只看该作者
lsm12502 发表于 2021-7-8 08:48
哦,明白了。谢谢。不过这种复杂的传感器确实没接触过。。。。

用途的方向性可能比较强吧!接触的人少些。

使用特权

评论回复
6
chongdongchen| | 2021-7-9 09:35 | 只看该作者
这个不错,8通道,如果再多两个通道(红外、紫外)就更好了

使用特权

评论回复
7
jinglixixi|  楼主 | 2021-7-9 11:38 | 只看该作者
chongdongchen 发表于 2021-7-9 09:35
这个不错,8通道,如果再多两个通道(红外、紫外)就更好了

哈哈,目前检测区间还在可见光的范畴。

使用特权

评论回复
8
joyall| | 2021-7-9 17:47 | 只看该作者
这个传感器价格怎么样?有资料吗?

使用特权

评论回复
9
jinglixixi|  楼主 | 2021-7-10 08:00 | 只看该作者
某宝可查到:



使用特权

评论回复
10
特特机器人| | 2021-7-19 13:40 | 只看该作者
学习了,不错

使用特权

评论回复
11
jinglixixi|  楼主 | 2021-7-19 17:11 | 只看该作者

使用特权

评论回复
12
xu@xupt| | 2022-12-13 21:36 | 只看该作者
学习啦

使用特权

评论回复
发新帖 本帖赏金 20.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

455

主题

2756

帖子

38

粉丝