gada888 发表于 2018-12-24 15:23:58

会说话的颜色传感器TCS3200

颜色识别传感器TCS3200作为TCS230的升级版,尺寸小,应用方便, 广泛应用于智能玩具,教育类机器人,手机等智能硬件领域今天介绍这个项目是把它对着一个物体,然后它会语音播报出物体颜色。颜色MP3文件是事先录好放在DFPlayer mini的SD卡里的。首先建立一个mp3文件夹,让后放入001.MP3,002.mp3等。









#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
int s0=3,s1=4,s2=5,s3=6;
int flag=0;
int counter=0;
int countR=0,countG=0,countB=0;
void setup()
{
Serial.begin(9600);
mp3_set_serial (Serial);//set Serial for DFPlayer-mini mp3 module
mp3_set_volume (25);
delay (400);
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
}
void TCS()
{
digitalWrite(s1,HIGH);
digitalWrite(s0,LOW);
flag=0;
attachInterrupt(0, ISR_INTO, CHANGE);
timer2_init();
}
void ISR_INTO()
{
counter++;
}
void timer2_init(void)
{
TCCR2A=0x00;
TCCR2B=0x07; //the clock frequency source 1024 points
TCNT2= 100;    //10 ms overflow again
TIMSK2 = 0x01; //allow interrupt
}
int i=0;
ISR(TIMER2_OVF_vect)//the timer 2, 10ms interrupt overflow again. Internal overflow interrupt executive function
{
TCNT2=100;
flag++;
if(flag==1)
{
   counter=0;
}
else if(flag==2)
{
   digitalWrite(s2,LOW);
   digitalWrite(s3,LOW);
   countR=counter/1.051;
   Serial.print("red=");
   Serial.println(countR,DEC);
   digitalWrite(s2,HIGH);
   digitalWrite(s3,HIGH);   
}
else if(flag==3)
   {
    countG=counter/1.0157;
   Serial.print("green=");
   Serial.println(countG,DEC);
    digitalWrite(s2,LOW);
    digitalWrite(s3,HIGH);
    }
else if(flag==4)
   {
    countB=counter/1.114;
   Serial.print("blue=");
   Serial.println(countB,DEC);
    digitalWrite(s2,LOW);
    digitalWrite(s3,LOW);
    }
else
    {
    flag=0;
   TIMSK2 = 0x00;
    }
    counter=0;
    delay(2);
}
void loop()
{
delay(10);
TCS();
if((countR>10)||(countG>10)||(countB>10))
{
   if((countR>countG)&&(countR>countB))
      {
         Serial.print("red");
         Serial.print("\n");
         delay(1000);
         mp3_play (1);
      delay (200);
      }
   else if((countG>=countR)&&(countG>countB))
      {
         Serial.print("green");
         Serial.print("\n");
         delay(1000);
         mp3_play (2);
      delay (200);
      }
    else if((countB>countG)&&(countB>countR))
   {
         Serial.print("blue");
         Serial.print("\n");
          delay(1000);
          mp3_play (3);
   delay (200);
   }
   }
else
{
    delay(1000);      
}
}




gada888 发表于 2018-12-24 15:27:55

DFPlayer mini 的RX和TX分别接UNO的TX和RX.
页: [1]
查看完整版本: 会说话的颜色传感器TCS3200