我们这次选择了两道题:题目九:色彩识别装置设计要求设计一个装置,对30cm左右的一张有色纸,装置能够在自然光或者辅助光配合下,识别出有色纸的颜色,并用汉字显示出来。装置的识别效果的衡量,以与肉眼识别吻合为佳。题目分析本题要求设计一个色彩识别装置,该装置能够在自然光或者辅助光源的配合下,识别出一定距离(30cm)内的有色纸的颜色,并可以在屏幕上将识别结果用汉字显示出,颜色的承载体是纸张,颜色环境相对简单,色彩的辨别以人眼识别的为准(非CIE色度学颜色),可采用ColorChecker卡24种颜色作为参照标准。设计方案鉴于模块化设计在系统设计中的优越性,我们将该系统分为以下4个模块:主要实现方式有以下几种方案一:采用非晶硅彩色传感器,经信号处理电路处理后,利用微处理器(单片机)作为控制器,外接显示器输出测量结果。系统的实现框图如下:标准光源/IU转换/IU转换/IU转换/IU转换电压放大电压放大电压放大电压放大电压放大滤波滤波滤波模拟开关A/D转换缓存器缓存器单片机锁存器EPROM8155键盘显示有色纸非晶硅方案二:利用CCD/CMOS传感器,将采集的数据输入到计算机,通过软件进行分析,在屏幕上输出结果,典型的方案是将数码相机(或者摄像头)采集的数据传输到计算机,通过软件Matlab编写模糊神经网络程序进行分析。框图如下:方案三:选用Photosensor颜色信号进行提取和采集,采用基于人工神经网络的高速并行模数转换模式进行数据的模数转换,嵌入式系统对数据进行处理,完成筛选和分拣工作,系统结构如图所示:方案四:利用可编程彩色光到频率的传感器TCS230进行信号的收集与处理,单片机SPCE061A进行数据的分析处理,并将结果通过显示输出电路输出。方案比较方案一是目前常用的,颜色传感器通常是在独立的光电二极管上覆盖经过修正的红绿蓝滤光片,然后对输出信号进行相应的处理,输出的是模拟信号,需要A/D电路进行采样、转换,才能被微处理器识别,增加了电路的复杂性,存在较大误差,影响了识别效果。方案二的识别精度较高,但涉及图像处理,算法复杂,软件开销大,硬件成本高。方案三具有检测速度快,可靠性高等优点,但同样其成本高,算法复杂,一般用于专业领域。色样CCDCMOS光源滤波图像处理模糊神经网络输出方案四给出了一种基于数字颜色传感器TCS230和16位单片机SPEC061A及LCD显示的颜色识别系统。TCS230是美国TAOS公司推出的一款可编程光频率转换传感器,这种传感器输出和入射光基色分量成正比的频率信号,能够和微处理器直接接口,因此可以简化系统的设计实现。本组成员对光学系统的知识储备不是很足,对于方案一中的光学系统把握不是很大,再加上方案一中涉及较多模拟电路,稳定性不高,调试时间长,精度不如集成系统,另外方案二和方案三的成本明显偏高,技术复杂,因此我们选择了方案四,即采用TCS230颜色传感器用作系统的信号采集和处理,通过单片机对数据处理后输出到LCD显示器。当然,对于方案四我们还有许多问题亟待解决,比如我们对单片机还不是很了解,对汇编语言,微机接口等方面的知识还需要完善,但我们拥有极强的求知欲望和学习能力,在可以预见的将来,我们会将所欠缺的知识补上。系统的原理分析:TCS230将光电二极管阵列、电流/频率转换器和红绿蓝三基色滤光器集成为一体。在由64个光电二极管组成的光敏阵列中,各有16个光电二极管分别用于转换彩色光中的红、绿、蓝基色成分,剩余16个光电二极管不带颜色滤波器,可接受所有光色信息。这些光电二极管在芯片内是交叉排列的,能够最大限度地减少入射光辐射的不均匀性,从而增加颜色识别的精确度;另一方面,相同颜色的16个光电二极管是并联连接的,均匀分布在二极管阵列中,可以消除颜色的位置误差。图1是TCS230的外部引脚和内部功能结构示意图,当入射光投到TCS230上时,通过基色选择信号(S2,S3)组合即可在OUT引脚上获得频率和相应基色含量成正比的方波信号输出,因此可通过测量方波频率计算出三基色数据,从而得知被测颜色。TCS230的典型输出频率范围为2Hz~500kHz,通过输出频率定标选择信号(S0,S1),可使该器件适应量程不同的频率测量装置。表1为TCS230控制信号S0、S1、S2和S3的组合选择功能。在多个TCS230器件应用场合,OE引脚信号可用作器件的片选。硬件设计在单片机的选择上,我们遇到了一点困难,小组内成员对单片机知识储备不够,无法准确选择恰当功能性能的单片机,在参考相关文献资料后,我们选择了集成度较高,功能较全面的16位单片机SPCE061A(其实在初期的查资料过程中,我们也发现了其他更多的单片机,比如:MCS-51、SPCA563B、AT89S52等等,它们也许更适合本系统的设计,但它们的功能单一,外围借口复杂,需要其它的配套电路,考虑到设计的难度,我们并没有选择它们),在此单片机的选择上更多的是从设计的方便上考虑的,没有更全面的考虑到成本功耗等方面的因素。因此我们小组成员今后还需要学习一些单片机的知识。SPECE061A是Sunplus公司的16位单片机,具有丰富的可编程资源,包括32K字内嵌Flash储存器(这是我们选择它的原因之一,大容量储存器,减少了外围储存器及其电路的设计)、强大的中断系统、2个16位定时器/计数器、2个16位通用I/O端口IOA和IOB,以及同步串行设备接口和异步UART接口等。图中TCS230的S0、S1、S2、S3分别接SPCE061A单片机I/O口的IOB5、IOB6、IOB3和IOB4,由此控制选择输出频率定标参数和输出基色信号,TCS230的输出方波信号(OUT)频率通过IOB2测量。如图2所示,SPCE061A中的IOB2除了通常的输入/输出端口功能外,还可以用作SPCE061A内部16位定时/计数器TimerA时钟源A的外部计数脉冲输入EXT1。因此,若在TimerB定时时间到时读取TimerA计数器的值,就可以分别计算出TCS230的3种基色信号输出频率,进而确定红、绿、蓝基色值和相应合成颜色。题目要求将检测结果用汉字输出,普通的LED数码管显然满足不了要求,因此在这一部分我们选择了点阵LCD显示器。然而,通过单片机显示汉字也存在很多难题。首先,单片机资源有限,我们不能为了显示汉字占用太多的资源;其次,汉字存储读取比较繁琐,使用不方便;第三,汉字占用空间太多(如16点阵,每个汉字就需32字节),因而通常把汉字库放在EEPROM里,需要显示某个汉字时,先算出它的区位码,再求出点阵起始位置,从EEPROM中顺序调出该字的点阵数据,存在缓冲区里,最后依次送往LCD显示,描出该字。这与LCD显示方式有一定差别。考虑到本系统用到的汉字资源有限,我们可以预先将用到的汉字符号等进行编码,编成一个文本文件,用一段小程序做出相应小的汉字库,这个小字库的汉字点阵数据取自于一般汉字库。再经过转换和调整,得到新的汉字库,最后把新字库固化在EEPROM中。单片机只需按序号读出点阵字节,送往LCD即可显示所需汉字。减轻了单片机的负担,去除了繁琐的查找内码、求起始位置、转换、调整等工作,提高系统可靠性。然而,即使是这样,也是对我们的巨大挑战,由于没有任何经验可循,并且时间仓促,我们最终放弃了这一想法,但这一方案是可行的,且实现成本相对较低。我们今后需要在这方面填补知识的盲区。最终我们选择了LCM12832ZK(见右图)作为系统的输出设备。LCM12832ZK显示内容128x32点阵,内带8000多GB1、2中文汉字字库,集成了显示控制器ST7920,(这是我们看重它的主要原因,集成了字库,简化了字库及驱动电路的设计),但缺点也是显而易见的,成本偏高,且功能发挥不完全。以下是LCM12832ZK的管脚说明:系统接线图可以参见图2。颜色识别的原理三原色的感应原理:通常所看到的物体的颜色,实际上是物体表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。白色是由各种频率的可见光混合在一起构成的,也就是说白光中包含着各种颜色的色光(如红R、黄Y、绿G、青V、蓝B、紫P)。根据德国物理学家赫姆霍兹(Helinholtz)的三原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的。TCS230识别颜色的原理:由上面的三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色。对于TCS230来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其它原色的通过。例如:当选择红色滤波器时,入射光中只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强;同理,选择其它的滤波器,就可以得到蓝色光和绿色光的光强。通过这三个值,就可以分析投射到TCS230传感器上的光的颜色。白平衡和颜色识别原理:白平衡就是告诉系统什么是白色。从理论上讲,白色是由等量的红色、绿色和蓝色混合而成的;但实际上,白色中的三原色并不完全相等,并且对于TCS230的光传感器来说,它对这三种基本色的敏感性是不相同的,导致TCS230的RGB输出并不相等,因此在测试前必须进行白平衡调整,使得TCS230对所检测的“白色”中的三原色是相等的。进行白平衡调整是为后续的颜色识别作准备。在本装置中,白平衡调整的具体步骤和方法如下:将空的试管放置在传感器的上方,试管的上方放置一个白色的光源,使入射光能够穿过试管照射到TCS230上;根据前面所介绍的方法,依次选通红色、绿色和蓝色滤波器,分别测得红色、绿色和蓝色的值,然后就可计算出需要的三个调整参数。当用TCS230识别颜色时,就用这三个参数对所测颜色的R、G和B进行调整。这里有两种方法来计算调整参数:①依次选通三种颜色的滤波器,然后对TCS230的输出脉冲依次进行计数。当计数到255时停止计数,分别计算每个通道所用的时间。这些时间对应于实际测试时TCS230每种滤波器所采用的时间基准,在这段时间内所测得的脉冲数就是所对应的R、G和B的值。②设置定时器为一固定时间(例如10ms),然后选通三种颜色的滤波器,计算这段时间内TCS230的输出脉冲数,计算出一个比例因子,通过这个比例因子可以把这些脉冲数变为255。在实际测试时,使用同样的时间进行计数,把测得的脉冲数再乘以求得的比例因子,然后就可以得到所对应的R、G和B的值。根据颜色识别原理,我们涉及了该颜色辨别仪系统软件的程序结构如图4所示。理论上白色由等量的红、绿、蓝色混合而成,实际上白色中的这三基色成分并不相等,且颜色传感器TCS230对红、绿、蓝三基色的灵敏度也是不同的,这使得TCS230对白色的三基色输出不相同。因此,在实际颜色检测之前应进行白平衡调整,即先通过对标准白色的测量来确定对红、绿、蓝基色的3个调整参数,以使得TCS230对白色中三基色的测量相等,如此确定的调整参数即可用来对实际测量值进行标定。白平衡后由KEY键启动颜色识别过程,其流程如图5所示,在分别测得相应入射光R、G、B分量的3个频率计数值后进行标定数据处理,继而通过预设的颜色数据表进行颜色匹配识别。软件设计流程图开始系统初始化白平衡LCD提示白平衡提示按键扫描白平衡OK颜色识别子程序K键按下识别成功LCD显示颜色结束LCD显示出错子程序入口选择R、G、B分量TimerA(计数)TimerB(计时)初始化开IRQ2中断定时溢出关TimerA/TimerB存TimerA数值R、G、B测完数据处理颜色匹配子程序出口图4颜色辨别仪系统软件的主程序结构但由于没有单片机的开发板以及水平和时间的限制,我们并没有能将详细的系统程序写出来,仅仅画出了系统框图,今后我们需要在这一方面多下工夫。结果处理与校正颜色的测量准确度受很多因素的影响,如照明光谱特征及光源方位、物体的发射特性、观测位置、及传感器光谱响应性能等,测量过程中的环境因素变化也会造成测量误差。在本设计中要求被测纸张是不透明的(若透光性比较好,可以在纸张后面加一张不透明标准白板),且辅助光源与有色纸成45度角,探测器与纸张相距30CM左右,且垂直于