Triedenie lentiliek
Zo stránky SensorWiki
Lentilky sú obvykle čokoládové alebo ovocné cukríky v tvare šošovky (franc. lentille, angl. lentil) s rôznofarebnoou cukrovou krustou na povrchu.
V Česku ich vyrábala firma Sfinx Holešov už od roku 1907 (konkurenčné M&M's sa vyrábajú až od r. 1941). Unikátny výrobný proces českých lentiliek trvá viac ako
osem hodín. Firma Sfinx sa v roku 1992 stala súčasťou koncernu Nestlé, čo
žiaľ znamenalo aj koniec Lentiliek, pretože od apríla 2021 prevzala výrobu továreň v Hamburgu a to jednak z ekologických dôvodov, ako aj z dôvodu „harmonizácie“
(= zjednotenie receptúry) so značkou Smarties.
Na toto cvičenie si musíte zaobstarať niektoré z týchto cukríkov:
Snímač farby ColorPAL
Senzorov na snímanie farieb je viacero rozličných druhov, my sa budeme zaoberať snímačom ColorPAL firmy Parallax. Opis senzora vypracovali študenti Bc. Tamás Vincze a Bc. Adam Rozsár v rámci semestrálneho projektu.
Vlastnosti
- Sníma celý rozsah farieb o ktorých dáva informáciu vo forme RGB (Red/Green/Blue) komponentov.
- Sníma spektrum okolitého osvetlenia s citlivosťou až 44uW/cm2 na lsb.
- Generuje 24 bitové farby pomocou vstavaného RGB LED.
- Možnosť pripojenia priamo na skúšobnú dosku alebo pomocou predlžovacích káblov.
- Na detekciu a generovanie farby využíva sériovú komunikáciu cez jeden pin.
- Detekcia a generovanie farieb je riadené pomocou vstavaného mikrokontrolera.
- Disponuje vstavanou EEPROM pamäťou pre uloženie snímaných informácií a generačných programov.
- Autorun funkcia umožňuje spustenie vopred určeného programu iba použitím napájania.
Princíp činnosti
Na rozdiel od snímačov s CMOS detektormi, ktoré prostredníctvom filtrov merajú priamo množstvo odrazeného svetla v jednotlivých zložkách, tento snímač aktívne osvetľuje vzorku rozličnými svetlami (červené, modré a zelené). Postupne odmeria množstvo odrazeného svetla jednotlivých zložiek a z toho potom vieme odhadnúť farbu objektu.
ColorPAL používa RGB LED na osvetlenie meranej farby (jedna farba naraz), spolu so široko spektrovým prevodníkom svetlo-napätie na meranie odrazeného svetla. Podľa množstva svetla ktoré sa odráža od meranej farby pri osvetlení od červenej, zelenej a modrej LED diódy je možné určiť farbu vzorky. ColorPAL používa na meranie odrazeného svetla fotodiódu TAOS typu TSL13T alebo 12T, ktorá má krivku spektrálnej citlivosti nasledovnú:
- Obr. 1: Krivka spektrálnej citlivosti prevodníka svetlo-napätie
Prevodník je kombináciou fotodiódy a transimpedančného zosilňovača v jednom integrovanom obvode. Aktívna plocha fotodiódy je 0.5 mm x 0.5 mm a senzor vníma žiarenie s vlnovou dĺžkou v rozsahu od 320 nm do 1050 nm.Výstupné napätie sa mení lineárne s intenzitou dopadajúceho žiarenia.
- Obr. 2: Fotografia TSL13T, funkčná schéma zapojenie prevodníka a zapojenie vývodov fotodiódy.
Výstupom snímača je napätie, úmerné celého žiarenia ktoré detekuje a ktoré sú potom merané podľa hore uvedenej krivky spektrálnej citlivosti. Keď predmet je osvetlený iba červenou LED, tak snímač bude reagovať s napätím úmerným červenej zložky z farby predmetu a podobne s modrou a zelenou. Snímač a RGB LED diódy sú umiestnené vedľa seba v jednej plastickej trubice.
Použitie
Senzor používa 3 piny: regulované +5V napájanie, zem a sériový dátový pin s otvoreným kolektorom. Pri práci sme snímač napojili na skúšobnú dosku podľa Obr. 2. Museli sme dávať pozor, aby bol jumper vhodne nastavený, na Vdd a nie na Vin.
Pomocou predlžovacieho káblika sa senzor jednoducho pripojí k Acrob doske do konektora pre servomotorčeky:
Software na meranie
Po pripojení senzora k mikropočítaču Arduino / Acrob, budete potrebovať okrem samotného programu aj doinštalovať knižnicu ColorPal.h
Knižnica ColorPAL
Postup inštalácie (ak ešte nie je na počítači knižnica nainštalovaná):
1. Choďte na nižsieuvedenú stránku, kliknite na zelené tlačítko Code (vpravo hore), z rozbaľovacieho menu si vyberte Download ZIP...
https://github.com/westpoint-robotics/ColorPAL
2. Po nahratí rozbaľte ColorPAL-master.zip a vyberte folder ColorPAL (bez prípony '-master'). Presu+nte ho do adresára
C:\Users\USername\Documents\Arduino\libraries
3. Reštartujte Arduino IDE a knižnica by mala byť pridaná.
Demonštračný program
Nasledovný program inicializuje senzor a v slučke potom vyčítava jednotlivé farebné zložky, ktoré po sériovej linke posiela do počítača.
#include <ColorPAL.h> /* Kniznica pre pracu so senzorom */
#define SW1 6 /* Ak chceme meranie ovladat tlacitkom */
#define LED1 13 /* LEDka na doske */
ColorPAL sensor; /* Vytvori instanciu senzora */
int red; /* Premenne na jednotlive farby */
int grn;
int blu;
char buffer[20]; /* Docasny buffer na textovy retazec */
void setup()
{
pinMode(SW1,INPUT_PULLUP);
pinMode(LED1,OUTPUT);
sensor.attachPAL(10); /* Senzor je pripojeny na D10 */
Serial.begin(9600); /* Rychlost seriovej linky 9600Bd */
}
void loop()
{
red = sensor.redPAL(); // Reads sensors and returns red value
grn = sensor.greenPAL(); // Reads sensors and returns green value
blu = sensor.bluePAL(); // Reads sensors and returns blue value
buffer[19] = '\0';
buffer[18] = '\0';
// Tu si pripravime retazec na odvysielanie
// v tvare R0000 G0000 B0000 <CR>
sprintf(buffer, "R%4.4d G%4.4d B%4.4d\015", red, grn, blu);
Serial.println(buffer); // A tu ho odvysielame
delay(100); // 10 merani za sekundu nam staci
}
Ak bude všetko v poriadku, program začne merať farby a posielať na sériový port (9600 Bd) podobné data:
R0027 G0106 B0040 R0037 G0134 B0050 R0034 G0126 B0046 ...
Ukážková aplikácia
Vyššieuvedený program by mal fungovať (žiaľ nie vždy celkom spoľahlivo) aj s originálnym programom Philippa Pilgrima (Parallax)
na rozpoznávanie farieb TCS3200_ColorPAL_match.exe
.
- Originál https://www.parallax.com/package/colorpal-color-sensor-downloads/?wpdmdl=2901&refresh=641fd7e2308fd1679808482&ind=1600309026340&filename=28380-ColorPAL-Color-Matching-Program-BS-Sample-Files.zip
- Lokálna kópia https://senzor.robotika.sk/mems/ColorPalDemo.zip
Meranie
Vašou úlohou je teraz namerať primerané množstvo vzoriek lentiliek z každej farby. Meranie aj niekoľkokrát zopakujte. Cieľom je získať .csv súbor v nasledovnom formáte:
r,g,b,target,target_name 25,57,181,0,blue 25,63,191,0,blue 189,38,31,1,orange 188,45,41,1,orange 49,109,93,2,green 49,111,94,2,green
Význam stĺpcov r, g a b je zrejmý, target_name je názov farby a target je unikátne číslo pre každú farbu.
Aby ste získali požadované dáta, musíte upraviť formátovací reťazec vo vzorovom programe vyššie. Potom jednotlivé merania skopírujete z terminálového okna a doeditujete požadované údaje.
Meranie si môžete trocha zjednodušiť, ak si pripojíte k procesoru tlačítko a dáta zmeriate a vyšlete len raz, po stlačení tlačítka:
while (digitalRead(SW1) == HIGH) // tlačítko je aktívne do nuly
{
/* len tu cakaj a nic nerob */
}
/* hotovo, tlacitko je stlacene */
Ďalšie zjednodušenie by mohlo spočívať v zadávaní požadovanej farby, takže by procesor rovno vyslal celý riadok vhodný do .csv súboru. Dalo by sa to napríklad pomocou funkcie readStringUntil(), takto nejako:
void setup()
{
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop()
{
// check if data is available
if (Serial.available() > 0) {
// read the incoming string:
String incomingString = Serial.readStringUntil('\n');
// prints the received data
Serial.print("I received: ");
Serial.println(incomingString);
}
}
Strojové učenie
Ak ste už zmerali svoj balíček cukríkov, mali by ste mať pripravený .csv súbor v ktorom je všetko potrebné. Ďalšia úloha je natrénovať nejaký algoritmus na nameraných dátach a implementovať ho potom do Arduina, aby správne rozpoznávalo jednotlivé lentilky.
Okrem asi najznámejších ML (Machine Learning) algoritmov, ktorými sú neurónové siete existuje aj množstvo ďalších, pričom niektoré sú na implementáciu do malých mikropočítačov vhodnejšie ako iné. My využijeme tzv. Decision Tree, teda rozhodovací strom. Asi by ste ho dokázali implementovať aj intuitívne, ale výhodou algoritmu strojového učenia je, že nájde optimálny strom, teda taký, kde bude minimálny počet rozhodovacích vetiev.
Ďalej budeme pracovať v Google Colab notebooku, kde máte všetko pripravené.
Strojové učenie
Ak ste už zmerali svoj balíček cukríkov, mali by ste mať pripravený .csv súbor v ktorom je všetko potrebné. Ďalšia úloha je natrénovať nejaký algoritmus na nameraných dátach a implementovať ho potom do Arduina, aby správne rozpoznávalo jednotlivé lentilky.
Okrem asi najznámejších ML (Machine Learning) algoritmov, ktorými sú neurónové siete existuje aj množstvo ďalších, pričom niektoré sú na implementáciu do malých mikropočítačov vhodnejšie ako iné. My využijeme tzv. Decision Tree, teda rozhodovací strom. Asi by ste ho dokázali implementovať aj intuitívne, ale výhodou algoritmu strojového učenia je, že nájde optimálny strom, teda taký, kde bude minimálny počet rozhodovacích vetiev.
Ďalej budeme pracovať v Google Colab notebooku, kde máte všetko pripravené.
Ak by vám niečo z nejakého dôvodu nefungovalo, môžete použiť tento vzorový .csv súbor na odladenie vášho postupu.
Implementácia
Navrhnutý algoritmus preneste do mikropočítača a otestujte na novej vzorke lentiliek (môžete si napr. vymeniť so susedom). Rozpoznávanie (klasifikáciu) bude realizovať nižšie uvedený program. Nezabudnite mu však dodať aj z Google Colab notebooku vygenerované súbory Pipeline.h
a Classifier.h
:
#include <ColorPAL.h> /* Kniznica pre pracu so senzorom */
#include "Pipeline.h" /* Vygenerovane z Google Colab */
#include "Classifier.h"
ColorPAL sensor;
void setup()
{
sensor.attachPAL(10); /* Senzor je pripojeny na D10 */
Serial.begin(9600); /* Rychlost seriovej linky */
}
void loop()
{
// get RGB values
int r = sensor.redPAL(); // Reads sensors and returns red value
int g = sensor.greenPAL(); // Reads sensors and returns green value
int b = sensor.bluePAL(); // Reads sensors and returns blue value
// print values to Serial
Serial.print("RGB: ");
Serial.print(r,3);
Serial.print(",");
Serial.print(g,3);
Serial.print(",");
Serial.print(b,3);
// perform feature extraction
float features[] = {r, g, b};
if (!pipeline.transform(features))
return;
// perform classification on pipeline result
Serial.print(" | Predicted color: ");
Serial.println(tree.predictLabel(pipeline.X));
delay(300);
}
Ak máte chuť, môžete si dostavať aj mechanický triedič, ktorý vám lentilky roztriedy podľa farieb:
- Triedič z kartónu
- Kvalitnejší triedič
- 3D printed Color Sorter
- Iný 3D Color Sorter s návodom
- Ďalší 3D triedič s návodom
- Veľmi dôvtipný mechanizmus s jediným motorčekom
- ... a celá kopa ďalších
Je to len hračka? Nie, pozrite sa napríklad na tento priemyselný triedič kávových zŕn:
Literatúra:
- Product Page: #28380 ColorPAL (parallax.com)
- Downloads (parallax.com)
- Product manual ver.A a ver.B (local)
- Sensor datasheet (local)
- Demo software (local)
- Vzorový .csv súbor
- Ak chceme aj zobrazenie na displeji, pozri LCD displej
- Pozri aj ďalšie Senzory na rozpoznávanie farieb