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

Farbsensor-Prototyp:Farbnamen von Objekten erkennen

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
RGB diffundierte gemeinsame Anode
Gemeinsame Kathode oder Anode... verwenden Sie, was Sie haben
× 1
Fotowiderstand
× 1
Adafruit Standard LCD - 16x2 Weiß auf Blau
Alles, was mit der LiquidCrystal Arduino-Bibliothek verwendet werden kann
× 1
Widerstand 10k Ohm
Für Tastschalter und CdS-Zelle
× 2
Widerstand 100 Ohm
150 Ohm für roten Pin und 2x 100 Ohm für grüne und blaue Pins der RGB-LED
× 3
SparkFun Drucktastenschalter 12 mm
× 1
Jumper (generisch)
× 1
Breadboard (generisch)
× 1

Apps und Onlinedienste

MLP Topology Workbench
Tool zum Umtrainieren neuronaler Netze für die Verwendung mit der Neurona-Bibliothek in Arduino.

Über dieses Projekt

Dies ist der Einfachheit halber eine vereinfachte Version des vollständigen Artikels, damit die Reproduktion dieses Projekts problemlos erfolgen kann. Überprüfen Sie auch dieses Projekt in meinem Blog für weitere Implementierungsdetails.

Dieser Artikel ist in die Abschnitte unterteilt, die im Menü auf der rechten Seite aufgeführt sind. Wenn Sie zu technischen Details springen möchten, überprüfen Sie das Inhaltsverzeichnis rechts oder laden Sie den Code aus dem GitHub-Repository herunter. Bevor Sie mit dem Lesen fortfahren, sehen Sie sich das Projektvideo an, um zu sehen, worum es bei diesem Projekt wirklich geht :)

Projektübersicht

Ähnlich dem Farbsehen des menschlichen Auges, aber auch lichtbasiert, umfasst das RGB-Modell mehr als 16 Millionen Farben , die in einem 3D-Raum angeordnet sind , wobei ganzzahlige Werte der Komponenten R (Rot), G (Grün) und B (Blau) im Bereich von 0 bis 255 Koordinaten dieses Raums darstellen. Ausgehend von diesem Modell wurden Farberkennung und -erkennung mit lichtbezogenen elektronischen Komponenten und maschinellen Lernmechanismen . durchgeführt; es ist im Wesentlichen die Kombination aus einer RGB-LED und einer CdS-Zelle (Lichtsensor oder LDR), beide isoliert vom Umgebungslicht . Diese Komponenten emittieren bzw. erfassen die Intensität jedes Lichts (Rot, Grün und Blau), das von einem Objekt einer bestimmten Farbe reflektiert wurde.

Mehrschichtiges Perzeptron

Multi-Layer Perceptron (MLP) ist eine Feedforward-Architektur künstlicher neuronaler Netze mit einer Eingabeschicht (nicht neuronalen), versteckten Schichten und einer Ausgabeschicht. Dieses Netzwerk wird durch einen Backpropagation-Algorithmus trainiert und führt überwachtes Lernen durch (Lernen anhand von Beispielen).

Für diesen Farbsensor empfängt das oben dargestellte neuronale Netzwerk 3 Eingaben (RGB-Werte) , mit einer versteckten Schicht mit 6 Neuronen und eine Ausgabeschicht mit 10 Neuronen - Nur zur Erinnerung:Die Ausgabeschicht muss die gleiche Anzahl von Klassen (in diesem Fall Farben) für eine binarisierte Ausgabe haben. Für dieses Tutorial ist das Netzwerk bereits trainiert und in der Lage, Farben zu erkennen :). Weitere Details zu Trainingsschritten und dem dafür verwendeten Beispiel-Dataset finden Sie im vollständigen Beitrag in meinem Blog.

Farberkennung

Diese Aufgabe kann mit unserem geschulten MLP-Netzwerk durchgeführt werden. Es ermöglicht die Klassifizierung und Erkennung von räumlich trennbaren Mustern - in diesem Fall sehr nützlich. Während seines Trainingsschritts hat das Netzwerk Regionen im unten dargestellten RGB-Farbraum abgebildet, sodass jede Region, die durch Hyperebenen isoliert ist, eine Farbe darstellt . Daher fällt jedes neue RGB-Farbmuster (dargestellt als 3D-Punkt) in einen bestimmten Bereich und wird als seine jeweilige Farbe klassifiziert.

Um eine Generalisierung mit einem MLP für eine gute Erkennung von RGB-Mustern zu erhalten, muss dem Netzwerk für den Trainingsschritt ein Trainingssatz (Beispiele von Farben mit der gewünschten Ausgabe aus dem oben dargestellten 3D-Raum) präsentiert werden. Das in diesem Projekt verwendete Trainingsset ist auf dem GitHub des Projekts verfügbar Repository. Wenn Sie sich für neuronale Netze interessieren, lesen Sie diesen Abschnitt weiter und sehen Sie sich diesen von mir entwickelten Playground an, damit Sie den Datensatz verwenden können, um das Netzwerk selbst zu trainieren und im Code zu verwenden :). Andernfalls zu den Implementierungsdetails springen .

Die Generalisierung findet in der Domäne statt, die das Trainingsset umfasst, daher es lohnt sich, auf die Min- und Max-Werte zu achten jeder Komponente des Raumes! Füttern Sie das Netzwerk nicht mit Mustern außerhalb dieser Domäne, andernfalls wird erwartet, dass die Ausgabe nicht richtig funktioniert.

Der Datensatz (alle Beispiele) enthält 75 Instanzen von Farbmustern im Bereich von 0 bis 1. Ursprünglich im Bereich von 0 bis 255, wurden diese Instanzen neu skaliert, indem einfach jeder Wert durch 255 geteilt wurde, sodass 0 <=x1, x2, x3 <=1 Wie aus dem Datensatz ersichtlich ist, ist es wichtig darauf hinzuweisen, dass nur ein Neuron auf der Ausgabeschicht 1 ausgeben muss, während die restlichen Nullen ausgeben müssen. Da ein trainiertes Netzwerk Float-Werte ausgibt, läuft die Nachbearbeitung wie folgt ab:

wobei yi die Ausgabe des i-ten Neurons ist und max(y) der größte Ausgabewert ist. In der Praxis gibt das Neuron mit der größten Ausgabe 1 als Ausgabe und die verbleibenden 0. So einfach ist das.

Elektronische Schaltung

Ausgehend von Objekten erfolgt die gesamte Erkennungsprozedur in der elektronischen Schaltung, einschließlich der Rechenaktivität, die in einem Atmega328 ausgeführt wird, der in Arduino-Boards angeschlossen ist. Überprüfen Sie die Verdrahtung anhand der folgenden Schemata.

Der Code folgt dem obigen Schema, das eine gemeinsame Anode verwendet RGB-LED. Überprüfen Sie jedoch, ob Ihre RGB-LED auch eine gemeinsame Anode ist, andernfalls invertieren Sie einfach die Logik im Code .

Ein weiteres wichtiges Detail ist, dass ich nur einen Widerstand mit der RGB-LED verwende. Da jeweils eine Farbe aufleuchtet, habe ich den Widerstand in die gemeinsame Anode gesteckt, mit einem durchschnittlichen Widerstand der Widerstände, der hätte sein sollen mit den Kathoden - es ist faul, ich weiß und es tut mir leid! Als ich Projektteile kaufte, hatten sie nicht alles, was ich brauchte - aber es ist sehr wichtig, die richtigen Widerstände mit den Kathoden zu verwenden, um die gesammelten RGB-Werte in Bezug auf die RGB-Werte im Computer treu zu halten. So wie ich es gemacht habe, ist das nicht so schlimm, da die Muster nicht verzerrt sind; sie sind einfach nicht die gleichen Farben, die wir auf einem Computerbildschirm sehen (und wie ein menschliches Auge einfängt).

Aus den Schaltplänen ist die Nachbarschaft zwischen der RGB-LED und der CdS-Zelle zu erkennen. Das liegt daran, dass sie vom Umgebungslicht isoliert werden müssen (eine Oldie-Schwarzfilmröhre ist das perfekte Stück), damit die Kalibrierung (erklärt in Programmierung) und die Erkennung durchgeführt werden können. Sehen Sie sich das Projektvideo an, um zu sehen, wie solche Komponenten vom Umgebungslicht isoliert sind.

Farbtheorie

Die von der elektronischen Schaltung durchgeführte Farbwahrnehmung basiert auf farbtheoretischen Konzepten. Da es (noch) keine Linsen gibt, sollten nur Objekte mit undurchsichtigem (und mattem) Material in Betracht gezogen werden , um eine spiegelnde Reflexion der LED zu vermeiden. Diffuse Reflexion hingegen ist der Schlüssel zur Farberkennung mit Licht. Von einfallendem Licht wird es in unregelmäßigen Oberflächen reflektiert und erzeugt nicht den leuchtenden Effekt, der die Funktion der CdS-Zelle ruiniert.

Zurück zur eigentlichen Farbtheorie:Wenn Licht (einer bestimmten Farbe) ein Objekt erreicht, wird es entsprechend den Eigenschaften der Farbe dieses Objekts reflektiert. Zum Beispiel wird ein rotes Licht, das ein gelbes Objekt erreicht, je nachdem, wie viel Rot in der Zusammensetzung dieser gelben Farbe vorhanden ist, reflektiert - denken Sie daran, wir sprechen über Lichter! - es wird also erwartet, dass viel rotes Licht reflektiert wird, was sinnvoll ist, wenn wir an die RGB-Zusammensetzung von Gelb (im Wesentlichen Rot und Grün) denken. Wenn jedoch blaues Licht das gelbe Objekt erreicht, ist aufgrund des geringen Blauanteils in der Farbzusammensetzung keine starke Reflexion zu erwarten.

Betrachtet man ein additives Farbsystem, in dem Weiß und Schwarz jeweils das Vorhandensein bzw. Fehlen jeder Farbe darstellen (weitere Details hier .) ) können (mit der CdS-Zelle) maximale und minimale Reflexionen jedes Lichts der RGB-LED gemessen werden, das farbige Objekte erreicht. Es ist jedoch möglich, die Kalibrierung in elektronischen Komponenten durchzuführen, die an der Schaltung beteiligt sind. Dies ist ein weiterer Schlüssel für eine zuverlässige Erkennung sowie eine stabile Erkennung von Mustern (Vermeidung von Ausreißern) - hier ist ein goldener Tipp :Versuchen Sie nach der Kalibrierung (stark!), weder die elektronischen Komponenten (insbesondere wenn sie in einem Steckbrett platziert sind) noch das von Ihnen verwendete Teil (das Sie verwenden müssen) zu bewegen oder zu berühren, um die Komponenten vom Umgebungslicht zu isolieren.

US_plugins_acrobat_en_motion_education_colorTheory.pdf

Programmierung

Zur Kalibrierung und Erkennung führt der Farbsensor drei Iterationen durch, sobald ein farbiges Objekt der RGB-LED und der CdS-Zelle ausgesetzt wird. In der ersten Iteration trifft rotes Licht auf das Objekt und das Programm wartet darauf, dass die CdS-Zelle ihre Wahrnehmung stabilisiert; dann wird der analoge Eingang gelesen und die Reflexion des roten Lichts gespeichert. Das Programm iteriert noch zweimal für grüne und blaue Farben. Die in der Farbtheorie gezeigte Abbildung gibt eine gute visuelle Erklärung dieses iterativen Prozesses.

Bezüglich der Kalibrierung wird der oben erwähnte iterative Prozess zweimal durchgeführt:einmal für schwarze Farbe und einmal für weiße Farbe. Wie in der Farbtheorie erklärt, dient dies der Erkennung von Maximum und Minimum - zunächst von nahe Null bis in die Nähe von 1024 , entsprechend der Leseauflösung - Reflexionen von rotem, grünem und blauem Licht, Erhalten eines wahren Bereichs, um richtig auf die Intervalle [0, 255] (zu Informationszwecken) und [0, 1] (die tatsächliche Eingabe zur Speisung des neuronalen Netzwerks) neu zu skalieren ).

Die Wartezeit um den Messwert des Lichtsensors zu ermitteln kann variieren entsprechend jeder elektronischen Komponente, daher ist es gut, eine gute Verzögerung zu geben, um eine stetige Erfassung zu gewährleisten. In meinem Fall habe ich eine Verzögerung von 500 Millisekunden angegeben, aber es lohnt sich, zunächst einen größeren Wert zu verwenden und ihn dann bis zum Rand eines instabilen Verhaltens zu verringern.

Bei der Erkennung werden die gesammelten RGB-Werte – im Bereich von 0 bis 1 – einem MLP zugeführt, der die eigentliche Farberkennung durchführt. Für das in Arduino ausgeführte MLP verwende ich Neurona - eine Bibliothek, die ich geschrieben habe, um ANNs in Arduino einfach zu verwenden, die von der Arduino IDE mit dem Bibliotheksmanager installiert werden kann. Siehe auch diesen Beitrag für weitere Details.

Wie bereits erwähnt, ist das Netzwerk bereits im Projektcode trainiert und bereit für die Erkennung. Es wurde mit dem von mir entwickelten Playground trainiert, wobei die angepassten Gewichtungen in den Code eingebettet wurden, sodass die Neurona-Bibliothek das Netzwerk betriebsbereit macht.

Tests

Zu Informationszwecken wurden einige Farben aus dem Datensatz extrahiert, um einige Erkennungstests durchzuführen:

Nummern außerhalb der Figur werden zur Identifizierung verwendet, und Nummern innerhalb der Figur weisen auf Fehlklassifizierungen hin und verweisen darauf, welche Farben stattdessen klassifiziert wurden. Diese Farben wurden mit einem Tintenstrahldrucker auf Sulfitpapier gedruckt - siehe die winzigen Papierquadrate im Video am Anfang dieses Beitrags - also die Objekte bestehen aus lichtundurchlässigem Material, geeignet für die Farberkennung.

Code

Farbsensor-Prototyp
Der Code zum Senden an Arduino befindet sich im ColorSensor-Ordner. Stellen Sie sicher, dass Ihre elektronische Schaltung gemäß den vorgestellten Schaltplänen aufgebaut ist und die Neurona-Bibliothek ordnungsgemäß installiert ist (Sie können die Installation über den Arduino Library Manager durchführen).https://github.com/moretticb/ColorSensor/

Schaltpläne

Verwenden Sie die Drucktaste gemäß den Anweisungen auf dem LCD-Display

Herstellungsprozess

  1. Widerstandsfarbcodes
  2. Pflanzenalarm bei Durstalarm
  3. italienische Wordclock
  4. Einfacher Hindernissensor mit Arduino
  5. Sigfox-kWh-Zähler
  6. Bluetooth-Temperaturüberwachung
  7. Gestengesteuerte Sperre
  8. Der Companion-IC
  9. Ein isolierter Analogeingang für Arduino
  10. Messen Sie Ihre Reaktionszeit