ESP32 - TCS3200D/TCS230 Farbsensor

Diese Anleitung führt Sie durch die Verbindung eines TCS3200D/TCS230 Farbsensors mit dem ESP32 für präzise RGB-Farberkennung und -messung. Lernen Sie, wie Sie den Sensor kalibrieren und den ESP32 programmieren, um Farbwerte von Objekten zu lesen.

Was Sie lernen werden:

ESP32 mit TCS3200D TCS230 Farberkennungssensor Modul Tutorial

Hardware benötigt

1×ESP32 ESP-WROOM-32 Entwicklungsmodul
1×(Alternativ) ESP32 Uno-form board
1×(Alternativ) ESP32 S3 Uno-form board
1×USB Kabel Type-C
1×TCS3200D/TCS230 Farberkennungssensor Modul
1×Breadboard
1×Jumper Kabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
1×(Empfohlen) Breakout Expansion Board for ESP32
1×(Empfohlen) Stromverteiler für ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 Starter-Kit (ESP32 enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über den TCS3200D/TCS230 Farbsensor

Der TCS3200D/TCS230 verwendet eine 64-Photodioden-Matrix in einer 8×8-Konfiguration für die Farbidentifikation. Diese Anordnung besteht aus 16 Photodioden mit roten optischen Filtern, 16 mit grünen Filtern, 16 mit blauen Filtern und 16 ohne Filter (klar). Der Sensor arbeitet, indem er bestimmte Filtertypen auswählt und die erkannte Lichtintensität in ein frequenzmoduliertes Rechtecksignal umwandelt.

Die meisten Sensormodule verfügen über integrierte weiße LED-Beleuchtung, die eine konsistente Messung gewährleistet, indem sie eine kontrollierte Lichtquelle unabhängig von Umgebungsbedingungen bereitstellt.

Pinout

Das TCS3200D/TCS230 Sensormodul bietet diese Anschlusspunkte:

  • VCC-Pin: An 3,3V oder 5V Spannungsversorgung anschließen.
  • GND-Pin: An Masse (0V) anschließen.
  • S0, S1-Pins: Steuerung der Ausgangsfrequenzskalierung.
  • S2, S3-Pins: Farbfilterauswahl.
  • OUT-Pin: Rechteck-Frequenzausgangssignal.
  • OE-Pin: Output Enable (aktiv LOW). Typischerweise bei kommerziellen Modulen bereits mit GND verbunden. Falls verfügbar, mit GND verbinden.
TCS3200 TCS230 Farbsensor Modul Pinout Diagramm mit VCC GND S0 S1 S2 S3 OUT Pins

Funktionsweise

Der Sensorbetrieb hängt von zwei konfigurierbaren Parametern ab: aktiver Farbfilter und Ausgangssignalstärke. Zwei Steuerpin-Paare bestimmen diese Einstellungen:

S0/S1-Pins konfigurieren die Ausgangsfrequenzskalierung:

  • S0=LOW, S1=LOW: Sensor ausgeschaltet
  • S0=LOW, S1=HIGH: Ausgang bei 2% der Grundfrequenz
  • S0=HIGH, S1=LOW: Ausgang bei 20% der Grundfrequenz
  • S0=HIGH, S1=HIGH: Ausgang bei 100% der Grundfrequenz

S2/S3-Pins wählen den aktiven Farbfilter:

  • S2=LOW, S3=LOW: Rotfilter aktiviert
  • S2=LOW, S3=HIGH: Blaufilter aktiviert
  • S2=HIGH, S3=LOW: Kein Filter (klar/ungefiltert)
  • S2=HIGH, S3=HIGH: Grünfilter aktiviert

Der OUT-Pin erzeugt eine Frequenzausgabe zwischen etwa 2 Hz und 500 kHz. Die Frequenzgröße korreliert mit der Lichtintensität—mehr Licht führt zu höherer Frequenz. Die Verwendung von pulseIn() zur Messung der Pulsdauer ergibt das Gegenteil—niedrigere Pulsbreite zeigt hellere Beleuchtung an. Nach der Kalibrierung werden diese Messungen in Standard-RGB-Werte von 0-255 umgewandelt.

Optimierung der Messstabilität

  • Positionieren Sie den Sensor 1-3 cm von der Zieloberfläche mit konstanter Ausrichtung.
  • Aktivieren Sie die eingebauten weißen LEDs für standardisierte Beleuchtung.
  • Blockieren Sie externe Lichtquellen, um Messvariabilität zu reduzieren.

Schaltplan

ESP32 zu TCS3200 Farbsensor Verbindungslayout:

TCS3200 FarbsensorESP32
VCC3.3V
GNDGND
S0GPIO 17
S1GPIO 16
S2GPIO 18
S3GPIO 5
OUTGPIO 19
ESP32 und TCS3200 Farbsensor Schaltplan zeigt Verbindung zwischen Pins

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.

ESP32 Code - Sensorkalibrierung über Pulsbreite

Die Kalibrierung kompensiert Umweltvariablen, die die rohen Sensormessungen beeinflussen: LED-Helligkeitsschwankungen, Objektentfernung, Oberflächenreflektivitätsunterschiede und Umgebungslichtverhältnisse. Diese Faktoren führen zu Messfehlern, die quantifiziert werden müssen. Der Kalibrierungsprozess zeichnet minimale und maximale Pulsbreiten für jeden Farbkanal auf und erstellt Grenzen für eine präzise 0–255 RGB-Zuordnung in Ihrer spezifischen Umgebung.

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-tcs3200d-tcs230-color-sensor */ // Define color sensor pins #define PIN_S0 17 // The ESP32 pin connected to the S0 of the color module #define PIN_S1 16 // The ESP32 pin connected to the S1 of the color module #define PIN_S2 18 // The ESP32 pin connected to the S2 of the color module #define PIN_S3 5 // The ESP32 pin connected to the S3 of the color module #define PIN_sensorOut 19 // The ESP32 pin connected to the OUT of the color module // Variables for Color Pulse Width Measurements int redPW = 0; int greenPW = 0; int bluePW = 0; // Variables to track min and max pulse widths for calibration int redMin = 10000, redMax = 0; int greenMin = 10000, greenMax = 0; int blueMin = 10000, blueMax = 0; void setup() { // Set S0 - S3 as outputs pinMode(PIN_S0, OUTPUT); pinMode(PIN_S1, OUTPUT); pinMode(PIN_S2, OUTPUT); pinMode(PIN_S3, OUTPUT); // Set Pulse Width scaling to 20% digitalWrite(PIN_S0, HIGH); digitalWrite(PIN_S1, LOW); // Set Sensor output as input pinMode(PIN_sensorOut, INPUT); // Setup Serial Monitor Serial.begin(9600); Serial.println("=== TCS3200 Calibration ==="); Serial.println("Point the sensor at different objects (white, black, colors)."); Serial.println("Min and Max values are tracked automatically."); Serial.println("When values look stable, note them down for the next code."); Serial.println("------------------------------------------"); } void loop() { // Read Red Pulse Width redPW = getRedPW(); // Delay to stabilize sensor delay(200); // Read Green Pulse Width greenPW = getGreenPW(); // Delay to stabilize sensor delay(200); // Read Blue Pulse Width bluePW = getBluePW(); // Delay to stabilize sensor delay(200); // Update min and max values if (redPW < redMin) redMin = redPW; if (redPW > redMax) redMax = redPW; if (greenPW < greenMin) greenMin = greenPW; if (greenPW > greenMax) greenMax = greenPW; if (bluePW < blueMin) blueMin = bluePW; if (bluePW > blueMax) blueMax = bluePW; // Print the pulse width values with min/max Serial.print("Red PW = "); Serial.print(redPW); Serial.print(" - Green PW = "); Serial.print(greenPW); Serial.print(" - Blue PW = "); Serial.println(bluePW); Serial.print(" Min -> R:"); Serial.print(redMin); Serial.print(" G:"); Serial.print(greenMin); Serial.print(" B:"); Serial.println(blueMin); Serial.print(" Max -> R:"); Serial.print(redMax); Serial.print(" G:"); Serial.print(greenMax); Serial.print(" B:"); Serial.println(blueMax); Serial.println("------------------------------------------"); delay(1000); } // Function to read Red Pulse Widths int getRedPW() { // Set sensor to read Red only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, LOW); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Green Pulse Widths int getGreenPW() { // Set sensor to read Green only digitalWrite(PIN_S2, HIGH); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Blue Pulse Widths int getBluePW() { // Set sensor to read Blue only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; }

Schnelle Schritte

  • Falls Sie ESP32 zum ersten Mal verwenden, siehe Einrichtung der Umgebung für ESP32 in Arduino IDE.
  • Kopieren Sie den Kalibrierungscode in die Arduino IDE
  • Klicken Sie auf den Upload Button in der Arduino IDE, um den Code auf den ESP32 zu laden
  • Öffnen Sie den Serial Monitor (Baudrate auf 9600 einstellen)
  • Richten Sie den Sensor auf verschiedene farbige Objekte: weißes Papier, schwarze Oberfläche und verschiedene Farben
  • Beobachten Sie die Min/Max-Werte, während sie sich automatisch aktualisieren
  • Nachdem sich die Werte stabilisiert haben (10-20 Sekunden), notieren Sie sich alle sechs Kalibrierungsnummern
COM6
Send
=== TCS3200 Calibration === Point the sensor at different objects (white, black, colors). Min and Max values are tracked automatically. When values look stable, note them down for the next code. ------------------------------------------ Red PW = 42 - Green PW = 55 - Blue PW = 60 Min -> R:42 G:55 B:60 Max -> R:42 G:55 B:60 ------------------------------------------ Red PW = 210 - Green PW = 185 - Blue PW = 172 Min -> R:42 G:55 B:60 Max -> R:210 G:185 B:172 ------------------------------------------ Red PW = 44 - Green PW = 57 - Blue PW = 61 Min -> R:42 G:55 B:60 Max -> R:210 G:185 B:172 ------------------------------------------
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Beispiel-Kalibrierungsergebnisse aus der Ausgabe:

  • RedMin = 42, redMax = 210
  • GreenMin = 55, greenMax = 185
  • BlueMin = 60, blueMax = 172

ESP32 Code - RGB-Farbwerte lesen

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-tcs3200d-tcs230-color-sensor */ // Define color sensor pins #define PIN_S0 17 // The ESP32 pin connected to the S0 of the color module #define PIN_S1 16 // The ESP32 pin connected to the S1 of the color module #define PIN_S2 18 // The ESP32 pin connected to the S2 of the color module #define PIN_S3 5 // The ESP32 pin connected to the S3 of the color module #define PIN_sensorOut 19 // The ESP32 pin connected to the OUT of the color module // Calibration Values // Replace these values with your actual calibration data from the previous step int redMin = 0; // Red minimum pulse width int redMax = 0; // Red maximum pulse width int greenMin = 0; // Green minimum pulse width int greenMax = 0; // Green maximum pulse width int blueMin = 0; // Blue minimum pulse width int blueMax = 0; // Blue maximum pulse width // Variables for Color Pulse Width Measurements int redPW = 0; int greenPW = 0; int bluePW = 0; // Variables for final Color values int redValue; int greenValue; int blueValue; void setup() { // Set S0 - S3 as outputs pinMode(PIN_S0, OUTPUT); pinMode(PIN_S1, OUTPUT); pinMode(PIN_S2, OUTPUT); pinMode(PIN_S3, OUTPUT); // Set Pulse Width scaling to 20% digitalWrite(PIN_S0, HIGH); digitalWrite(PIN_S1, LOW); // Set Sensor output as input pinMode(PIN_sensorOut, INPUT); // Setup Serial Monitor Serial.begin(9600); } void loop() { // Read Red value redPW = getRedPW(); // Map to value from 0-255 redValue = map(redPW, redMin, redMax, 255, 0); // Delay to stabilize sensor delay(200); // Read Green value greenPW = getGreenPW(); // Map to value from 0-255 greenValue = map(greenPW, greenMin, greenMax, 255, 0); // Delay to stabilize sensor delay(200); // Read Blue value bluePW = getBluePW(); // Map to value from 0-255 blueValue = map(bluePW, blueMin, blueMax, 255, 0); // Delay to stabilize sensor delay(200); // Print output to Serial Monitor Serial.print("Red = "); Serial.print(redValue); Serial.print(" - Green = "); Serial.print(greenValue); Serial.print(" - Blue = "); Serial.println(blueValue); } // Function to read Red Pulse Widths int getRedPW() { // Set sensor to read Red only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, LOW); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Green Pulse Widths int getGreenPW() { // Set sensor to read Green only digitalWrite(PIN_S2, HIGH); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Blue Pulse Widths int getBluePW() { // Set sensor to read Blue only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; }

Schnelle Schritte

  • Finden Sie die Kalibrierungskonstanten am Anfang des Codes:
int redMin = 0; // Red minimum pulse width int redMax = 0; // Red maximum pulse width int greenMin = 0; // Green minimum pulse width int greenMax = 0; // Green maximum pulse width int blueMin = 0; // Blue minimum pulse width int blueMax = 0; // Blue maximum pulse width
  • Ersetzen Sie alle sechs Nullen mit Ihren tatsächlichen Kalibrierungswerten. Zum Beispiel (mit redMin = 42, redMax = 210, greenMin = 55, greenMax = 185, blueMin = 60, blueMax = 172):
int redMin = 42; int redMax = 210; int greenMin = 55; int greenMax = 185; int blueMin = 60; int blueMax = 172;
  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE
  • Klicken Sie auf den Upload Button in der Arduino IDE, um den Code auf den ESP32 zu laden
  • Platzieren Sie ein farbiges Objekt vor dem Sensor
  • Sehen Sie das Ergebnis im Serial Monitor
COM6
Send
Red = 210 - Green = 35 - Blue = 20 Red = 25 - Green = 200 - Blue = 40 Red = 30 - Green = 45 - Blue = 215
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Die Ausgabe zeigt jetzt Standard-RGB-Werte von 0-255. Kürzere Pulsbreiten (hellere Beleuchtung) ergeben höhere RGB-Zahlen; längere Pulsbreiten (dunklere Bedingungen) erzeugen niedrigere Werte.

Projektanwendungen

Mit funktionaler RGB-Lesefähigkeit können Sie diese Projektmöglichkeiten erkunden:

  • Automatisierte Farbsortierung: Kategorisierung von Gegenständen nach Farbton (Rot-, Grün-, Blauidentifikation)
  • Farbvergleichssystem: Farbübereinstimmung zwischen Objekten überprüfen
  • Chromatische Linienverfolgung: Roboter bauen, die farbigen Pfaden folgen
  • Fertigungsqualitätskontrolle: Defekte Einheiten durch Farbabweichung identifizieren
  • Farbgesteuerte Reaktion: Summer oder Indikatoren bei Erkennung bestimmter Farben aktivieren

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Verwandte Tutorials

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!