Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Prototype kleursensor:kleurnaam van objecten detecteren

Componenten en benodigdheden

Arduino UNO
× 1
RGB diffuse gemeenschappelijke anode
Gemeenschappelijke kathode of anode... gebruik wat je hebt
× 1
Fotoweerstand
× 1
Adafruit Standaard LCD - 16x2 Wit op Blauw
Alles dat kan worden gebruikt met de LiquidCrystal Arduino-bibliotheek
× 1
Weerstand 10k ohm
Voor tactiele schakelaar en CdS-cel
× 2
Weerstand 100 ohm
150 ohm voor rode pin en 2x 100 ohm voor groene en blauwe pins van de RGB LED
× 3
SparkFun Drukknopschakelaar 12 mm
× 1
Jumperdraden (algemeen)
× 1
Broodplank (algemeen)
× 1

Apps en online services

MLP-topologie-werkbank
Tool gebruikt om neurale netwerken opnieuw te trainen voor gebruik met Neurona-bibliotheek in Arduino.

Over dit project

Dit is een vereenvoudigde versie van het volledige artikel, omwille van de eenvoud, zodat de reproductie van dit project gemakkelijk kan worden gedaan. Bekijk ook dit project op mijn blog voor meer implementatiedetails.

Dit artikel is onderverdeeld in de secties die in het rechtermenu worden vermeld. Als je naar technische details wilt gaan, kijk dan in de inhoudsopgave aan de rechterkant, of download de code in de GitHub-repository. Bekijk voordat je verder leest eerst de projectvideo om te zien waar dit project echt over gaat :)

Projectoverzicht

Net als het kleurenzicht van het menselijk oog, en gebaseerd op licht, omvat het RGB-model meer dan 16 miljoen kleuren , die zijn gerangschikt in een 3D-ruimte , waarbij gehele waarden van de componenten R (Rood), G (Groen) en B (Blauw), variërend van 0 tot 255, de coördinaten van deze ruimte vormen. Van dit model werden kleurdetectie en -herkenning uitgevoerd met lichtgerelateerde elektronische componenten en machine learning-mechanismen; het is in wezen de combinatie van een RGB-led en een CdS-cel (lichtsensor of LDR), beide geïsoleerd van omgevingslicht . Dergelijke componenten stralen respectievelijk de intensiteit uit van elk licht (rood, groen en blauw) dat werd gereflecteerd door een object van een bepaalde kleur.

Meerlaagse Perceptron

Multi-Layer Perceptron (MLP) is een feedforward-architectuur van kunstmatige neurale netwerken, met een invoerlaag (niet-neuraal), verborgen lagen en een uitvoerlaag. Dit netwerk wordt getraind door een backpropagation-algoritme, waarbij gesuperviseerd leren wordt uitgevoerd (leren door voorbeelden).

Voor deze kleurensensor ontvangt het hierboven geïllustreerde neurale netwerk 3 inputs (RGB-waarden) , met één verborgen laag met 6 neuronen en een uitvoerlaag met 10 neuronen - even herinneren:de uitvoerlaag moet hetzelfde aantal klassen (kleuren, in dit geval) hebben voor een binaire uitvoer. Voor deze tutorial is het netwerk al getraind en in staat om kleuren te herkennen :). Meer details over trainingsstappen en de voorbeelddataset die ervoor wordt gebruikt, bekijk het volledige bericht in mijn blog.

Kleurherkenning

Deze taak kan worden uitgevoerd met behulp van ons getrainde MLP-netwerk. Het maakt classificatie en herkenning van ruimtelijk scheidbare patronen mogelijk - erg handig in dit geval. Tijdens de trainingsstap heeft het netwerk regio's in de hieronder geïllustreerde RGB-kleurruimte in kaart gebracht, zodat elke regio geïsoleerd door hypervlakken een kleur vertegenwoordigt . Daarom valt elk nieuw RGB-kleurpatroon (weergegeven als een 3D-punt) in een bepaald gebied en wordt het geclassificeerd als zijn respectieve kleur.

Met het oog op het verkrijgen van generalisatie met een MLP voor een goede herkenning van RGB-patronen, moet een trainingsset (voorbeelden van kleuren met de gewenste uitvoer van de hierboven geïllustreerde 3D-ruimte) aan het netwerk worden gepresenteerd voor de trainingsstap. De trainingsset die in dit project wordt gebruikt, is beschikbaar op de GitHub . van het project opslagplaats. Als je geïnteresseerd bent in neurale netwerken, lees dan deze sectie door en bekijk deze Playground die ik heb ontwikkeld, zodat je de dataset kunt gebruiken om het netwerk zelf te trainen en in de code te gebruiken :). Anders ga door naar implementatiedetails .

Generalisatie zal plaatsvinden in het domein dat de trainingsset omvat, dus het is de moeite waard om aandacht te besteden aan min en max waarden van elk onderdeel van de ruimte! Voed het netwerk niet met patronen buiten dit domein, anders wordt verwacht dat de uitvoer niet correct werkt.

De dataset (alle voorbeelden) bevat 75 exemplaren van kleurpatronen variërend van 0 tot 1. Aanvankelijk variërend van 0 tot 255, werden deze exemplaren opnieuw geschaald door elke waarde eenvoudig te delen door 255, zodat 0 <=x1, x2, x3 <=1 Zoals te zien is in de dataset, is het belangrijk erop te wijzen dat slechts één neuron op de uitvoerlaag 1 moet uitvoeren, terwijl de overige nul moeten uitvoeren. Omdat een getraind netwerk float-waarden uitvoert, vindt de nabewerking als volgt plaats:

waarbij yi de output is van het i-de neuron en max(y) de grootste outputwaarde is. Praktisch gezien geeft het neuron met de grootste output 1 als output en de overigen 0. Zo simpel is het.

Elektronische schakeling

Voortkomend uit objecten, vindt alle detectieprocedure plaats in het elektronische circuit, inclusief computeractiviteit die wordt uitgevoerd in een Atmega328, die is aangesloten op Arduino-borden. Controleer de bedrading aan de hand van onderstaande schema's.

De code volgt het bovenstaande schema dat gebruik maakt van een gemeenschappelijke anode RGB-LED. Dat gezegd hebbende, controleer of uw RGB-LED ook een gemeenschappelijke anode is, anders keert u gewoon de logica in de code om .

Een ander belangrijk detail is dat ik slechts één weerstand gebruik met de RGB-led. Aangezien één kleur tegelijk zal branden, heb ik de weerstand in de gemeenschappelijke anode geplaatst, met een gemiddelde weerstand van de weerstanden die hadden moeten zijn met de kathoden - het is lui, ik weet het en het spijt me! Toen ik projectonderdelen ging kopen, hadden ze niet alles wat ik nodig had - maar het is echter erg belangrijk om de juiste weerstanden met de kathodes te gebruiken om getrouwheid te hebben in de verzamelde RGB-waarden met betrekking tot RGB-waarden in de computer. De manier waarop ik het deed is niet zo slecht, aangezien de patronen niet vervormd zijn; het zijn gewoon niet dezelfde kleuren die we op een computerscherm zien (en zoals een menselijk oog vastlegt).

Uit de schema's kan de nabijheid tussen de RGB-LED en de CdS-cel worden waargenomen. Dat komt omdat ze moeten worden geïsoleerd van omgevingslicht (een ouderwetse zwarte filmbuis is het perfecte stuk), zodat kalibratie (uitgelegd in Programmeren) en herkenning kan worden uitgevoerd. Bekijk de projectvideo om te zien hoe dergelijke componenten worden geïsoleerd van omgevingslicht.

Kleurentheorie

Kleurperceptie uitgevoerd door het elektronische circuit is gebaseerd op concepten van de kleurentheorie. Aangezien er (nog) geen lenzen bij betrokken zijn, moeten alleen objecten met ondoorzichtig (en mat) materiaal worden overwogen , het vermijden van spiegelende reflectie van de LED. Diffuse reflectie daarentegen is de sleutel tot kleurdetectie met verlichting. Van een invallend licht wordt het gereflecteerd in onregelmatige oppervlakken, zonder dat glimmende effect te creëren dat de functie van de CdS-cel verpest.

Terug naar de werkelijke kleurentheorie, wanneer licht (van een bepaalde kleur) een object bereikt, wordt het gereflecteerd volgens eigenschappen van de kleur van dat object. Bijvoorbeeld, een rood licht dat een geel object bereikt, wordt gereflecteerd op basis van hoeveel rood er in de samenstelling van die gele kleur bestaat - onthoud, we hebben het over lichten! - er wordt dus verwacht dat er veel rood licht wordt gereflecteerd, wat logisch is als we denken aan de RGB-samenstelling van geel (hoofdzakelijk rood en groen). Wanneer echter blauw licht het gele object bereikt, wordt er geen sterke reflectie verwacht vanwege de geringe aanwezigheid van blauw in de kleursamenstelling.

Gezien een additief kleurensysteem, waarin wit en zwart respectievelijk de aanwezigheid en afwezigheid van elke kleur zijn (meer details hier ), kunnen er (met de CdS-cel) maximale en minimale reflecties van elk licht van de RGB-led worden gemeten die gekleurde objecten bereiken. Dat gezegd hebbende, is het mogelijk om de kalibratie uit te voeren in elektronische componenten die bij het circuit zijn betrokken. Dit is een andere sleutel om getrouwe detectie te krijgen en om een ​​stabiele detectie van patronen te garanderen (uitbijters vermijden) - hier is een gouden tip :probeer na het kalibreren (hard!) de elektronische componenten niet te verplaatsen of aan te raken (vooral wanneer ze in een breadboard zijn geplaatst), noch het stuk dat u gebruikt (u moet gebruiken) om componenten te isoleren van omgevingslicht.

US_plugins_acrobat_en_motion_education_colorTheory.pdf

Programmeren

Voor kalibratie en herkenning voert de kleurensensor drie iteraties uit, zodra een gekleurd object wordt blootgesteld aan de RGB-LED en de CdS-cel. In de eerste iteratie raakt rood licht het object en wacht het programma op de CdS-cel om de waarneming te stabiliseren; de analoge ingang wordt dan uitgelezen en de reflectie van het rode licht wordt opgeslagen. Het programma herhaalt nog twee keer voor groene en blauwe kleuren. De figuur in Kleurtheorie geeft een goede visuele verklaring van dit iteratieve proces.

Wat betreft kalibratie, wordt het bovengenoemde iteratieve proces twee keer uitgevoerd:één keer voor zwarte kleur en één keer voor witte kleur. Zoals uitgelegd in de kleurentheorie, is dit voor de detectie van maximum en minimum - aanvankelijk van bijna nul tot in de buurt van 1024 , volgens de leesresolutie - reflecties van rood, groen en blauw licht, het verkrijgen van een echt bereik om correct te herschalen naar intervallen [0, 255] (voor informatieve doeleinden) en [0, 1] (de daadwerkelijke invoer om het neurale netwerk te voeden ).

De wachttijd om het lezen van de lichtsensor vast te stellen kan variëren volgens elke elektronische component, dus het is goed om een ​​goede vertraging te geven om een ​​stabiele detectie te garanderen. In mijn geval gaf ik een vertraging van 500 milliseconden, maar het is de moeite waard om in eerste instantie een grotere waarde te gebruiken en deze vervolgens te verlagen tot de rand van een niet-stabiel gedrag.

Bij detectie voeden de verzamelde RGB-waarden - variërend van 0 tot 1 - een MLP, waarmee de daadwerkelijke kleurherkenning wordt uitgevoerd. Voor de MLP die in Arduino draait, gebruik ik Neurona - een bibliotheek die ik heb geschreven om gemakkelijk ANN's in Arduino te gebruiken, die kan worden geïnstalleerd vanuit Arduino IDE met de Library Manager. Controleer ook dit bericht voor meer details.

Zoals eerder vermeld, is het netwerk al getraind en klaar voor detectie in de projectcode. Het is getraind met behulp van de Playground die ik heb ontwikkeld, waarbij de aangepaste gewichten in de code zijn geïntegreerd, zodat de Neurona-bibliotheek het netwerk gebruiksklaar maakt.

Testen

Voor informatieve doeleinden zijn enkele kleuren uit de dataset gehaald om enkele herkenningstests uit te voeren:

Nummers buiten de afbeelding worden gebruikt voor identificatie en nummers binnen de afbeelding geven verkeerde classificaties aan, verwijzend naar welke kleuren in plaats daarvan werden geclassificeerd. Deze kleuren zijn gedrukt op sulfietpapier met een inkjetprinter - zie de kleine papieren vierkantjes in de video aan het begin van dit bericht - dus de objecten bestaan ​​uit ondoorzichtig materiaal, geschikt voor kleurdetectie.

Code

Prototype kleursensor
De code die naar Arduino moet worden verzonden, bevindt zich in de map colorSensor. Zorg ervoor dat uw elektronische circuit is gebouwd volgens de gepresenteerde schema's en dat de Neurona-bibliotheek correct is geïnstalleerd (u kunt installeren vanuit Arduino Library Manager).https://github.com/moretticb/ColorSensor/

Schema's

Gebruik de drukknop volgens de instructies op het LCD-scherm

Productieproces

  1. Kleurcodes weerstand
  2. Dorstalarm plantalarm
  3. Italiaanse Word Clock
  4. Eenvoudige obstakelsensor met Arduino
  5. Sigfox kWh-meter
  6. Bluetooth-temperatuurmeter
  7. Gebarengestuurd slot
  8. The Companion IC
  9. USB MIDI-adapter
  10. Een geïsoleerde analoge ingang voor Arduino
  11. Meet je reactietijd