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

Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen

Komponenten und Materialien

Komponente Anzahl Hinweis
Arduino UNO 1
RGB Diffused Common Anode 1 Common Cathode oder Anode – nutzt was ihr habt
Fotowiderstand (LDR / CdS Cell) 1
Adafruit Standard LCD 16×2 Weiß auf Blau 1 Alles, was mit LiquidCrystal-Library funktioniert
Widerstand 10 kOhm 2 Für Taster & CdS-Zelle
Widerstand 100 Ohm 3 150 Ohm für Rot, 2×100 Ohm für Grün/Blau der RGB-LED
SparkFun Taster 12 mm 1
Jumper-Kabel (Standard) 1
Steckbrett (Standard) 1

Apps und Onlinedienste

Über dieses Projekt

Dies ist eine vereinfachte Version des vollständigen Artikels, damit der Nachbau leicht gelingt. Details im Blog. Rechts im Menü die Abschnitte, oder Code auf GitHub herunterladen. Erst Video anschauen, um zu sehen, worum es geht! :)

Projektüberblick

Ähnlich dem menschlichen Farbsehen und lichtbasiert umfasst das RGB-Modell über 16 Millionen Farben, angeordnet in einem 3D-Raum, wo ganzzahlige R-, G-, B-Werte (0–255) Koordinaten bilden. Farberkennung erfolgt mit lichtbezogenen Bauteilen und Machine Learning: Kombination aus RGB-LED und CdS-Zelle (Lichtsensor/LDR), beide vom Umgebungslicht isoliert. LED strahlt nacheinander Rot, Grün, Blau aus, CdS-Zelle misst reflektierte Intensität – so entsteht ein RGB-Muster des Objekts.

Multi-Layer Perceptron (MLP)

MLP ist eine Feedforward-Architektur künstlicher neuronaler Netze: Eingabelayer (nicht-neural), Hidden Layer(s), Ausgabelayer. Training per Backpropagation (überwachtes Lernen).

Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen

Für diesen Farbsensor: Netzwerk erhält 3 Eingänge (RGB), einen Hidden Layer mit 6 Neuronen und Ausgabelayer mit 10 Neuronen (10 Farben = 10 Klassen, binärer Output). Netz ist bereits trainiert und erkennt Farben. Trainingsdetails & Datensatz im Blog.

Farberkennung

Trainiertes MLP klassifiziert räumlich trennbare Muster – ideal hier. Beim Training bildet das Netz Hyperplanes im RGB-Raum (siehe Abb.), jede isolierte Region = eine Farbe. Neues RGB-Muster (3D-Punkt) fällt in Region → Klassenentscheidung.

Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen
Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen

Für gute Generalisierung muss Trainingsset (Farb-Beispiele mit Soll-Output aus dem 3D-Raum) präsentiert werden. Datensatz auf GitHub. Wer selbst trainieren will: Playground im Blog nutzen. Sonst zu Implementierungsdetails springen.

Generalisierung gilt nur im Domain-Bereich des Trainingsets – Min/Max-Werte jedes Farbkanals beachten! Muster außerhalb → unvorhersehbare Ausgabe.

Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen

Datensatz: 75 Instanzen, Werte 0–1 (ursprünglich 0–255, durch 255 geteilt). Wichtig: Nur ein Output-Neuron = 1, Rest = 0. Trainiertes Netz liefert Floats → Post-Processing:

Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen

Praktisch: Neuron mit größtem Output → 1, Rest → 0.

Elektronische Schaltung

Detektion passiert in der Schaltung, berechnet auf Atmega328 (Arduino). Verdrahtung siehe Schaltplan.

Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen
Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen

Code nutzt Common Anode RGB-LED. Prüfen, ob eure LED auch Common Anode ist, sonst Logik im Code invertieren!

Wichtig: Ich nutze nur einen Vorwiderstand an der Common Anode (Mittelwert der eigentlichen Kathoden-Widerstände) – „faul“, aber Muster werden nicht verzerrt, nur Farbwerte verschoben. Besser: korrekte Widerstände an jeder Kathode für Farbtreue.

RGB-LED und CdS-Zelle liegen benachbart – müssen vom Umgebungslicht isoliert sein (alter Schwarzfilm-Dosen ideal). Kalibrierung (s. Programmierung) und Erkennung brauchen das. Video anschauen für Isolierung!

Farbtheorie

Keine Linsen → nur undurchsichtige, matte Objekte nutzen, Spiegelung (Glanz) vermeiden. Diffuse Reflexion ist Schlüssel.

Licht (bestimmte Farbe) trifft Objekt → Reflexion laut Farbzusammensetzung. Rotlicht auf Gelb → stark reflektiert (Gelb = Rot+Grün). Blaulicht auf Gelb → schwach reflektiert (wenig Blau).

Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen

Additives Farbsystem: Weiß = alle Farben, Schwarz = keine. CdS-Zelle misst Max/Min-Reflexion je LED-Farbe → Kalibrierung möglich. Goldener Tipp: Nach Kalibrierung Komponenten (besonders auf Steckbrett) und Isolierstück NICHT mehr bewegen/berühren – sonst Drift/Outlier.

Programmierung

Kalibrierung & Erkennung: 3 Iterationen pro Messung (Rot, Grün, Blau). Je Iteration: LED-Farbe an, auf CdS-Stabilisierung warten, Analogwert lesen, Reflexion speichern. Farbtheorie-Bild visualisiert den Prozess.

Kalibrierung: Iterationsprozess 2× – einmal für Schwarz, einmal für Weiß. Erfasst Min/Max-Reflexion (nah 0 bis nah 1024) → Reskalierung auf [0,255] (Info) und [0,1] (Netzwerk-Input).

Wartezeit für Lichtsensor-Stabilisierung variiert pro Bauteil → großzügigen Delay wählen (ich: 500 ms), dann reduzieren bis Grenze instabilen Verhaltens.

Erkennung: Gemessene RGB (0–1) → MLP → Farberkennung. MLP auf Arduino via Neurona – Library von mir für ANNs auf Arduino, per Library Manager installierbar. Details im Blogpost.

Netz ist vortrainiert, Gewichte in Code eingebettet – Neurona macht es sofort betriebsbereit.

Tests

Einige Farben aus Datensatz zum Test extrahiert:

Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen

Zahlen außerhalb = IDs, innen = Fehlklassifikationen (welche Farbe stattdessen erkannt). Auf Normalpapier (Tintenstrahl) gedruckt – opakes Material, gut für Erkennung. Video zeigt Papierquadrate.

Code

Farbsensor-Prototyp

Code im Ordner colorSensor. Schaltung laut Schaltplan aufbauen, Neurona-Library installieren (Library Manager).
https://github.com/moretticb/ColorSensor/

Schaltpläne

Taster gemäß LCD-Anweisung nutzen
Arduino-Farbsensor-Prototyp – Objektfarben erkennen & anzeigen

Herstellungsprozess

  1. Widerstand-Farbcodes – Umfassender Leitfaden zum Dekodieren von Wert, Toleranz und E-Reihen-Standards
  2. Smart Thirst Alert: DIY Pflanzen-Alarm für optimale Bewässerung
  3. Italienische Word Clock mit Arduino Nano, NeoPixel, LCD & RTC
  4. Einfachen Hindernissensor mit Arduino bauen – IR-LED & Photodiode Tutorial
  5. Zuverlässiger Sigfox-kWh-Zähler mit Arduino MKR Fox 1200
  6. Bluetooth-Temperaturmonitor mit Arduino Nano
  7. Berührungsloses Gesten-Schloss: Sicherer Zugang mit APDS-9960 & Arduino
  8. Arduino Nano Begleiter-Set – Essentielle Bauteile & Werkzeuge für DIY-Elektronik
  9. Isolierter Analogeingang für Arduino: Spannung/Strom galvanisch trennen
  10. Präziser Reaktionszeit-Test mit Arduino UNO