5503|7

1593

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【Gravity:AS7341测评】+ 色彩检测器的设计 (兼结题报告) [复制链接]

 

将可见光传感器的检测值送往串口来输出显示,在使用上总有些不方便的感觉,若为它配上一个小巧的显示屏将会为之改观,图1至图3就是配置OLED显示屏后的显示效果。

1 起始界面

4个通道值显示

3 4个通道值显示

要实现这样的显示功能,无非是在原来的色彩检测基础上再添加一个OLED 屏的显示驱动功能。

为此,我们可以令OLED屏的2I2C引脚与MCU建立如下的连接关系:

SCL1---12

SDA1---11

I/O来模拟I2C通讯所输出高低电平的语句定义为:

#define SCL1_high   digitalWrite(SCL1, HIGH)

#define SCL1_low   digitalWrite(SCL1,LOW)

 

#define SDA1_high   digitalWrite(SDA1, HIGH)

#define SDA1_low   digitalWrite(SDA1,LOW)

 

设置2个引脚为输出功能的语句为:

pinMode(SCL1, OUTPUT);

pinMode(SDA1, OUTPUT);  

 

辅助数据传输的相关函数为:

void IIC_Start()

{

   SCL1_high;

   SDA1_high;

   SDA1_low;

   SCL1_low;

}

 

void IIC_Stop()

{

   SCL1_low;

   SDA1_low;

   SCL1_high;

   SDA1_high;

}

 

void IIC_Wait_Ack()

{

    SCL1_high;

    SCL1_low;

}

实现显示效果的关键程序为:

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

  }

  pinMode(SCL1, OUTPUT);

  pinMode(SDA1, OUTPUT);  

  OLED_Init();

  OLED_Clear();

  OLED_ShowString(0,0,"AS7341 TEST",16);

  OLED_ShowString(0,2,"jinglixixi",16);

  delay(1000);

  delay(1000);

  OLED_Clear();

  OLED_ShowString(0,0,"F1=0    F2=0",16);

  OLED_ShowString(0,2,"F3=0    F4=0",16);

  delay(1000);

  delay(1000);

  OLED_ShowString(0,0,"F5=0    F6=0",16);

  OLED_ShowString(0,2,"F7=0    F8=0",16);

}

 

void loop(void)

{

  DFRobot_AS7341::sModeOneData_t data1;

  DFRobot_AS7341::sModeTwoData_t data2;

  as7341.startMeasure(as7341.eF1F4ClearNIR);

  data1 = as7341.readSpectralDataOne();

  OLED_Clear();

  OLED_ShowString(0,0,"F1=     F2=",16);

  OLED_ShowString(0,2,"F3=     F4=",16);

  OLED_ShowNum(24,0,data1.ADF1,4,16);

  OLED_ShowNum(88,0,data1.ADF2,4,16);

  OLED_ShowNum(24,2,data1.ADF3,4,16);

  OLED_ShowNum(88,2,data1.ADF4,4,16);

  as7341.startMeasure(as7341.eF5F8ClearNIR);

  data2 = as7341.readSpectralDataTwo();

  delay(1000);

  delay(1000);

  OLED_Clear();

  OLED_ShowString(0,0,"F5=     F6=",16);

  OLED_ShowString(0,2,"F7=     F8=",16);

  OLED_ShowNum(24,0,data2.ADF5,4,16);

  OLED_ShowNum(88,0,data2.ADF6,4,16);

  OLED_ShowNum(24,2,data2.ADF7,4,16);

  OLED_ShowNum(88,2,data2.ADF8,4,16);

  delay(1000);

  delay(1000);

}

 

4 是色彩分布的区间,进行相应色彩的检测,特提取了相应的色彩样本以供显示屏来显示,参见图5所示。

https://bbs.eeworld.com.cn/data/attachment/elecplay/upload/image/20201110/1604975124279063.png

4 色彩分布的区间

5 色彩样本(F3)

以可见光传感器对色彩样本检测的结果如下:

1F1色彩样本

 

       

RGB(888)色彩值:

0x8B3DC5=( 10001011,00111101,11000101)B

RGB(565)色彩值:

0x89F8

实测值:

F1=3

F2=42(1)

F3=13

F4=12

F5=16

F6=25(2)

F7=18(3)

F8=9

 

2F3色彩样本

RGB(888)色彩值:

0x01 B0 F1=( 00000001,10110000,11110001)B

RGB(565)色彩值:

0x059E

实测值:

F1=4

F2=57(1)

F3=20

F4=27(3)

F5=29(2)

F6=12

F7=5

F8=3

 

3F5色彩样本

RGB(888)色彩值:

0x00AF50=( 00000000,10101111,01010000)B

RGB(565)色彩值:

0x056A

实测值:

F1=2

F2=12

F3=8

F4=19(2)

F5=33(1)

F6=13(3)

F7=4

F8=2

 

4F7色彩样本

RGB(888)色彩值:

0x FF C0 00=(11111111,11000000,00000000)B

RGB(565)色彩值:

0xFE00

实测值:

F1=5

F2=9

F3=11

F4=32

F5=41(3)

F6=69(1)

F7=48(2)

F8=22

 

5F6色彩样本

RGB(888)色彩值:

0x FF FF 01=( 11111111,11111111,00000001)B

RGB(565)色彩值:

0xFFE0

实测值:

F1=4

F2=7

F3=11

F4=42

F5=88(2)

F6=92(1)

F7=54(3)

F8=26

 

6F8色彩样本

RGB(888)色彩值:

0x C1 00 03=(11000001,00000000,00000011)B

RGB(565)色彩值:

0xC000

实测值:

F1=1

F2=4

F3=3

F4=2

F5=7

F6=29 (1)

F7=23(2)

F8=9(3)

 

7F2色彩样本

RGB(888)色彩值:

0x02 51 8C =( 00000010,01010000,10001100)B

RGB(565)色彩值:

0x0291

实测值:

F1=2

F2=34(1)

F3=12(2)

F4=12(3)

F5=11

F6=5

F7=3

F8=1

 

8F4色彩样本

RGB(888)色彩值:

0x02 FE CD =(00000010,11111110,11001101)B

RGB(565)色彩值:

0x0291

实测值:

F1=7

F2=67(3)

F3=30

F4=73(2)

F5=74(1)

F6=22

F7=7

F8=4

 

经实际测评,可见光传感器AS7341的性能是比较出色,尤其是在对黄色的识别上,它能够独立识别,而不是以2个色彩的和来识别。比较遗憾的是本想以彩色OLED屏来完成色彩识别仪的设计,怎奈ArduinoUNO开发板的程序存储空间稍小些,无法支撑该设想的实现,尽管单独驱动彩色OLED来完成显示输出是没有问题的,但在加上色彩传感器后,就只有显示起始界面的份儿了,传感器也无法在有限的程序空间内运转。其解决之道就是将ArduinoUNO的程序功能移植到程序存储空间比较大的MCU开发板上,当然这是需要较多时间的。

最新回复

大佬,你这样的可以加一块掌控板,把数据传送到APP    这样是不是更好!   详情 回复 发表于 2022-12-6 16:29
点赞(1) 关注
 
 

回复
举报

7793

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 

还好我不是色盲,最后几个F1,F2看的好谣言。

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

你测出来数字量最大是1000还是65535

点评

也就1000  详情 回复 发表于 2021-2-25 08:45
 
 
 

回复

1593

帖子

1

TA的资源

五彩晶圆(初级)

4
 
上海首席男模 发表于 2021-2-24 09:33 你测出来数字量最大是1000还是65535

也就1000

 
 
 

回复

1万

帖子

202

TA的资源

管理员

5
 

很漂亮~赞赞赞~

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

1593

帖子

1

TA的资源

五彩晶圆(初级)

6
 
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 

大佬,你这样的可以加一块掌控板,把数据传送到APP    这样是不是更好!

点评

也可以,暂时用不上,它与基本的GRB色彩模式有距离。  详情 回复 发表于 2022-12-6 22:03
 
 
 

回复

1593

帖子

1

TA的资源

五彩晶圆(初级)

8
 
Wordfield 发表于 2022-12-6 16:29 大佬,你这样的可以加一块掌控板,把数据传送到APP    这样是不是更好!

也可以,暂时用不上,它与基本的GRB色彩模式有距离。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 7

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表