当前位置: 首页 > 传感测量产品 > 工业传感器 > 颜色识别传感器 > 颜色传感器

类型分类:
科普知识
数据分类:
颜色传感器

颜色传感器程序:STM32F429 使用 TCS34725 颜色传感器的驱动程序

发布日期:2022-10-09 点击率:46


颜色传感器程序:STM32F429 使用 TCS 颜色传感器的驱动程序

用到了 TCS 颜色传感器,网上百度一圈都没有发现驱动程序,自己照着 Arduino 的程序和数据手册写了下,记录一下 (~ ̄▽ ̄)~

第一步,先来看看数据手册,了解到 TCS 是 I2C 器件,那就好办了,根据以前写的 I2C 驱动改一改就好啦 b( ̄▽ ̄)d(具体代码贴在后边)。

然后干嘛嘞?当然是找器件地址和寄存器地址啦,继续翻手册…(⊙_⊙;)…

找到 TCS 地址为 0x29 ,各个寄存器的地址如下:

到这里,发现这货不仅器件地址是奇数,而且还有个没有地址的 COMMAND 寄存器,嗯,隐隐感觉肯定有个坑在这里 ヾ(。 ̄□ ̄)?゜゜゜

接下来就可以着手写程序啦 (o゜▽゜)o☆

首先定义一下用到的引脚:

然后把之前写的 I2C 驱动程序粘过来改一下(^-^)V

OK,以上就是最基本 I2C 的驱动程序,下边就到了第一个重点啦(~ ̄▽ ̄)~,也就是为毛这货的器件地址是个奇数,我们知道 I2C 的从机地址是 8 bit ,前 7 bit 是器件地址,最后 1 bit 代表是读操作(1)还是写操作(0),所以一般来说器件地址应该是偶数。但是,有的厂家给的地址是低 7 bit (例如这货),所以就会出现奇数的情况,这样就需要给它左移 1 bit 。

好了,地址的问题解决了,就可以写读操作和写操作的程序了

基本驱动通讯搞定,接下来就给跟它唠唠嗑儿了,先定义一下暗号 (?≧?≦?) ,暗号摘自 Arduino 下的驱动程序文件。

发现其中有个 TCS_COMMAND_BIT ,而且发现 Arduino 代码中只要发送寄存器地址的地方都有它 (?°?°?)?,此处必有蹊跷!翻开我们的葵花宝典,啊不,是数据手册,居然发现了这个!

宝典告诉我们,若要寻址,此 bit 必须置 1 ,也就是说我们在发送需要操作的寄存器地址时,必需要将 MSB 置为 1 。怪不得你丫儿没地址,原来哪都有你 (°ー°〃)

知道了这个就好办了,我们先封装一下基本的读写操作

接下来就可以根据宝典里对各个寄存器的说明来编程了,我就写了我用到的几个功能 (?-?) ,各位看官有需要可以自己补充。废话不多说,上代码:

TCS 的 ID 是 0x44 可以根据这个来判断是否成功连接。

两个个主要设置,设置积分时间(ATIME 寄存器)和增益(ConTROL 寄存器)。这个直接和最后获取到的数据相关,积分时间越长,增益越大,最后获得值越大,需要根据实际应用情况进行设置。

积分时间的计算如下文所示:

器件上电后默认是在睡觉(Sleep 模式),得踹一脚(Enable)才醒(Idle 模式),然后告诉它是等一会干活还是马上滚去干活 (╯﹏╰)b

我这里让它直接干活去了,注意从 Idle 模式退出后,需要 2.4 ms 的时间来进行 RGBC 初始化,所以给个 3 ms 的延时就可以了。干完一次活后,如果不让它回去睡觉(Disable),就会自动继续干活,开始一个新的循环。(经@weixin_提醒,原来这里写错了,应该是在设置AEN之后等待2.4 ms 的RGBC Init)

然后我们就可以拿到转换数据了,这里我根据自己的需要对 Arduino 的代码做了些修改

好了,到这里 TCS 的驱动程序就完成啦ヽ(=?ω?=)丿
<a title=颜色传感器程序:STM32F429 使用 TCS34725 颜色传感器的驱动程序 第1张" title="颜色传感器程序:STM32F429 使用 TCS34725 颜色传感器的驱动程序 第1张-传感器知识网"/>

颜色传感器程序:TCS3200颜色传感器51单片机例程 颜色识别程序带RGB值

TCS3200颜色传感器51例程
//==============LCD1602接口连接方法=====================
//================================================*/
#define LCM_Data     P0    //LCD1602数据接口
#define Busy         0x80   //用于检测LCM状态字中的Busy标识
sbit    LCM_RW     =P2^3;  //读写控制输入端,LCD1602的第五脚
sbit    LCM_RS     =P2^4;  //寄存器选择输入端,LCD1602的第四脚
sbit    LCM_E      =P2^2;  //使能信号输入端,LCD1602的第6脚
//=================颜色传感模块连接=====================
sbit    tcs230_s2=P2^0;//TCS230 S2接单片机P2.0
sbit    tcs230_s3=P2^1;//TCS230 S3接单片机P2.1
sbit    tcs230_en=P3^0; //TCS230 EN(E0)接GND
/
void LCMInit(void)
{
LCM_Data=0;
WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
DelayMs(5);
WriteCommandLCM(0x38,0);
DelayMs(5);
WriteCommandLCM(0x38,0);
DelayMs(5);
WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(0x08,1); //关闭显示
WriteCommandLCM(0x01,1); //显示清屏
WriteCommandLCM(0x06,1); // 显示光标移动设置
WriteCommandLCM(0x0C,1); // 显示开及光标设置
DelayMs(100);
}
//==============================LCD1602显示子程序================================================
// 写数据函数: E=高脉冲 RS=1 RW=0
//======================================================================*/
void WriteDataLCM(uchar WDLCM)
{
ReadStatusLCM(); //检测忙
LCM_Data=WDLCM;
LCM_RS=1;
LCM_RW=0;
LCM_E=0; //若晶振速度太高可以在这后加小的延时
LCM_E=0; //延时
LCM_E=1;
}
void WriteCommandLCM(uchar WCLCM,BuysC) //BuysC为0时忽略忙检测
{
if (BuysC) ReadStatusLCM(); //根据需要检测忙
LCM_Data=WCLCM;
LCM_RS=0;
LCM_RW=0;
LCM_E=0;
LCM_E=0;
LCM_E=1;
}
uchar ReadStatusLCM(void)
{
LCM_Data=0xFF;
LCM_RS=0;
LCM_RW=1;
LCM_E=0;
LCM_E=0;
LCM_E=1;
while (LCM_Data & Busy); //检测忙信号
return(LCM_Data);
}
void DisplayOneChar( uchar X, uchar Y, uchar ASCII)
{
 X &=0x1;
 Y &=0xF; //限制Y不能大于15,X不能大于1
 if (X) Y |=0x40; //当要显示第二行时地址码+0x40;
 Y |=0x80; // 算出指令码
 WriteCommandLCM(Y, 0); //这里不检测忙信号,发送地址码
 WriteDataLCM(ASCII);
}
void DelayMs(uint Ms)
{
 uint i,TempCyc;
 for(i=0;i<ms;i++) {="" tempcyc="250;" while(tempcyc--);="" }=""

颜色传感器程序:TCS3200颜色传感器模块 TCS230颜色识别感应 送程序资料 智能小车

宝贝尺寸:28.7MM*21.3MM(长宽)
接口定义:VCC GND 供电
SO-S3 E0  OUT 通讯接口
采用原装进口芯片TCS(咨询特价)
TCS3200是TCS230升级版本,效果更好
供电电源 3-5v
抗光干扰
白色贴片LED,可检测不发光物体颜色
非常佳检测距离1cm

提供51单片机测试程序,模块原理图!

(1)颜色的感应原理

  通常所看到的物体颜色,实际上是物体表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。白色是由各种频率的可见光混合在一起构成的,也就是说白光中包含着各种颜色的色光(如红R、黄Y、绿G、青V、蓝B、紫P)。根据德国物理学家赫姆霍兹(Helinholtz)的三原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的。
(2) TCS230识别颜色的原理
  由三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色。对于TCS230来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻咒他原色的通过。例如:当选择红色滤波器时,入射光中只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强;同理,选择其他的滤波器,就可以得到蓝色光和绿色光的光强。通过这三个值,就可以分析投射到TCS230传感器上的光的颜色。
(3) 白平衡和颜色识别原理
  白平衡就是告诉系统什么是白色。从理论上讲,白色是由等量的红色、绿色和蓝色混合而成的;但实际上,白色中的

三原色并不完全相等,并且对于TCS230的光传感器来说,它对这三种基本色的?舾行允遣幌嗤的,导致TCS230的RGB输出并不相等,因此在测试前必须进行白平衡调整,使得TCS230对所检测的“白色”中的三原色是相等的。进行白平衡调整是为后续的颜色识别作准备。在本装置中,白平衡调整的具体步骤和方法如下:将空的试管放置在传感器的上番试管的上方放置一个白色的光源,使入射光能够穿过试管照射到TCS230上;根据前面所介绍的方法,依次选通红色、绿色和蓝色滤波器,分别测得红色、绿色和蓝色的值,然后就可计算出需要的3个调整参数。
  当用TCS230识别颜色时,就用这3个参数对所测颜色的R、G和B进行调整。这里有两种方法来计算调整参数:① 依次选通三种颜色的滤波器,然后对TCS230的输出脉冲依次进行计数。当计数到255时停止计数,分别计算每个通道所用的时间。这些时间对应于实际测试时TCS230每种滤波器所采用的时间基准,在这段时间内所测得的脉冲数就是所对应的R、G和B的值。② 设置定时器为一固定时间(例如10 ms),然后选通三种颜色的滤波器,计算这段时间内TCS230的输出脉冲数,计算出一个比例因子,通过这个比例因子可以把这些脉冲数变为255。在实际测试时,使用同样的时间进行计数,把测得的脉冲数再乘以求得的比例因子,然后就可以得到所对应的R、G和B的值。
在程序流程中:系统初始化负责设置89C51的定时器/计数器的工作方尸选择TCS230的输出比例因子,使能输出引脚以及通信参数的设置。初始化完成后,检测是否需要进行白平衡调整。如有,调整白平衡子程序;否则,转到下一铂检测是否需要进行颜色识别。如不需要颜色识别,返回;如需要颜色识别,调用颜色识别子程序,直到颜色识别完毕。
发货清单:颜色传感器模块一块
提供的资料均通过邮箱发送,亲收到货后客服。
颜色传感器程序:STM32F429 使用 TCS34725 颜色传感器的驱动程序  第3张

颜色传感器程序:使用色彩传感器采集和处理RGB数据

使用色彩传感器采集和处理RGB数据
本篇文章主要介绍如何采集并处理由BH1745NUC色彩传感器生成的RGB数据。
传感器
在第1部分中,我们讨论了如何使用DAC和一些负反馈来精确控制红色、绿色和蓝色LED的强度。我们现在可以使用RGB LED模块作为单像素显示器 - 即,通过操纵红色、绿色和蓝色光的混合,我们可以产生多种颜色。
我们希望使用这个LED模块复制照亮RGB传感器的光线颜色。如第一篇文章中所述,我们使用由Rohm制造的BH1745NUC颜色传感器(以下简称为BH1745)。这实际上是一个令人印象深刻的设备封装非常小(大约2 mm×2 mm),这也是我们为这个项目使用定制设计PCB的一个原因。尽管体积小,但该部件具有广泛的功能,仅需少量外部组件。以下是数据表中的“典型应用电路”:
电路中需要光学滤波器、四个光电二极管、四个独立的16位ADC以及一些信号调制电路、一个I2C接口和一些中断逻辑,可用于在红色、绿色、蓝色或透明测量值超过时提醒微控制器或者低于可定制的阈值 。
更多内容请参考以下链接:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:
原作者删帖
不实内容删帖
广告或垃圾文章投诉
智能推荐
《Arduino计算机视觉编程》一3.2 传感器数据采集
本节书摘来自华章出版社《Arduino计算机视觉编程》一书中的第3章,第3.2节,作者[土耳其] 欧森·奥兹卡亚(zen zkaya),吉拉伊·伊利茨(Giray Yilliki),更多章节内容可以访问云栖社区“华章计算机”公众号查看。 3.2 传感器数据采集 对大多数实时应用程序来说,视觉信息和传感器信息的结合对于更好地理解环境是至关重要的。系...
Predix之玩转树莓派(2) 从传感器采集数据
作者:唐翊国,开发者生态资深经理,GE数字集团 23年工作经验,长期在杜邦、欧文斯科宁、庄信万丰等从事制造业信息化工作,规划、实施了大量MES、SAP ERP、LIMS、BPM等项目,积累了丰富的制造业数字化转型经验。   如果您还没有Predix试用帐号,请访问
传感器模拟信号数据采集与PLC系统匹配方案
在工业现场中,压力、位移、温度、流量、转速等各类模拟量传感器因设计使用的技术方法不同。传感器工作配电的方式主要分为两线制和四线制,其输出的模拟信号也各有差异,而常见的有0-20mA/4-20mA电流信号和0-75mV/0-5V /1-5V电压信号。要把各类传感器模拟信号成功采集到PLC/DCS/FCS/MCU/FA/PC系统,就要根据传感器与数据采集系统的功能和技术特点进行匹配选型,同时也要考虑到...
常见的无线传感器数据采集传输系统的三种组网
无线传感器数据采集传输系统,可以实现对温度,压力,气体,温湿度,液位,流量,光照,降雨量,振动,转速等数据参数的实时采集,无线传输,无线监控与预警。在实际应用中,无线传感器数据采集传输系统常见的有信立XL农业物联网智能大棚环境监控系统,智慧养殖环境监控系统,智慧管网管沟监控系统,仓储馆藏环境监控系统,机房实验室环境监控系统,危险品仓库环境监控系统,大气环境监控系统,智能制造运行过程监控系统,能源管...
温度传感器数据采集与曲线图表显示
1 概述  传感器(英文名称:transducer/sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。 传感器按用途可以分为力敏传感器、位置传感器、液位传感器、能耗传感器、速度传感器、加速度传感器、射线辐射传感器、热敏传感器等。 随着集成度的不断提高,多种传感器集...
猜你喜欢
bno055传感器数据不更新_大数据时代必修课:让传感器采集的数据成为资产
历经数年的市场沉淀,结合实体经济的深度融合,数据已成为企业内更有价值的资产之一,数据资产运营的重要意义也已经成为各个行业的一种共识。 尤其是对于一些工业企业来说,从物联网传感器收集的数据用于预测分析、工业生产,这不仅是大数据时代下的必修课,也是推动企业经济实现快速发展、包容性增长、可持续增长的强大驱动力量。而法米特的企业愿景便是让传感器采集的数据成为资产。 法米特作为一家专门从事于物联技术的品牌,...
解析基于keras深度学习框架下yolov3的算法
一.前言        由于前一段时间以及实现了基于keras深度学习框架下yolov3的算法,本来想趁着余热将自己的心得体会进行总结,但由于前几天有点事就没有完成计划,现在趁午休时间整理一下。 二.Keras框架的介绍       1.Keras是一个用Python编写的高级API,它提供了一个简单和模块化的API来创建和训练...
使用面向服务分解技术来满足架构目标,定义与业务模型一致的服务
引言 通常,企业已经拥有一组支持大多数必需业务功能的应用程序。因此,谈到服务定义,您可能以为这不过就是将现有的应用程序功能作为一组服务来公开,类似于传统的企业应用程序集成(enterprise application integration,EAI)实践。其实不然。在实现基于面向服务的体系结构(Service-Oriented Architecture,SOA)的解决方案时,正确定义服务是最困难的...
单片机自学多久可以成功?学单片机需要什么基础知识?
单片机自学完全是可以学会的,现在入门的教程可以用泛滥来形容了。 泛滥不代表讲的不好,有些确实讲的非常不错啊。 我也是自学过来的,下面通过我的经历来解答这些问题。 一、单片机自学多久可以成功 我曾经从零基础学习单片机到找到相应研发工作大概花了3个多月。 很多人可能觉得不可思议,我们学校学一年我都学不会,当然也有大神10天就学会的。 当初有2个因素鞭策着我前进: 1.必须赶紧找个工作 2.强烈的兴趣 ...
趣拿洞察:2020年社交电商发展分析
趣拿对电子商务消费者进行单项深入研究,从消费者角度反思市场状态,并将传统电商与社交电商进行对比分析,从中找到更好服务消费者的方法,并为电商企业的发展提供战略支持。 2020年中国电子商务领域的社交电商创新已经进入第十个年头,经过十年不断地探索、尝试、发展、纠错,社交电商已经全面发力,成为中国电子商务领域不可分割的一部分。 中国社交电商发展具有四大特点: 人数多规模大。2020手机用户规模约9亿;2...

下一篇: PLC、DCS、FCS三大控

上一篇: 电气控制线路图控制原

推荐产品

更多