Nr.07 – Farbsensor

funduinoshop.com - Dein Onlineshop für Mikroelektronik
Für die Durchführung dieser Anleitung benötigst du:
Menge
Stückzahl
1x
1x
diverse
1x
diverse
diverse
Farbsensor TS3200 Arduino

Aufgabe: Mit Hilfe 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

Farbsensor TCS3200 Arduino Test Blau

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

Farbkarte TCS3200
Die Farbmatrix für den TCS3200

Farbwerte des TCS3200 im seriellen Monitor

Die Farbwerte im seriellen Monitor des Arduinos

Reaktion der LEDs auf den farbigen Untergrund

Farbsensor TCS3200 Arduino - Blau
Der Farbsensor erkennt den blauen Untergrund und zeigt "BLAU" an
Farbsensor TCS3200 Arduino - Grün
Der Farbsensor erkennt den grünen Untergrund und zeigt "GRÜN" an
Der Farbsensor erkennt den roten Untergrund und zeigt "ROT" an