Detekce barev pomocí Arduina

Příklad ukazuje, jak můžeme detekovat barvu pomocí modulu barevného senzoru ve spojení s mikrokontrolérem Arduino.

Příklad používá následující prvky:

Připojení senzoru k Arduinu:

Připojení k Arduinu je následující:

Modul TCS3200D Pin Arduino
VCC 5 V
GND GND
VEN 2
S0 3
S1 4
S2 5
S3 6

Schéma připojení modulu k Arduino Uno.

Program pro Arduino

V příkladu byl použit následující kód:

 int s0 = 3, s1 = 4, s2 = 5, s3 = 6; // piny modulu připojené k Arduinu
int out = 2; // pin 2 Arduino a OUT ze snímače
příznak int = 0;
čítač bajtů = 0;
počet bytů R = 0, počet G = 0, počet B = 0;
neplatné nastavení ()
{
  Serial.begin (9600); // inicializace sériového monitoru
  pinMode (s0, VÝSTUP); // nastavit piny jako výstup
  pinMode (s1, VÝSTUP);
  pinMode (s2, VÝSTUP);
  pinMode (s3, VÝSTUP);

}
neplatné TCS ()
{
  vlajka = 0;
  digitalWrite (s1, HIGH);
  digitalWrite (s0, HIGH);
  digitalWrite (s2, LOW);
  digitalWrite (s3, LOW);
  attachInterrupt (0, ISR_INTO, LOW);
  timer0_init ();

}
neplatné ISR_INTO ()
{
  counter ++;
}
void timer0_init (void)
{
  TCCR2A = 0x00;
  TCCR2B = 0x07; // frekvence hodin - 1024
  TCNT2 = 100; // přetečení 10 ms
  TIMSK2 = 0x01; // povolení k přerušení
}
int i = 0;
ISR (TIMER2_OVF_vect) // časovač 2, 10ms přetečení 10ms. funkce přerušení interního přetečení
{
  TCNT2 = 100;
  flag ++;
  if (flag == 1) // získává a zobrazuje komponenty RGB na obrazovce
  {
    countR = počitadlo;
    Serial.print ("red =");
    Serial.print (countR, DEC);
    Serial.print ("tt");
    digitalWrite (s2, HIGH);
    digitalWrite (s3, HIGH);
  }
  else if (flag == 2)
  {
    countG = counter;
    Serial.print ("green =");
    Serial.print (countG, DEC);
    Serial.print ("t");
    digitalWrite (s2, LOW);
    digitalWrite (s3, HIGH);
  }
  else if (flag == 3)
  {
    countB = počitadlo;
    Serial.print ("blue =");
    Serial.print (countB, DEC);
    Serial.print ("t");
    Serial.println ("n");
    digitalWrite (s2, LOW);
    digitalWrite (s3, LOW);

  }
  else if (flag == 4)
  {
    vlajka = 0;
  }
  counter = 0;
}
void loop () // hlavní smyčka programu
{
  TCS ();
  zpoždění (500);
  while (1);

}

Program zobrazuje hodnotu komponent RGB pro rozpoznanou barvu. Výsledek práce programu lze sledovat níže:

Screenshot sériového monitoru.

zveme vás ke spolupráci!