Inhaltsverzeichnis
Für dieses Projekt benötigst du
Farbsensor TCS3200 mit Arduino Mikrocontrollern auslesen
Aufgabe: Mithilfe eines Farbsensors sollen die Farben Rot, Grün und Blau erkannt werden und eine entsprechende LED aufleuchten.
Auf dem Farbsensor (in diesem Fall TCS3200) befinden sich 4 weiße LEDs, um genauere Werte zu erhalten. In der Mitte der LEDs befindet sich ein kleines Viereck aus Fotodioden, welche die Intensität einer Farbe filtern können. Es sind Fotodioden für grüne, rote und blaue Farbe sowie Fotodioden ohne Farbfilter vorhanden. Diese „filtern“ heraus, welche Farbe gerade vor den Farbsensor gehalten wird und wandeln diese in Werte um, die der Arduino Mikrocontroller verarbeiten kann.
Der Farbsensor kann zum Beispiel in dem Aufbau einer Sortiermaschine verwendet werden.
Für unseren Testaufbau haben wir folgenden Aufbau mit entsprechender Verkabelung vorgenommen
Verkabelung des TCS3200 am Arduino Mikrocontroller
Farbsensor → Arduino
- VCC → 5V
- GND → GND
- S0 → 8
- S1 → 9
- S2 → 12
- S3 → 11
- OUT → 10
- OE → GND
LEDs → Arduino
- Rote LED → 2
- Grüne LED → 3
- Blaue LED → 4
Hinweis: Bei einem Farbsensor des Typs GY-31 muss eine Änderung zur vorstehenden Pinbelegung vorgenommen werden. Hier muss der Anschluss LED an Pin 13 des Mikrocontrollers angelegt werden.
Dies ist ein Beispielcode, mit dem die drei Farben Rot, Grün und Blau vom Arduino ausgelesen werden. Gleichzeitig zeigen drei entsprechend farbige LEDs an, welche Farbe gerade vom Sensor erkannt wurde.
Der Programmcode
const int s0 = 8; //Verbindung der Farbsensorkontakte mit dem Arduino festlegen
const int s1 = 9;
const int s2 = 12;
const int s3 = 11;
const int out = 10;
int roteLED = 2; //Verbindung der LEDs mit dem Arduino festlegen
int grueneLED = 3;
int blaueLED = 4;
int rot = 0; //Variablen für LEDs benennen
int gruen = 0;
int blau = 0;
void setup()
{
Serial.begin(9600); //Serielle Kommunikation starten
pinMode(s0, OUTPUT); //Die Kontakte des Farbsensors werden als Output oder...
pinMode(s1, OUTPUT); // (Warum als Output? Die Frequenzwerte (s0-s3) sollen im
pinMode(s2, OUTPUT); // seriellen Monitor ausgegeben werden.)
pinMode(s3, OUTPUT);
pinMode(out, INPUT); // ...Input festgelegt
pinMode(roteLED, OUTPUT); //Die LEDs werden als Output festgelegt
pinMode(grueneLED, OUTPUT);
pinMode(blaueLED, OUTPUT);
digitalWrite(s0, HIGH); //Die vier weißen LEDs am Farbsensor sollen leuchten
digitalWrite(s1, HIGH);
}
void loop()
{
color();//Diese Funktion wird am Ende des Codes festgelegt (s.“void color();“)
Serial.print(" Wert Rot: "); //Auf dem seriellen Monitor soll jeweils „Wert“
Serial.print(rot, DEC); //mit der entsprechenden Farbe angezeigt
Serial.print(" Wert Gruen: ");//werden und dahinter der Wert, welcher in der
Serial.print(gruen, DEC); //void color(); Funktion ausgelesen wurde.
Serial.print(" Wert Blau: ");
Serial.print(blau, DEC);
//Hier folgen die Befehle für die LEDs
if (rot < blau && rot < gruen && rot < 20) //Wenn der Filterwert für rot //kleiner ist als alle anderen Werte..
{
Serial.println(" – (Rote Farbe)"); //..soll “Rote Farbe“ am seriellen //Monitor angezeigt werden und..
digitalWrite(roteLED, HIGH); //…ie rote LED leuchtet auf, die anderen
digitalWrite(grueneLED, LOW); //bleiben aus
digitalWrite(blaueLED, LOW);
}
else if (blau < rot && blau < gruen) //Das gleiche bei Blau und Grün
{
Serial.println(" – (Blaue Farbe)");
digitalWrite(roteLED, LOW);
digitalWrite(grueneLED, LOW);
digitalWrite(blaueLED, HIGH);
}
else if (gruen < rot && gruen < blau)
{
Serial.println(" – (Gruene Farbe)");
digitalWrite(roteLED, LOW);
digitalWrite(grueneLED, HIGH);
digitalWrite(blaueLED, LOW);
}
else{ //Wenn keine Werte vorhanden sind..
Serial.println(); //..nichts auf dem seriellen Monitor anzeigen und..
}
delay(300);
digitalWrite(roteLED, LOW); //…alle LEDs ausschalten
digitalWrite(grueneLED, LOW);
digitalWrite(blaueLED, LOW);
}
void color() //Hier werden die Werte vom Farbsensor ausgelesen und unter den
//entsprechenden Variablen gespeichert
{
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
rot = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH);
blau = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
gruen = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}
Farbmatrix für den TCS3200
Farbwerte des TCS3200 im seriellen Monitor
Reaktion der LEDs auf den farbigen Untergrund
Funduino - Dein Onlineshop für Mikroelektronik
-
Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
-
Mehr als 3.500 Artikel sofort verfügbar!
-
Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.