Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

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

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.

Objektfarben erkennen mit Arduino Nano und TCS3200-Sensor
Blockdiagramm der Hauptkomponenten

Schritt 1: Stückliste (Bill of Materials)

Die folgenden Links und Preise dienen nur als Referenz:

Schritt 2: Der TCS3200-Farbsensor

Objektfarben erkennen mit Arduino Nano und TCS3200-Sensor
TCS3200-Farbsensor-Modul

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.

Objektfarben erkennen mit Arduino Nano und TCS3200-Sensor
8×8-Array der Photodioden mit Farbfiltern

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:

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).

Objektfarben erkennen mit Arduino Nano und TCS3200-Sensor
Sensor mit Gummiring gegen Streulicht

Schritt 3: Hardware-Verdrahtung

Objektfarben erkennen mit Arduino Nano und TCS3200-Sensor
Verdrahtung von Sensor und LCD

TCS3200-Sensor an Arduino Nano:

I2C-LCD 16×2 Serielles Display:

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

Objektfarben erkennen mit Arduino Nano und TCS3200-Sensor
Ausschnitt aus dem Arduino-Sketch

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

Objektfarben erkennen mit Arduino Nano und TCS3200-Sensor
Fertiger Farbdetektor im Einsatz

Ich hoffe, dieses Projekt hilft anderen, den Einstieg in die spannende Welt der Elektronik, Robotik und IoT zu finden!

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

  1. Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
  2. Klassisches Pong-Spiel auf Arduino UNO mit OLED-Display bauen – Schritt-für-Schritt-Tutorial
  3. Arduino Audio-Frequenz-Detektor – Lauteste Schallpeaks mit hochsensiblem Modul messen
  4. Selbstbau-Tamagotchi: Digitales Haustier mit Arduino
  5. Intelligenter kabelloser Lichtschalter-Controller: Arduino-basierter Fernschalter-Manipulator
  6. Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
  7. Intelligente, bewegungsaktivierte Wasserpistole mit Arduino Nano
  8. Zuverlässigen Arduino-Countdown-Timer mit SparkFun 7-Segment-Display bauen
  9. Arduino RGB-LED-Farbmischer – Einsteigerfreundliches DIY-Projekt
  10. Arduino-Sonnenblume: Elektronischer Sonnen-Tracker selbst bauen