51单片机驱动TCS3200颜色识别传感器

51单片机驱动TCS3200颜色识别传感器

  • TCS3200
  • 简介
  • 输出频率与滤光器选择说明
  • 实验说明
  • 接线
  • 驱动
  • 驱动说明
  • 主要代码
  • 主函数
  • 实验现象
  • 验证:
  • 实验注意事项:
  • TCS3200

    简介

    TCS3200颜色传感器是一款全彩的颜色检测器,包括了一块TAOS TCS3200RGB感应芯片和4个白色LED灯,TCS3200能在一定的范围内检测和测量几乎所有的可见光。TCS3200有大量的光检测器,每个都有红绿蓝和清除4种滤光器。每种颜色滤光器均匀地按数组分布来清除颜色中偏移位置的颜色分量。内置的振荡器能输出方波,其频率与所选择的光的强度成比例关系,光线越强,内置的振荡器方波频率越高。

    输出频率与滤光器选择说明

    TCS3200D的OUT脚输出的信号频率与内置振荡器频率的比率因子可以通过S0,S1的上下电平来选择,具体入下图

    根据图中的指示配置S0,S1的电平可以把输出的信号频率设置为100%、20%、2%与0%,分别为600KHz、120KHz与12KHz。
    由三原色原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色,TCS3200D有4个滤光器可以阻止某一种颜色的光通过,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其它原色的通过。
    TCS3200传感器上的红、绿、蓝、和清除4种滤光器,可以通过其引脚S2和S3的上下电平来选择滤波器模式,如如下图。

    实验说明

    本次实验将用51单片机驱动TCS3200颜色识别模块,通过1602LCD屏幕把识别到的三原色打印出来。
    51单片机(STC89C52RC)


    点击图片购买

    1602LCD液晶显示器


    点击图片购买

    接线

    51单片机 TCS3200 1602LCD
    5V VCC
    GND GND
    P1_1 S2
    P1_0 S3
    P3_5 OUT
    P2 DATA
    P0_7 RS
    P0_6 RW
    P0_5 EN


    由0原理图可知,S0,S1已经上拉,输出信号频率为100%

    驱动

    驱动说明

    设置定时器为一固定时间(例如10 ms),然后通过选择三种颜色的滤波器,计算这段时间内TCS230的输出脉冲数,计算出一个比例因子,通过这个比例因子可以把这些脉冲数变为255。在实际测试时,使用同样的时间进行计数,把测得的脉冲数再乘以求得的比例因子,然后就可以得到所对应的R、G和B的值。

    主要代码

    void c10ms_out() interrupt 1
    {  uint temp;
            test_pin=!test_pin; //测试定时器中断频率引脚,可以用示波器观察
            TR0=0;              //关闭定时
            TR1=0;              //关闭计数
     //   count+1实现先检测绿色,再检测蓝色,然后检测红色,循环检测       
            if(count==0)
            {
            count++;    
            s2=1;s3=1;             //选择滤波器为绿色     
    	    
    		temp=(8<<TH1)+TL1;    //计算这段时间内 TCS230 的输出脉冲数	
    		temp/=rp;			
            conversion(temp);
    		disp_R[2]=ge;         //因为这次的中断,是上次选择滤波器的数值
    		disp_R[1]=shi;
    		disp_R[0]=bai;
            } 
    
            else if(count==1)
            {            
            count++;
            s2=1;s3=0;            //选择滤波器为蓝色
    		temp=(8<<TH1)+TL1;    //计算这段时间内 TCS230 的输出脉冲数	
    		temp/=gp;			
            conversion(temp);
    		disp_G[2]=ge;         //因为这次的中断,是上次选择滤波器的数值
    		disp_G[1]=shi;
    		disp_G[0]=bai;
            }
    
            else if(count==2)
            {            
            count=0;
            s2=0;s3=0;            //选择滤波器为红色
    
    		temp=(8<<TH1)+TL1;    //计算这段时间内 TCS230 的输出脉冲数	
    		temp/=bp;		
            conversion(temp);
      	    disp_B[2]=ge;         //因为这次的中断,是上次选择滤波器的数值
    		disp_B[1]=shi;
    		disp_B[0]=bai;
    
            }
    
         //定时器计数器重赋初值
         TH0=0xE0;
         TL0=0x00; //11。0592M 晶振,为10ms
         TL1=0x00;//计数器清零
         TH1=0x00;//计数器清零
         TR0=1;   //打开定时器
         TR1=1;   //打开计数器
    }
    
    

    主函数

    void main()
    {
    
          delay(10); 
          InitLcd();      //lcd初始化
    	  s2=0;           //初始设定S2引脚
    	  s3=0;           //初始设定S3引脚
          t0_init();      //定时计数初使化
    
         while(1)
         {
         
            DisplayOneChar(0,0,'G'); 
    		DisplayOneChar(1,0,':'); 
    		DisplayOneChar(2,0,disp_G[0]); 
    		DisplayOneChar(3,0,disp_G[1]); 
    		DisplayOneChar(4,0,disp_G[2]); 		//绿
    
            DisplayOneChar(6,0,'B'); 
    		DisplayOneChar(7,0,':'); 
    		DisplayOneChar(8,0,disp_B[0]); 
    		DisplayOneChar(9,0,disp_B[1]); 
    		DisplayOneChar(10,0,disp_B[2]);     //蓝
    
    
    		DisplayOneChar(0,1,'R'); 
    		DisplayOneChar(1,1,':'); 
    		DisplayOneChar(2,1,disp_R[0]); 
    		DisplayOneChar(3,1,disp_R[1]); 
    		DisplayOneChar(4,1,disp_R[2]); 	    //红				
    
            delay(100) ; 
    
    
         }
    }
    

    实验现象

    验证:

    实验注意事项:

    颜色识别时要避免外界光线的干扰,否则会影响颜色识别的结果。最好把传感器、光源等放置在一个密闭、无反射的箱子中进行测试,上面的实验由于环境与手机拍视角度光线的反射等因素影响,看着会有些许色差。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 51单片机驱动TCS3200颜色识别传感器

    发表评论