Farberkennung mit Arduino
Das Beispiel zeigt, wie wir Farben mit einem Farbsensormodul in Verbindung mit einem Arduino-Mikrocontroller erkennen können.
Das Beispiel verwendet die folgenden Elemente:
Anschließen des Sensors mit Arduino:
Die Verbindung zum Arduino ist wie folgt:
| TCS3200D-Modul | Arduino-Stift |
|---|---|
| VCC | 5 V |
| Masse | Masse |
| AUS | 2 |
| S0 | 3 |
| S1 | 4 |
| S2 | 5 |
| S3 | 6 |
Diagramm der Verbindung des Moduls mit dem Arduino Uno.
Programm für Arduino
Im Beispiel wurde folgender Code verwendet:
Ganzzahl s0 = 3, s1 = 4, s2 = 5, s3 = 6; // Modulstifte mit Arduino verbunden
int aus = 2; // Pin 2 Arduino und OUT vom Sensor
Int-Flag = 0;
Bytezähler = 0;
Byte countR = 0, countG = 0, countB = 0;
Void-Setup ()
{
Serial.begin (9600); // Initialisierung des seriellen Monitors
PinMode (s0, AUSGANG); // Pins als Ausgang setzen
PinMode (s1, AUSGANG);
PinMode (s2, AUSGANG);
PinMode (s3, AUSGANG);
}
Nichtig TCS ()
{
Flagge = 0;
digitalWrite (s1, HOCH);
digitalWrite (s0, HOCH);
digitalWrite (s2, NIEDRIG);
digitalWrite (s3, NIEDRIG);
AttachInterrupt (0, ISR_INTO, LOW);
timer0_init ();
}
ungültig ISR_INTO ()
{
Zähler ++;
}
void timer0_init (nichtig)
{
TCCR2A = 0x00;
TCCR2B = 0x07; // Taktfrequenz - 1024
TCNT2 = 100; // Überlauf 10 ms
TIMSK2 = 0x01; // Abbrucherlaubnis
}
int ich = 0;
ISR (TIMER2_OVF_vect) // Timer 2, 10 ms Überlauf 10 ms. Interne Überlauf-Interrupt-Funktion
{
TCNT2 = 100;
Flagge ++;
if (flag == 1) // RGB-Komponenten abrufen und auf dem Bildschirm anzeigen
{
countR = Zähler;
Serial.print ("rot =");
Serial.print (countR, DEC);
Serial.print ("tt");
digitalWrite (s2, HOCH);
digitalWrite (s3, HOCH);
}
Sonst wenn (Flag == 2)
{
countG = Zähler;
Serial.print ("grün =");
Serial.print (countG, DEC);
Serial.print ("t");
digitalWrite (s2, NIEDRIG);
digitalWrite (s3, HOCH);
}
Sonst wenn (Flag == 3)
{
countB = Zähler;
Serial.print ("blau =");
Serial.print (countB, DEC);
Serial.print ("t");
Serial.println ("n");
digitalWrite (s2, NIEDRIG);
digitalWrite (s3, NIEDRIG);
}
Sonst wenn (Flag == 4)
{
Flagge = 0;
}
Zähler = 0;
}
void loop () // Hauptprogrammschleife
{
TCS ();
Verzögerung (500);
während (1);
}
Das Programm zeigt den Wert der RGB-Komponenten für die erkannte Farbe an. Das Ergebnis der Arbeit des Programms kann unten beobachtet werden:
Screenshot des seriellen Monitors.

