Arduino Farberkennung mit TCS230/TCS3200 Sensoren – Schritt-für-Schritt-Anleitung
In diesem Arduino-Tutorial lernen Sie, wie Sie Farben mit Arduino und dem TCS230 / TCS3200 Farbsensor erkennen. Sie können das folgende Video ansehen oder die schriftliche Anleitung unten lesen. Der TCS230 erfasst farbiges Licht mithilfe eines 8×8-Arrays von Photodioden. Ein Strom-Frequenz-Wandler konvertiert die Photodioden-Signale in eine Rechteckwelle, deren Frequenz direkt proportional zur Lichtintensität ist. Der Arduino liest diese Rechteckwelle aus und liefert die Farbergebnisse. Betrachtet man den Sensor genauer, sieht man die Farberkennung: Die Photodioden haben drei verschiedene Farbfilter. 16 haben Rotfilter, 16 Grünfilter, 16 Blaufilter und 16 sind klar (kein Filter). Je 16 Photodioden sind parallel geschaltet. Über die zwei Steuerpins S2 und S3 wählen wir aus, welche Gruppe gelesen wird. Für Rot setzen wir beide Pins auf Low-Pegel (siehe Tabelle).Funktionsweise des TCS230 / TCS3200 Farbsensors



Zwei weitere Steuerpins, S0 und S1, skalieren die Ausgangsfrequenz auf 100 %, 20 % oder 2 %. Dies optimiert den Ausgang für verschiedene Frequenzzähler oder Mikrocontroller.
Nun schließen wir den TCS230 an den Arduino an. Hier der Schaltplan:

Benötigte Komponenten:
- TCS230 / TCS3200 Farbsensor
- Arduino Board
- Steckbrett und Jumper-Kabel
TCS230 Farbsensor Quellcode
Beschreibung: Zuerst definieren wir die Pins und eine Variable für die Frequenz. Im setup() setzen wir die vier Steuerpins als Outputs, den Sensor-Ausgang als Input. Wir wählen 20 % Frequenzskalierung und starten die serielle Kommunikation (9600 Baud).
Im loop() lesen wir nacheinander die rot-, grün- und blaugefilterten Photodioden: S2/S3 entsprechend setzen, per pulseIn() die Frequenz messen, auf Serial Monitor ausgeben.
/* Arduino Color Sensing Tutorial
* by Dejan Nedelkovski, www.HowToMechatronics.com */
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int frequency = 0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Frequenzskalierung auf 20%
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
Serial.begin(9600);
}
void loop() {
// Rot-Filter lesen
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
frequency = pulseIn(sensorOut, LOW);
Serial.print("R= ");
Serial.print(frequency);
Serial.print(" ");
delay(100);
// Grün-Filter lesen
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
frequency = pulseIn(sensorOut, LOW);
Serial.print("G= ");
Serial.print(frequency);
Serial.print(" ");
delay(100);
// Blau-Filter lesen
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
frequency = pulseIn(sensorOut, LOW);
Serial.print("B= ");
Serial.print(frequency);
Serial.println(" ");
delay(100);
}Code language: Arduino (arduino)
Im Serial Monitor erscheinen Werte, die von der Frequenzskalierung und Umgebungsbeleuchtung abhängen.

Die drei Werte unterscheiden sich aufgrund der unterschiedlichen Empfindlichkeit jedes Photodiodentyps (siehe Spektralempfindlichkeitsdiagramm im Datenblatt).
Sehen wir, wie die Werte reagieren, wenn wir verschiedene Farben vor den Sensor halten. Bei Rot fällt der Wert in meinem Fall von ~70 auf ~25.

Um die erkannten Farben im RGB-Modell (0–255) darzustellen, nutzen wir die map()-Funktion zur Umrechnung der Messwerte.
// Umrechnung der Frequenz auf RGB-Modell 0-255 frequency = map(frequency, 25, 70, 255, 0);
Der Wert 70 wird auf 0, der Wert 25 auf 255 gemappt. Gleiches für die anderen Farben.
Hier der finale Code für dieses Beispiel:
/* Arduino Color Sensing Tutorial
* by Dejan Nedelkovski, www.HowToMechatronics.com */
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int frequency = 0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
Serial.begin(9600);
}
void loop() {
// Rot
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
frequency = pulseIn(sensorOut, LOW);
frequency = map(frequency, 25, 72, 255, 0);
Serial.print("R= ");
Serial.print(frequency);
Serial.print(" ");
delay(100);
// Grün
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
frequency = pulseIn(sensorOut, LOW);
frequency = map(frequency, 30, 90, 255, 0);
Serial.print("G= ");
Serial.print(frequency);
Serial.print(" ");
delay(100);
// Blau
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
frequency = pulseIn(sensorOut, LOW);
frequency = map(frequency, 25, 70, 255, 0);
Serial.print("B= ");
Serial.print(frequency);
Serial.println(" ");
delay(100);
}Code language: Arduino (arduino)
Hinweis: Die Farben sind nicht hochpräzise, aber für einfache Projekte gut genug. Als weiteres Beispiel zeigt mein nächstes Video, wie man eine automatische Arduino-Farbsortiermaschine baut.

Fragen gerne in den Kommentaren und schauen Sie sich meine Arduino-Projektsammlung an!
Herstellungsprozess
- Raspberry Pi Lichtsensor Tutorial – LDR verdrahten und Lichtpegel mit Python auslesen
- Sicheres Arduino RFID-Schloss bauen – Schritt-für-Schritt-Anleitung
- K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
- Digitales Stadiometer bauen: Körpergröße messen mit Arduino & Lasersensor VL53L0X
- DFRobot Kapazitiver Fingerabdrucksensor mit Arduino oder ESP8266 einbinden
- Sensorturm mit Arduino Cloud: Temperatur, Bewegung & Gase überwachen
- Arduino RGB-LED-Farbmischer – Einsteigerfreundliches DIY-Projekt
- Arduino RGB-Farbmischer bauen – Schritt-für-Schritt-Anleitung
- Dynamische Musik-LED-Lichter zum Jahreswechsel – Arduino Nano & NeoPixel
- Arduino Einsteiger Tutorial #1: Erstes Projekt (Blink)