Objektfarben erkennen mit Arduino Nano und TCS3200-Sensor
Komponenten und Zubehör
| Arduino Nano R3 | × | 1 |
| Farbsensor-Modul (TCS3200) | × | 1 |
| I2C-LCD-Display 16×2 (weiß auf blau) | × | 1 |
| Steckbrett (Breadboard) | × | 1 |
Apps und Onlinedienste
- Arduino IDE
Projektbeschreibung
In diesem Tutorial lernen Sie, wie Sie mit einem Arduino und dem TCS3200-Sensor Farben auslesen und auf einem LCD anzeigen können. Das Projekt ist Teil einer größeren Anwendung: Ein Roboterarm soll basierend auf der erkannten Objektfarbe eine passende Aktion ausführen.
Schritt 1: Stückliste (Bill of Materials)
Die folgenden Links und Preise dienen nur als Referenz:
- Arduino Nano (ca. 8,00 USD)
- TCS3200-Farbsensor-Modul (ca. 9,00 USD)
- I2C/TWI 1602 serielles LCD-Modul mit blauer Hintergrundbeleuchtung (ca. 8,00 USD)
- Steckbrett (ca. 2,00 USD)
- Verbindungskabel
Schritt 2: Der TCS3200-Farbsensor
Laut Datenblatt ist der TCS3200 ein programmierbarer Licht-zu-Frequenz-Wandler, der konfigurierbare Silizium-Photodioden und einen Strom-zu-Frequenz-Wandler auf einem einzigen monolithischen CMOS-Chip vereint.
Der Ausgang ist eine Rechteckwelle (50 % Tastverhältnis) mit einer Frequenz, die direkt proportional zur Lichtintensität (Bestrahlungsstärke) ist. Der volle Ausgangsfrequenzbereich kann über zwei Steuerpins (S0 und S1) auf einen von drei voreingestellten Werte skaliert werden. Digitale Ein- und Ausgänge ermöglichen den direkten Anschluss an einen Mikrocontroller.
Der Output-Enable-Pin (OE) versetzt den Ausgang in den Hochohm-Zustand, sodass mehrere Sensoren einen Mikrocontroller-Eingang teilen können. Der TCS3200 liest ein 8×8-Array von Photodioden aus:
- 16 Photodioden mit Blaufilter
- 16 Photodioden mit Grünfilter
- 16 Photodioden mit Rotfilter
- 16 Photodioden ohne Filter (Clear)
Die Pins S2 und S3 wählen aus, welche Photodioden-Gruppe (Rot, Grün, Blau, Clear) aktiv ist. Die Photodioden messen 110 µm × 110 µm und sind im 134-µm-Raster angeordnet.
Der OE-Pin (Enable) sollte auf GND (LOW) gelegt werden. Der Sensor arbeitet mit 2,7–5,5 VDC; wir nutzen die 5-V-Ausgangsspannung des Arduino. Um seitliches Streulicht auszublenden, empfiehlt sich ein kleiner Gummiring (z. B. mit Heißkleber befestigt).
Schritt 3: Hardware-Verdrahtung
TCS3200-Sensor an Arduino Nano:
- S0 → Nano Pin D4
- S1 → Nano Pin D5
- S2 → Nano Pin D6
- S3 → Nano Pin D7
- OUT → Nano Pin D8
- EN → GND
- VCC → +5 V
- GND → GND
I2C-LCD 16×2 Serielles Display:
- SDA → Nano Pin A4
- SCL → Nano Pin A5
Setzen Sie den Arduino Nano auf das Steckbrett. Verbinden Sie die 5-V-Ausgangs- und GND-Pins des Nano mit beiden Stromschienen.
Schritt 4: Arduino-Code
Frequenzskalierung einstellen
Zunächst wird die Frequenzskalierung über S0 und S1 festgelegt. Wir wählen 100 % (beide HIGH):
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
Farbkanäle auslesen
Über S2 und S3 wird der auszulesende Farbkanal gewählt (Photodioden sind parallel geschaltet):
// Rot auslesen
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
red = pulseIn(outPin, LOW);
// Grün auslesen
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
grn = pulseIn(outPin, LOW);
// Blau auslesen
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
blu = pulseIn(outPin, LOW);
Im finalen Code werden mehrere Messungen pro Kanal gemittelt, um Ausreißer zu reduzieren.
Farbklassifizierung
Nach dem Auslesen der drei RGB-Komponenten wird die Farbe durch vorherige Kalibrierung bestimmt. Mit bekannten Farbvorlagen werden die Schwellenwerte ermittelt. Beispiel für eine Kalibrierung:
void getColor() {
readRGB();
if (red > 8 && red < 18 && grn > 9 && grn < 19 && blu > 8 && blu < 16)
color = "WEISS";
else if (red > 80 && red < 125 && grn > 90 && grn < 125 && blu > 80 && blu < 125)
color = "SCHWARZ";
else if (red > 12 && red < 30 && grn > 40 && grn < 70 && blu > 33 && blu < 70)
color = "ROT";
else if (red > 50 && red < 95 && grn > 35 && grn < 70 && blu > 45 && blu < 85)
color = "GRUEN";
else if (red > 10 && red < 20 && grn > 10 && grn < 25 && blu > 20 && blu < 38)
color = "GELB";
else if (red > 65 && red < 125 && grn > 65 && grn < 115 && blu > 32 && blu < 65)
color = "BLAU";
else
color = "KEINE_FARBE";
}
Hier sind sechs Farben vordefiniert: Weiß, Schwarz, Rot, Grün, Gelb, Blau. Bei abnehmendem Umgebungslicht verschieben sich die Werte tendenziell nach oben.
In der loop() wird das LCD alle 1 Sekunde aktualisiert. Der vollständige Code ist auf GitHub verfügbar.
Schritt 5: Fazit
Ich hoffe, dieses Projekt hilft anderen, den Einstieg in die spannende Welt der Elektronik, Robotik und IoT zu finden!
- GitHub (aktuelle Dateien): Color Detector
- Blog mit weiteren Projekten: MJRoBot.org
Grüße vom anderen Ende der Welt!
Bis zum nächsten Tutorial!
Marcelo
Code-Schnipsel
RGB-Auslesung
digitalWrite(s2, LOW); digitalWrite(s3, LOW);
red = pulseIn(outPin, LOW); // Rot-Komponente
digitalWrite(s2, HIGH); digitalWrite(s3, HIGH);
grn = pulseIn(outPin, LOW); // Grün-Komponente
digitalWrite(s2, LOW); digitalWrite(s3, HIGH);
blu = pulseIn(outPin, LOW); // Blau-Komponente
Farbentscheidung
void getColor() {
readRGB();
if (red > 8 && red < 18 && grn > 9 && grn < 19 && blu > 8 && blu < 16)
color = "WEISS";
else if (red > 80 && red < 125 && grn > 90 && grn < 125 && blu > 80 && blu < 125)
color = "SCHWARZ";
else if (red > 12 && red < 30 && grn > 40 && grn < 70 && blu > 33 && blu < 70)
color = "ROT";
else if (red > 50 && red < 95 && grn > 35 && grn < 70 && blu > 45 && blu < 85)
color = "GRUEN";
else if (red > 10 && red < 20 && grn > 10 && grn < 25 && blu > 20 && blu < 38)
color = "GELB";
else if (red > 65 && red < 125 && grn > 65 && grn < 115 && blu > 32 && blu < 65)
color = "BLAU";
else
color = "KEINE_FARBE";
}
Schaltplan
Fritzing-Datei: Color Detector.fzz
Herstellungsprozess
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- Klassisches Pong-Spiel auf Arduino UNO mit OLED-Display bauen – Schritt-für-Schritt-Tutorial
- Arduino Audio-Frequenz-Detektor – Lauteste Schallpeaks mit hochsensiblem Modul messen
- Selbstbau-Tamagotchi: Digitales Haustier mit Arduino
- Intelligenter kabelloser Lichtschalter-Controller: Arduino-basierter Fernschalter-Manipulator
- Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
- Intelligente, bewegungsaktivierte Wasserpistole mit Arduino Nano
- Zuverlässigen Arduino-Countdown-Timer mit SparkFun 7-Segment-Display bauen
- Arduino RGB-LED-Farbmischer – Einsteigerfreundliches DIY-Projekt
- Arduino-Sonnenblume: Elektronischer Sonnen-Tracker selbst bauen