基于TCS3200颜色识别的自动分拣系统.docx
《基于TCS3200颜色识别的自动分拣系统.docx》由会员分享,可在线阅读,更多相关《基于TCS3200颜色识别的自动分拣系统.docx(26页珍藏版)》请在冰豆网上搜索。
基于TCS3200颜色识别的自动分拣系统
基于TCS3200颜色识别的自动分拣系统
摘要:
本系统主要是利用自然界的三基色原理,利用颜色传感器采集小球的RGB,从而利用步进电机的角度旋转对物体进行自动分拣。
是以STC89C52为主处理器,以TCS3200作为颜色传感器,以WT588D-16为语音播报模块,用1602液晶显示器来显示小球的RGB给人以视觉上的辨别,以及霍尔传感器监测步进电机回位与红外线检测是否有小球组成的系统是将电流信号先转换为脉冲频率信号,在转换为数字信号的系统。
在人眼的视察能力的基础上,步进能满足工业中精确测量和控制颜色的需要,而且快捷方便,能够准确的获得物体的颜色信息。
在工业颜色检测上,拥有广泛的前景。
关键词:
颜色传感器TCS3200;RGB;STC89C52;步进电机;脉冲频率信号
一、前言
世界上任何物体的颜色都是自然界的三基色红绿蓝按照不同比例构成的,也就是RGB不同造成的。
而在这些颜色中,许多颜色看上去相近,而人眼的直觉又无法识别就很容易造成失误,而且人眼如果长期跟颜色打交道,很容易伤害眼睛,这就需要一套装置设备来代替人工劳动,同时也减小人工操作的失误。
根据我们的调查,颜色识别自动分拣在各行各业都有应用:
如工厂利用此系统对货物进行划分,药品厂对不同颜色的药品进行归类,生物上利用它对细胞进行检测,生活上利用它检测番茄的成熟度等。
这些应用说明此系统有市场前景,所以我们来研究颜色识别自动分拣系统是很有必要的,从而更进一步挖掘它更深层次的应用,市场前景将更为可观。
二、系统硬件结构
(一)、步进电机
1.定义
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。
使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
2.特点
(1)一般步进电机的精度为步进角的3%--5%,且不累积。
(2)步进电机外表允许的最高温度。
(3)步进电机温度过高首先会使电机的磁性材料退磁,从而导致力矩下降乃于失步,因此电机外表允许的最高温度应取决于不同电机磁性材料的退磁点;一般来讲,磁性材料的退磁点都在130C以上,有的甚至高达200C以上,所以步进电机外表温度80C-90C完全正常。
(4)步进电机的力矩会随转速的升高而下降。
(5)当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。
在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。
(6)步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声。
介绍步进电机的一个技术参数:
空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。
在有负载的情况下,启动频率应更低。
如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。
(7)步进电动机以其显著的特点,在数字化制造时代发挥着重大的用途。
伴随着不同的数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。
3.原理
步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,它的的驱动电路根据控制信号工作,控制信号由单片机产生。
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,控制换相顺序,即通电控制脉冲必须严格按照一定顺序分别控制各相的通断。
通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的。
控制步进电机的转向,即给定工作方式正序换相通电,步进电机正转,若按反序通电换相,则电机就反转。
控制步进电机的速度,即给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步,两个脉冲的间隔越短,步进电机就转得越快。
同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
4.实物
(二)、颜色传感器TCS3200
1.结构框图
从图1可知:
当入射光投射到TCS230上时,通过光电二极管控制引脚S2、S3的不同组合,可以选择不同的滤波器;经过电流到频率转换器后输出不同频率的方波(占空比是50%),不同的颜色和光强对应不同频率的方波;还可以通过输出定标控制引脚S0、S1,选择不同的输出比例因子,对输出频率范围进行调整,以适应不同的需求。
图1TCS230的引脚和功能框图表1S0、S1及S2、S3的组合选项
下面简要介绍TCS230芯片各个引脚的功能及它的一些组合选项。
S0、S1用于选择输出比例因子或电源关断模式;S2、S3用于选择滤波器的类型;OE是频率输出使能引脚,可以控制输出的状态,当有多个芯片引脚共用微处理器的输入引脚时,也可以作为片选信号;OUT是频率输出引脚,GND是芯片的接地引脚,VCC为芯片提供工作电压。
表1是S0、S1及S2、S3的可用组合。
2.原理
由上面的介绍可知,这种可编程的彩色光到频率转换器适合于色度计测量应用领域,如彩色打印、医疗诊断、计算机彩色监视器校准以及油漆、纺织品、化妆品和印刷材料的过程控制和色彩配合。
下面以TCS230在液体颜色识别中的应用为例,介绍它的具体使用。
首先了解一些光与颜色的知识。
(1)三原色的感应原理
通常所看到的物体颜色,实际上是物体表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。
白色是由各种频率的可见光混合在一起构成的,也就是说白光中包含着各种颜色的色光(如红R、黄Y、绿G、青V、蓝B、紫P)。
根据德国物理学家赫姆霍兹(Helinholtz)的三原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的。
(2)TCS3200识别颜色的原理
由三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色。
对于TCS230来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其他原色的通过。
例如:
当选择红色滤波器时,入射光中只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强;同理,选择其他的滤波器,就可以得到蓝色光和绿色光的光强。
通过这三个值,就可以分析投射到TCS230传感器上的光的颜色。
(3)白平衡和颜色识别原理
白平衡就是告诉系统什么是白色。
从理论上讲,白色是由等量的红色、绿色和蓝色混合而成的;但实际上,白色中的三原色并不完全相等,并且对于TCS230的光传感器来说,它对这三种基本色的敏感性是不相同的,导致TCS230的RGB输出并不相等,因此在测试前必须进行白平衡调整,使得TCS230对所检测的“白色”中的三原色是相等的。
进行白平衡调整是为后续的颜色识别作准备。
在本装置中,白平衡调整的具体步骤和方法如下:
将空的试管放置在传感器的上方,试管的上方放置一个白色的光源,使入射光能够穿过试管照射到TCS230上;根据前面所介绍的方法,依次选通红色、绿色和蓝色滤波器,分别测得红色、绿色和蓝色的值,然后就可计算出需要的3个调整参数。
当用TCS230识别颜色时,就用这3个参数对所测颜色的R、G和B进行调整。
这里有两种方法来计算调整参数:
①依次选通三种颜色的滤波器,然后对TCS230的输出脉冲依次进行计数。
当计数到255时停止计数,分别计算每个通道所用的时间。
这些时间对应于实际测试时TCS230每种滤波器所采用的时间基准,在这段时间内所测得的脉冲数就是所对应的R、G和B的值。
②设置定时器为一固定时间(例如10ms),然后选通三种颜色的滤波器,计算这段时间内TCS230的输出脉冲数,计算出一个比例因子,通过这个比例因子可以把这些脉冲数变为255。
在实际测试时,使用同样的时间进行计数,把测得的脉冲数再乘以求得的比例因子,然后就可以得到所对应的R、G和B的值。
3.应用中需要注意的问题
(1)颜色识别时要避免外界光线的干扰,否则会影响颜色识别的结果。
最好把传感器、光源等放置在一个密闭、无反射的箱子中进行测试。
(2)对光源没有特殊的要求,但是光源发出的光要尽量集中,否则会造成传感器之间的相互干扰。
(3)当第1次使用TCS230时,或TCS230识别模块重启、更换光源等情况时,都需要进行白平衡调整。
4.引脚功能
TCS3200的引脚排列如图2所示,各管脚的功能描述见表1所列。
表1TCS230管脚功能
引脚号
符号
类型
功能说明
1
S0
I
输出频率分频系数选择输入端
2
S1
I
3
OE
I
输入频率使能端。
低电平有效
4
GND
电源地
5
VDD
电影电压
6
OUT
O
输出频率(fo)
7
S2
I
光电二极管类型选择输入端
8
S3
I
(三)、单片机STC89C52
1.功能概述
AT89C52提供以下标准功能:
4K字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个向量两级中断结构,一个全双工串行通讯口,内置一个精密比较器,片内振荡器及时钟电路,同时AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的工作模式,空闲方式停止CPU的工作,但允许RAM,定时计数器,串行通信及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作,并禁止其它所有部件工作直到下一个硬件复位。
2.引脚功能及其分布图
VCC:
电源电压;GND:
地;
P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写1可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在FLASH编程时,P0口接受指令字节,而在程序效验时,输出指令字节,效验时,要求外接上拉电阻。
P1口:
P1口是一个带有内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。
FLASH编程和程序效验期间,P1接收低8位地址。
P2口:
P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑们电路。
对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。
FLASH编程或效验时,P2亦接收高位地址和其它控制信号。
P3口:
P3口是一个带有内部上拉电阻的8位双向I/O口,P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑们电路。
对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。
P3口除了作为一般的I/O口线外,更重要的用途是他的第二个功能,如下表所示:
表1P3口AT89C2051特殊功能
端口引脚
功能特性
P3.0
RXD(串行口输入)
P3.1
TXD(并行口输入)
P3.2
INT0(外部中断0)
P3.3
INT1(外部中断1)
P3.4
T0(定时计数外部输入0)
P3.5
T1(定时计数外部输入0)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
P3口还接收一些用于FLASH闪速存储器编程和程序效验的控制信号。
RST:
复位输入。
其引脚一旦变成两个机器周期以上的高电平,所有的I/O口都将复位到1状态,当振荡器正在工作时,持续两个机器周期以上高电平便可完成复位,每个机器周期为12个振荡时钟周期。
EA/VPP:
外部访问允许,欲使CPU仅访问外部程序存储器(0000H—FFFFH),EA端必须保持低电平接地,需注意的是:
如果加密位LB1被编程,复位是内部会锁存EA端状态。
如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。
FLASH存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VPP。
XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器输出端
(四)、液晶显示1602
1.简介
工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)
注:
为了表示的方便,后文皆以1表示高电平,0表示第电平。
2.管脚功能
第1脚:
VSS为地电源
第2脚:
VDD接5V正电源
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光电源正极
第16脚:
背光电源负极
3.操作控制
操作控制表
操作
读状态
写指令
读数据
写数据
输入
RS=0,RW=1,E=1
RS=0,RW=0,
D0~7=指令码,E=H脉冲
RS=1,RW=1,E=1
RS=1,RW=0,
D0~7=数据,E=H脉冲
4.实物
(五)、语音播报WT588D
1.功能概述
WT588D语音芯片是一款功能强大的可重复擦除烧写的语音单片机芯片。
WT588D让语音芯片不再为控制方式而寻找合适的外围单片机电路,高度集成的单片机技术足于取代复杂的外围控制电路。
配套WT588DVoiceChip上位机操作软件可随意更换WT588D语音单片机芯片的任何一种控制模式,把信息下载到SPI-Flash上即可。
软件操作方式简洁易懂,撮合了语音组合技术,大大减少了语音编辑的时间。
完全支持在线下载,即便是WT588D通电的情况下,一样可以通过下载器给关联的SPI-Flash下载信息,给WT588D语音芯片电路复位一下,就能更新到刚下载进来的控制模式。
2.引脚分布及实物
(六)、霍尔开关传感器
1.原理
霍尔开关集成电路应用霍尔效应原理,采用半导体集成技术制造的磁敏电路,它是由电压调整器、霍尔电压发生器、差分放大器、史密特触发器,温度补偿电路和集电极开路的输出级组成的磁敏传感电路,其输入为磁感应强度,输出是一个数字电压讯号。
2.电磁特性
3.产品特点及应用
产品特点
.体积小
.灵敏度高
.响应速度快
.温度性能好
.精确度高
.可靠性高
典型应用
.无触点开关
.汽车点火器
.刹车电路
.位置、转速检测与控制
.安全报警装置
.纺织控制系统
4.实物
(七)、红外线
1.工作原理
利用红外线的物理性质来进行测量的传感器。
红外线又称红外光,它具有反射、折射、散射、干涉、吸收等性质。
任何物质,只要它本身具有一定的温度(高于绝对零度),都能辐射红外线。
红外线传感器测量时不与被测物体直接接触,因而不存在摩擦,并且有灵敏度高,反应快等优点。
2.主要应用及实物
红外线传感器常用于无接触温度测量,气体成分分析和无损探伤,在医学、军事、空间技术和环境工程等领域得到广泛应用。
例如采用红外线传感器远距离测量人体表面温度的热像图,可以发现温度异常的部位,及时对疾病进行诊断治疗(见热像仪);利用人造卫星上的红外线传感器对地球云层进行监视,可实现大范围的天气预报;采用红外线传感器可检测飞机上正在运行的发动机的过热情况等。
(八)、其它
固定支架、红绿蓝白三种小球、电源线、串口转接线、简易装置
三、系统软件示意
1.系统示意图
2.软件流程图
3.算法流程图
4.编程软件
使用KeiluVision3、STC_ISP_V479等,程序如见“附录”。
5.原理图及PCB
6.核心原理
TCS3200扫描控制模块,频率测量模块,按键扫描模块、显示控制模块和电机控制模块,其中核心模块为频率测量模块。
根据原理部分的分析本设计采用了测周期法完成频率测量的目的,即在固定数量的被测信号周期内对标准时钟计数的方式测量频率,公式如下:
f=(N/counter)*F。
其中,N:
被测信号计数脉冲数;f:
被测信号频率;counter:
标准时钟计数值;F。
:
标准时钟频率
四、实验结论
硬件、软件测试分析
1、步进电机没有回到原点:
霍尔传感器出现错误
2、红外线没有检测到小球:
传感器位子没有对准
3、小球语音报错:
采样出错,识别出错
4、分拣位子送错:
步进电机脉冲选择有误
5、软件程序没有输入到单片机里
6、如无上述现象,在工作台上放置本装置,实现
功能,即本设计调试正确
五、致谢
从学校中的理论知识到实训中的实践操作,我们将有更充分的实践去挑战我们的工作,虽然短暂,锻炼了我们动手的能力,同时也锻炼了我们的团队合作精神。
我要感谢我们的学校给予我这样一个锻炼的机会,感恩在我成长路上帮助过我的所有老师!
感谢我的导师侯秀丽,她严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;她循循善诱的教导和不拘一格的思路给予我无尽的启迪。
感谢我的实训老师,这片论文的每个实验细节和每个数据,都离不开你的细心指导。
而你开朗的个性和宽容的态度,帮助我能够很快的融入我们这个新的实验室
六、附录
#include"reg52.h"
#include"comdef.h"
#include"TCS3200.h"
#include"step.h"
#include"key.h"
#include"LCD1602.h"
#include"voice.c"
/*系统中断说明:
外部中断0:
步进电机回原点触发霍尔传感器:
输出接P32颜色识别的OUT接P35.
定时器0、1:
定时器0产生1ms的计数周期,定时器1外部计数模式,配合完成计算频率
外部中断1:
独立按键*/
externuint8STEPDELAY;
externuint16RGB[3][3];
uint8Mode=0;//初始化采样标准值时,用于选择当前对哪种颜色进行采样1:
Red2:
Green3:
Blue
sbitBallExit=P3^3;
voidDelay(uint16m)
{uint8base=120;
while(m--)
for(base=120;base;base--);
}
main()
{uint8Ball=0,Count=10;
uint16R=0,G=0,B=0;
EX0=1;/*外部中断0允许*/
PX0=0;/*外部中断0优先级低*/
IT0=1;/*边沿触发方式中断*/
EX1=0;/*外部中断1允许*/
PX1=0;/*外部中断1优先级低*/
IT1=1;/*边沿触发方式中断*/
TCS3200_Init();
LCD_Init();
EA=1;
Step_Init();//回原点
Delay(1000);
//while
(1)Step(STEPBACKWARD,FULLSTEP,29000/18);//电机测试
LCD_Disp_String(0,0,"Normal");
while(Mode<4){
if(KEY1==Key_Scan()){
while(KEY1==Key_Scan());
Mode++;
switch(Mode){
case1:
LCD_Disp_String(0,0,"RedBall");Read_Voice(7);Delay(1000);Read_Voice
(1);Delay(1000);break;//请放入红球
case2:
LCD_Disp_String(0,0,"GreenBall");Read_Voice(7);Delay(1000);Read_Voice
(2);Delay(1000);break;//请放入绿球
case3:
LCD_Disp_String(0,0,"BlueBall");Read_Voice(7);Delay(1000);Read_Voice(3);Delay(1000);break;//请放入篮球
}
}
if(KEY2==Key_Scan()){Read_Voice(6);Delay(1000);//系统正在为你采样
while(KEY2==Key_Scan());
if(Mode){
//每个球采样10次,求平均值
while(Count--){
Prameter_Calibration(Mode-1);
R+=RGB[Mode-1][0];
G+=RGB[Mode-1][1];
B+=RGB[Mode-1][2];
Delay(10);
}
RGB[Mode-1][0]=R/10;
RGB[Mode-1][1]=G/10;
RGB[Mode-1][2]=B/10;
R=0;
G=0;
B=0;
Count=10;
LCD_Disp_Byte_Dec(1,1,RGB[Mode-1][0]);
LCD_Disp_Byte_Dec(4,1,RGB[Mode-1][1]);
LCD_Disp_Byte_Dec(7,1,RGB[Mode-1][2]);
}
}
}
LCD_Clear();
LCD_Disp_String(0,0,"InitOk");
Read_Voice(8);Delay(1000);//采样结束
Delay(1000);
LCD_Clear();
LCD_Disp_String(0,0,"Normal");
//UART_Send_String("SystemstartupOk\r\n",19);
while
(1){
Ball=Ball_Identify();
switch(Ball){
caseC