Перейти к содержимому






Фотография
- - - - -

Датчик цвета (ID:155)

Написано admin , 10 May 2015 · 3772 Просмотров

TCS3200
Датчик цвета (ID:155) Датчик способен распознать три цвета - красный, зеленый, синий.
Порядок подключения выводов датчика:
GND - подключение к общему проводу Arduino.
VCC - подключение к выводу 5 Вольт Arduino.
S0 - подключение к выводу 3 Arduino.
S1 - подключение к выводу 4 Arduino.
S2 - подключение к выводу 5 Arduino.
S3 - подключение к выводу 6 Arduino.
OUT - подключение к выводу 2 Arduino.
LED - подключение к выводу 3,3 Вольт Arduino.
Примерный скетч для работы с датчиком цвета:
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(115200);
  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);
    }
    else if((countG>=countR)&&(countG>countB))
    {
      Serial.print("green");
      Serial.print("\n");
      delay(1000);
    } 
    else if((countB>countG)&&(countB>countR))
    {
      Serial.print("blue");
      Serial.print("\n");
      delay(1000);
    }
  }
  else 
  {
    delay(1000);       
  }
}
Второй вариант скетча:
int s0=3,s1=4,s2=5,s3=6;
int out=2;
int flag=0;
byte counter=0;
byte countR=0,countG=0,countB=0;
void setup()
{
  Serial.begin(115200);
  pinMode(s0,OUTPUT);
  pinMode(s1,OUTPUT); 
  pinMode(s2,OUTPUT);
  pinMode(s3,OUTPUT);

}
void TCS()
{
  flag=0;  
  digitalWrite(s1,HIGH);
  digitalWrite(s0,HIGH);
  digitalWrite(s2,LOW);
  digitalWrite(s3,LOW);
  attachInterrupt(0, ISR_INTO, LOW);
  timer0_init();

}
void ISR_INTO()
{
  counter++;
}
void timer0_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)
  {
    countR=counter;
    Serial.print("red=");
    Serial.println(countR,DEC);
    digitalWrite(s2,HIGH);
    digitalWrite(s3,HIGH);
  }
  else if(flag==2)
  {
    countG=counter;
    Serial.print("green=");
    Serial.println(countG,DEC);
    digitalWrite(s2,LOW);
    digitalWrite(s3,HIGH);
  }
  else if(flag==3)
  {
    countB=counter;
    Serial.print("blue=");
    Serial.println(countB,DEC);
    Serial.println("\n"); 
    digitalWrite(s2,LOW);
    digitalWrite(s3,LOW);

  }
  else if(flag==4)
  {
    flag=0;
  }
  counter=0;
}
void loop()
{
  TCS();
  while(1);
}
Записав скетч в Arduino и включив монитор порта, мы можем видеть цифровые значения каждого из цветов, определенных датчиком. Попробуйте направить датчик предметы различного цвета и увидите изменения цифровых значений в мониторе порта.
Если вы заметите, что датчик цвета некорректно определяет цвета, попробуйте изменить фокусное расстояние с помощью вращения объектива. Не забудьте снять защитный колпачок перед началом работы.
Ссылка на витрину магазина http://dvrobot.ru/238/399.html.






Trackbacks для записи [ Trackback URL ]

Для данной записи нет trackbacks.

Последние комментарии