基于单片机的TCS230颜色识别物品分类设计

您所在的位置:网站首页 识别颜色rgb数值的软件 基于单片机的TCS230颜色识别物品分类设计

基于单片机的TCS230颜色识别物品分类设计

2024-06-26 15:45| 来源: 网络整理| 查看: 265

基于单片机的TCS230颜色识别物品分类设计

文章目录 基于单片机的TCS230颜色识别物品分类设计 前言一、TCS230模块简介1. TCS230颜色识别原理1.1 TCS230颜色识别原理1.2 颜色识别原理1.3 白平衡和颜色识别原理1.4 RGB颜色值获取 2. 应用中需要注意的事项 二、硬件设计1.硬件准备2.硬件连接 三、软件设计1.appdemo.c文件1.1 app_demo函数1.2 save_one_color函数 实验现象联系作者

前言

本教程将向大家介绍如何使用TCS230颜色识别模块进行物品分类设计,使用的硬件资源主要有:STM32F103/STM32F407控制器、TCS230颜色识别模块、按键模块、SG90舵机模块、TFTLCD触摸屏模块等。实现的功能是:系统运行后,进入白平衡校准,需提前一张白色卡纸(不透光)放在传感器1-2cm位置,蜂鸣器发出提示音。开始存储筛选的颜色,此时LCD会显示RGB颜色数值,并根据数值识别红、绿、蓝及其它颜色,选择要识别的颜色后按KEY0键保存,蜂鸣器发出提示音结束。进入颜色识别,当用保存的颜色色卡放置在传感器前,舵机开启一次选择物品,当其它颜色则无操作。整个过程LCD会显示识别的颜色及RGB值。通过本教程的学习,让大家能快速上手STM32单片机应用开发。

一、TCS230模块简介

TCS230是美国TAOS公司生产的一种可编程彩色光到频率的转换器。该传感器具有分辨率高、可编程的颜色选择与输出定标、单电源供电等特点。它把可配置的硅光电二极管与电流频率转换器集成在一个单一的CMOS电路上,同时在单一芯片上还集成了红绿蓝(RGB)三中滤光器,是业界第一个有数字兼容接口的RGB彩色传感器。TCS230的输出信号是数字量,可驱动标准的TTL或CMOS逻辑输入,因此可直接与微处理器或其它逻辑电路相连接。由于输出的是数字量,并且能够实现每个彩色信道10位以上的转换精度,因此不再需要A/D转换电路,使得电路变得更简单。模块管脚图如下: 在这里插入图片描述 在这里插入图片描述 TCS230模块管脚功能如下: S0、S1:用于选择输出比例因子或电源关断模式; S2、S3:用于选择滤波器的类型; OE:频率输出使能引脚,可以控制输出的状态,当有多个芯片引脚共用微处理器的输入引脚时,也可以作为片选信号; OUT:频率输出引脚; GND、VCC:电源引脚;

传感器工作时,通过两个可编程的引脚来动态选择所需要的滤波器。该传感器的典型输出频率范围从2Hz~500KHz,用户还可以通过两个可编程引脚来选择100%、20%或2%的输出比例因子,或电源关断模式。输出比例因子使传感器的输出能够适应不同的测量范围,提供了它的适应能力。例如,当使用低速的频率计数器时,就可以选择小的定标值,使TCS230的输出频率和计数器相匹配。 从功能图可知:当入射光投射到TCS230上时,通过光电二极管控制引脚S2、S3的不同组合,可以选择不同的滤波器;经过电流到频率转换器后输出不同频率的方波(占空比是50%),不同的颜色和光强对应不同频率的方波;还可以通过输出定标控制引脚S0、S1选择不同的输出比例因子,对输出频率范围进行调整,以适应不同的需求。S0、S1及S2、S3的可用组合如下:

在这里插入图片描述

1. TCS230颜色识别原理 1.1 TCS230颜色识别原理

通常所看到的物体的颜色,实际上是物体表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。白色是由各种频率的可见光混合在一起构成的,也就是说白光中包含着各种颜色的色光(如红R、黄Y、绿G、青V、蓝B、紫P)。根据三原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的。

1.2 颜色识别原理

由上面的三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色。对于TCS230来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其它原色的通过。例如:当选择红色滤波器时,入射光中只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强;同理,选择其它的滤波器,就可以得到蓝色光和绿色光的光强。通过这三个值,就可以分析投射到TCS230传感器上的光的颜色。

1.3 白平衡和颜色识别原理

白平衡就是告诉系统什么是白色。从理论上讲,白色是由等量的红色、绿色和蓝色混合而成的。但实际上,白色中的三原色并不完全相等,并且对于TCS230的光传感器来说,它对这三种基本色的敏感性是不相同的,导致TCS230的RGB输出并不相等,因此在测试前必须进行白平衡调试,使得TCS230对所检测的“白色”中的三原色是相等的。进行白平衡调整是为后续的颜色识别作准备。在本装置中,白平衡调整的具体步骤和方法如下:将空的试管放置在传感器的上方,试管的上方放置一个白色的光源,使入射光能够穿过试管照射到TCS230上。根据前面所介绍的方法,依次选通红色、绿色和蓝色滤波器,分别测得红色、绿色和蓝色的值,然后就可以计算出需要的三个调整参数。

1.4 RGB颜色值获取

当用TCS230识别颜色时,就用这三个参数对所测试颜色的R、G、B进行调整。这里有两种方法来计算调整参数: ①依次选通三种颜色的滤波器,然后对TCS230的输出脉冲依次进行计数。当计数到255时停止计数,分别计算每个通道所用的时间。这些时间对应于实际测试时TCS230每种滤波器所采用的时间基准,在这段时间内所测得的脉冲数就是所对应的R、G和B的值。 ②设置定时器为一个固定时间(例如10ms),然后选通三种颜色的滤波器,计算这段时间内TCS230的输出脉冲数,计算出一个比例因子,通过这个比例因子可以把这些脉冲数变为255。在实际测试时,使用同样的时间进行计数,把测得的脉冲数再乘以求得的比例因子,然后就可以得到所对应的RGB值。

2. 应用中需要注意的事项

①颜色识别时要避免外界光线的干扰,否则会影响颜色识别的结果,最好把传感器、光源等放置在一个密闭、无反射的箱子中进行测试; ②对光源没有特殊的要求,但是光源发出的光要尽量集中,否则会造成传感器之间的相互干扰; ③当第一次使用TCS230时,或TCS230识别模块重启、更换光源等情况时,都需要进行白平衡调整。

二、硬件设计 1.硬件准备

本实验所需要的硬件资源如下: ①STM32F103或STM32F407开发板1个(自带TFTLCD触摸屏) ②SG90舵机模块1个 ③USB线1条(用于供电和程序下载) ④TCS230模块1个 ⑤杜邦线若干

2.硬件连接

接线说明: TCS230颜色识别模块–>单片机IO S0–>PC8 S1–>PC9 OE–>GND GND–>GND S3–>PC11 S2–>PC10 OUT–>PC7 VCC–>5V

按键模块-->单片机IO KEY0-->PE4 SG90舵机模块-->单片机IO 橙色(信号线)-->PB6 红色(电源正)-->5V 褐色(电源负)-->GND TFTLCD彩屏-->单片机IO 固定TFTLCD接口

在这里插入图片描述

三、软件设计

本实验程序工程如下所示: 在这里插入图片描述 Tcs230.c是TCS230模块驱动代码,pwm.c是舵机控制代码,tftlcd.c是触摸屏驱动代码,appdemo.c是项目整个综合应用代码。我们仅对appdemo.c相关代码进行讲解,其它代码看项目工程文件。

1.appdemo.c文件

appdemo.c文件代码较多,实现了整个项目的逻辑控制。我们选择几个重要的函数讲解。

1.1 app_demo函数

app_demo函数代码如下::

//TCS230颜色识别系统 void app_demo(void) { u8 j=0; u16 RGB_Color=0; KEY_Init(); BEEP_Init(); TFTLCD_Init();//LCD初始化 tcs230_gpio_init(); My_EXTI_Init(); FRONT_COLOR=WHITE; LCD_ShowFontHZ(10, 10,"嗨小易制作"); LCD_ShowString(10,40,tftlcd_data.width,tftlcd_data.height,16,"TCS230"); LCD_ShowString(10,60,tftlcd_data.width,tftlcd_data.height,16,"-->white balance"); //白平衡校准 delay_ms(1000); white_balance(); BEEP=1;//提示音 delay_ms(300); BEEP=0; //保存一次颜色,用于后续颜色对比 save_one_color(); TIM4_CH1_PWM_Init(20000-1,83);//周期20ms while(1) { read_rgb_color_data(); //显示RGB颜色数据 LCD_ShowxNum(10+4*8,40,color.rgb_dat[0],3,16,0); LCD_ShowxNum(10+6*8,60,color.rgb_dat[1],3,16,0); LCD_ShowxNum(10+5*8,80,color.rgb_dat[2],3,16,0); //转换成屏幕的16位颜色值 RGB_Color = 0x0000; RGB_Color |=(unsigned long) color.rgb_dat[0]*1000/8225


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3