Arduino Nano - TCS3200D/TCS230 Farbsensor

Dieser umfassende Leitfaden zeigt Ihnen, wie Sie den TCS3200D/TCS230 Farbsensor mit Arduino Nano für präzise Farbmessung und RGB-Wertextraktion verbinden. Beherrschen Sie Kalibrierungsverfahren und entwickeln Sie Farberkennungsfähigkeiten in Ihren Projekten.

Lernziele:

Arduino Nano mit TCS3200D TCS230 Farberkennungssensor Modul Tutorial

Benötigte Hardware

1×Official Arduino Nano
1×Alternativ: DIYables ATMEGA328P Nano Development Board
1×USB A zu Mini-B USB-Kabel
1×TCS3200D/TCS230 Farberkennungssensor Modul
1×Breadboard (Steckplatine)
1×Jumper-Kabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano

Oder Sie können die folgenden Kits kaufen:

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 Sensor verwendet eine Photodioden-Matrix in einem 8×8 Raster für Farberkennung durch optische Filterung. Innerhalb dieser 64-Element-Anordnung verfügen 16 Photodioden über rote Spektralfilter, weitere 16 verwenden grüne Filter, 16 nutzen blaue Filter und die verbleibenden 16 arbeiten ohne Filter (klare Antwort). Die Farbmessung erfolgt durch Aktivierung spezifischer Filtersätze und Analyse des resultierenden frequenzmodulierten Rechteckwellen-Ausgangs.

Integrierte weiße LED-Arrays auf typischen Modulen liefern konstante Beleuchtung an Ziele und erhalten die Lesestabilität unabhängig von externen Beleuchtungsschwankungen bei und verbessern die Leistung in schwach beleuchteten Umgebungen.

Pinout

Verfügbare Verbindungen am TCS3200D/TCS230 Sensorboard:

  • VCC-Pin: Versorgungsspannungseingang (+5V).
  • GND-Pin: Masse-Referenz (0V).
  • S0, S1 Pins: Ausgangsfrequenz-Skalierungsselektoren.
  • S2, S3 Pins: Farbkanal-Filterselektoren.
  • OUT-Pin: Frequenzmodulierter Rechteckwellen-Ausgang.
  • OE-Pin: Output Enable Eingang (aktiviert bei LOW). Standard-Module verbinden dies normalerweise intern fest mit GND. Falls nicht verbunden, manuell mit GND verdrahten.
TCS3200 TCS230 Farbsensor Modul Pinout-Diagramm zeigt VCC GND S0 S1 S2 S3 OUT Pins

Funktionsweise

Zwei kritische Einstellungen steuern das Sensorverhalten: welcher Farbkanal aktiviert wird und welche Ausgangssignalstärke erzeugt wird. Zwei Paare von Steuereingängen verwalten diese Funktionen:

Frequenzskalierung (S0 und S1 Pins):

  • S0=LOW, S1=LOW: Power-Down-Zustand
  • S0=LOW, S1=HIGH: 2% Skalierungsfaktor
  • S0=HIGH, S1=LOW: 20% Skalierungsfaktor
  • S0=HIGH, S1=HIGH: 100% Skalierungsfaktor (volle Geschwindigkeit)

Farbkanalauswahl (S2 und S3 Pins):

  • S2=LOW, S3=LOW: Rote Photodioden aktiv
  • S2=LOW, S3=HIGH: Blaue Photodioden aktiv
  • S2=HIGH, S3=LOW: Klare Photodioden aktiv (keine Filterung)
  • S2=HIGH, S3=HIGH: Grüne Photodioden aktiv

Der OUT-Pin liefert Rechteckwellen-Frequenzen im Bereich von etwa 2 Hz bis 500 kHz. Die Frequenz steigt mit der Lichtintensität—hellere Beleuchtung erzeugt höhere Frequenzausgabe. Die pulseIn() Funktion misst die Pulsdauer, die umgekehrt korreliert—kürzere Dauern zeigen stärkeres Licht an. Kalibrierte Messungen werden in das konventionelle 0-255 RGB-Format übersetzt.

Optimale Präzision erreichen

  • Halten Sie den Sensor 1-3 cm vom Messziel entfernt mit stabiler Winkelausrichtung.
  • Nutzen Sie die integrierte weiße LED-Beleuchtung für wiederholbare Beleuchtung.
  • Schirmen Sie den Sensor vor variablem Umgebungslicht ab, um die Messkonsistenz zu verbessern.

Schaltplan

TCS3200 Farbsensor zu Arduino Nano Verkabelungskonfiguration:

TCS3200 FarbsensorArduino Nano
VCC5V
GNDGND
S0D4
S1D3
S2D6
S3D5
OUTD7
Arduino Nano und TCS3200 Farbsensor Schaltplan zeigt Verbindungen zwischen Pins

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

Siehe Der beste Weg, den Arduino Nano und andere Komponenten mit Strom zu versorgen.

Arduino Nano Code - Pulsbreiten-Kalibrierung

Die Kalibrierung eliminiert Umweltinterferenzen aus Rohmessungen. Variablen wie LED-Ausgangsstärke, Zielabstand, Materialreflektivität und Raumbeleuchtung beeinflussen alle Messwerte. Betrachten Sie diese als systematische Fehler, die gemessen werden müssen. Die Kalibrierungsroutine identifiziert minimale und maximale Pulsbreiten über alle Farbkanäle und etabliert Referenzgrenzen für die Umwandlung von Rohdaten in genaue 0–255 RGB-Werte, die zu Ihrer Einsatzumgebung passen.

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-tcs3200d-tcs230-color-sensor */ // Define color sensor pins #define PIN_S0 4 #define PIN_S1 3 #define PIN_S2 6 #define PIN_S3 5 #define PIN_sensorOut 7 // 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

  • Laden Sie den Kalibrierungssketch in die Arduino IDE
  • Verbinden Sie Arduino Nano über USB und laden Sie mit dem Upload-Button hoch
  • Öffnen Sie den Serial Monitor zur Beobachtung der Echtzeit Min/Max-Verfolgung
  • Setzen Sie den Sensor verschiedenen Oberflächen aus: weiße Materialien (Druckerpapier), schwarze Objekte plus mehrfarbige Gegenstände
  • Beobachten Sie, wie sich Min/Max-Grenzen automatisch aktualisieren, wenn Extreme erkannt werden
  • Sobald sich die Werte stabilisieren (normalerweise 10-20 Sekunden), dokumentieren Sie alle sechs Kalibrierungsparameter
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-Kalibrierungsparameter aus obiger Ausgabe extrahiert:

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

Arduino Nano Code - RGB-Wert-Messung

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-tcs3200d-tcs230-color-sensor */ // Define color sensor pins #define PIN_S0 4 #define PIN_S1 3 #define PIN_S2 6 #define PIN_S3 5 #define PIN_sensorOut 7 // 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

  • Identifizieren Sie Kalibrierungsvariablen am Code-Anfang:
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 Null-Platzhalter mit gemessenen Kalibrierungsdaten. Beispiel mit Werten 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;
  • Übertragen Sie den aktualisierten Code auf Arduino Nano
  • Platzieren Sie eine Farbprobe vor dem Sensor
  • Überprüfen Sie die RGB-Ausgabe über den 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 angezeigten RGB-Werte entsprechen der Standard-0-255-Skalierung. Reduzierte Pulsbreiten (die hellere Reflexionen anzeigen) erzeugen höhere RGB-Ausgaben; erweiterte Pulsbreiten (schwächere Reflexionen) ergeben niedrigere Werte.

Projektanwendungen

Mit operativer RGB-Messfähigkeit können Sie entwickeln:

  • Chromatisches Sortiersystem: Objekte nach Farbe kategorisieren (Rot/Grün/Blau-Unterscheidung)
  • Farbverifikationsgerät: Farbkonsistenz zwischen Proben bestätigen
  • Farblinien-Folger: Roboter, die entlang chromatischer Markierungen navigieren
  • Visuelle Qualitätsinspektion: Produktionsdefekte via Farbanalyse erkennen
  • Farbgesteuerte Automatisierung: Aktionen ausführen, wenn spezifische Farbtöne erkannt werden

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!