Arduino Mikrocontroller Tutorials - Module

Farbdetektor / Color Sensor (Bsp. TCS3200)

Farbsensor/ Color Sensor (Bsp. TCS3200)

Bei dem Farbdetektor TCS3200 handelt es sich um einen Converter IC, der Farben in eine entsprechende Ausgangsfrequenz umwandelt. Der Ausgangsfrequenz ist proportional zur Lichtintensität und hat eine konstante Taktfrequenz (duty cycle) von 50%.

Auf der IC Oberfläche sind 64 Fotodioden in einem 8x8 Raster angeordnet. Vor den Fotodioden sind unterschiedliche Farbfilter angebracht die nur rotes, grünes oder blaues Licht passieren lassen. Aufgrund den Farbfiltern erkennen jeweils 16 Fotodioden den roten, grünen und blauen Farbanteil. Vor weiteren 16 Fotodioden ist kein Farbfilter installiert. Diese geben das ganze sichtbare Farbspektrum zurück.

Pinbelegung

GND Spannungsversorgung -
VCC Spannungsversorgung +5V
OUT Ausgangsfrequenz als Rechtecksignal
LED Ausleuchtung ausschalten (LED auf GND legen)
Bei offenem Ausgang sind die LED's eingeschalten
S0 Ausgangsfrequenz skalieren (siehe Tabelle)
S1
S2 Fotodioden auswählen (siehe Tabelle)
S3
S0 S1 Ausgangsfrequenz Skalierung
L L Ausgang auf GND (aus)
L H 2% (Bsp. 200Hz)
H L 20% (Bsp. 2kHz)
H H 100% (Bsp. 10kHz)
S2 S3 aktive Fotodiode
L L Rot
L H Blau
H H Grün
H L Clear (Kein Filter)

Programmcode

Mit zunehmender Farbintensität bzw. Helligkeit wird die Frequenz immer größer bzw. die Pulsweite immer geringer. Mit dem Arduino Befehl pulseIn(Pin, HIGH) kann die Pulsdauer des HIGH Pegel in Millisekunden gemessen werden. Die weitere Umrechnung in die Frequenz ist nicht notwendig, da die Pulsdauer bereits proportional dazu ist.

#define S0 2 #define S1 3 #define S2 4 #define S3 5 #define OUT 6 #define LED 7 unsigned long all = 0; // ganze sichtbare Licht unsigned long rt = 0; // Rotanteil unsigned long gn = 0; // Grünanteil unsigned long bl = 0; // Blauanteil void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(OUT, INPUT); pinMode(LED, OUTPUT); digitalWrite(LED,HIGH); // Skalierung auf 2% stellen digitalWrite(S0, LOW); digitalWrite(S1, HIGH); Serial.begin(9600); } void loop() { // Photodioden für sämtliches Licht auslesen (Clear) digitalWrite(S2, HIGH); digitalWrite(S3, LOW); delay(100); // HIGH Puls Zeit messen all = pulseIn(OUT, HIGH); // Photodioden für rotes Licht auslesen digitalWrite(S2, LOW); digitalWrite(S3, LOW); delay(100); // HIGH Puls Zeit messen rt = pulseIn(OUT, HIGH); // Photodioden für Grünes Licht auslesen digitalWrite(S2, HIGH); digitalWrite(S3, HIGH); delay(100); // HIGH Puls Zeit messen gn = pulseIn(OUT, LOW); // Photodioden für blaues Licht auslesen digitalWrite(S2, LOW); digitalWrite(S3, HIGH); delay(100); // HIGH Puls Zeit messen bl = pulseIn(OUT, HIGH); // Messwerte ausgeben Serial.print("Summe: "); Serial.print(all); Serial.print(" Rot: "); Serial.print(rt); Serial.print(" Grün: "); Serial.print(gn); Serial.print(" Blau: "); Serial.println(bl); delay (500); }