|
Der TCS230/TCS3200 ist ein leistungsfähiger IC zur Farberkennung im RGB-Farbraum. Die auftreffende farbige Licht wird durch eine 8x8-Matrix von Fotodioden aufgenommen. Durch einen integrierten Strom-Frequenz-Wandler werden die detektierten Werte direkt in ein Rechteck-Signal umgewandelt, welches proportional zur erkannten Lichtwelle/Intensität ist. Der an den Ausgang des Sensors angeschlossene Mikrocontroller kann nun dieses Signal auswerten.Das hier verwendete fertige Modul enthält zusätzlich zum eigentlichen IC vier weiße Leuchtdioden, die das zu erkennende Objekt in einem gleichmäßigen Farbton erhellen. Hinweis: Laut Datenblatt sollte der VCC-PIN mit einem 0,01-0,1µF Kondensator stabilisiert werden. Dieses wird in den folgenden Experimenten aber nicht berücksichtigt. Bei genauerer Betrachtung des Sensor-Chips sieht man, dass die Foto-Dioden drei verschiedene Farbfilter besitzen. 16 davon haben je einen roten, grünen oder blauen Filter. 16 weitere Foto-Dioden besitzen gar keinen Filter. Alle diese 16 gleichen Foto-Dioden sind parallel geschaltet und mit den Kontroll-PINs S2 und S3 verbunden, mit denen ausgewählt werden kann, welche Farbe man erkennen will. Anhand der Tabellen kann man sehen, wie man die PINs auslesen muss, um die entsprechende Farbe zu erkennen. |
|
|
|
|
In diesem Sketch wird zwischen verschiedenen Farben unterschieden. Diese sind ROT, GRÜN und BLAU. |
||
Um zwischen verschiedenen Farben unterscheiden zu können, gibt es drei Bedingungen: Wenn R den maximalen Wert hat (RGB-Parameter), so hat das Objekt die Farbe rot. Wenn G den maximalen Wert hat (RGB-Parameter), so hat das Objekt die Farbe grün. Wenn B den maximalen Wert hat (RGB-Parameter), so hat das Objekt die Farbe blau. Hinweis: Der Sensor kann auch andere Farben erkennen. Dazu sind aber mehrere Abfragen notwendig. #define S1 5 #define S2 6 #define S3 7 #define sensorOut 8 |
int redFrequency = 0; int greenFrequency = 0; int blueFrequency = 0; // Speichert die Farben red, green und blue int redColor = 0; int greenColor = 0; int blueColor = 0; void setup() { // Vereinbarung der Outputs pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); // Der sensorOut wird als Input gesetzt pinMode(sensorOut, INPUT); // Skalierung der Frequenz auf 20% digitalWrite(S0,HIGH); digitalWrite(S1,LOW); // Der serielle Monitor wird aktivert Serial.begin(9600); |
// Die RED (R) Photodioden werden zum Lesen gesetzt digitalWrite(S2,LOW); digitalWrite(S3,LOW); // Lesen der Output-Frequenz redFrequency = pulseIn(sensorOut, LOW); // Remaping the value of the RED (R) frequency from 0 to 255 redColor = map(redFrequency, 70, 120, 255,0); // Ausgabe des RED (R) Wertes Serial.print("R = "); Serial.print(redColor); delay(1000); // Die GREEN (G) Photodioden werden zum Lesen gesetzt digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); // Lesen der Output-Frequenz greenFrequency = pulseIn(sensorOut, LOW); // Remaping the value of the GREEN (G) frequency from 0 to 255 greenColor = map(greenFrequency, 100,199, 255, 0); // Ausgabe des GREEN (G) Wertes Serial.print(" G = "); Serial.print(greenColor); delay(1000); |
digitalWrite(S2,LOW); digitalWrite(S3,HIGH); // Lesen der Output-Frequenz blueFrequency = pulseIn(sensorOut, LOW); // Remaping the value of the BLUE (B) frequency from 0 to 255 blueColor = map(blueFrequency, 38, 84, 255, 0); // Ausgabe des BLUE (B) Wertes Serial.print(" B = "); Serial.print(blueColor); delay(1000); // Überprüfe die gefunden Farbe // und zeige diese auf dem Serial-Monitor an if(redColor > greenColor && redColor > blueColor){ Serial.println(" - RED detected!"); if(greenColor > redColor && greenColor > blueColor) { Serial.println(" - GREEN detected!"); } if(blueColor > redColor && blueColor > greenColor){ Serial.println(" - BLUE detected!"); } } |
|
Hier noch eine Bemerkung zum Einsatz des Sensors: in der Mitte der Platine befindet sich ein Fotosensor mit
64 Dioden bzw. Pixel, davon 16 ohne Filter und jeweils 16 mit roten, blauen oder grünen Farbfiltern.
Die vier 5mm LEDs dienen dazu, das zu scannende Objekt möglichst gleichmäßig und neutral zu beleuchten. Praxistipp: zur Messung sollte man das Umgebungslicht bzw. Streulicht vermeiden, da dies die Ergebnisse verfälschen kann. Je nach Einsatzbereich ist es manchmal hilfreich, den Fotosensor mithilfe eines kleinen Röhrchens abzuschirmen, um konstante Werte zu erhalten. Die Ausgabe des ICs ist ein Rechtecksignal proportional zur jeweiligen Wellenlänge. S0 und S1 skalieren die Frequenz des Ausgangssignals, S2 und S3 dient zur Abfrage der R- / B- / G- und W-Werte.OE schaltet das Modul ein bzw. aus (enable active low) |