LEGO® Mindstorms® EV3 barevný senzor
Co je to barevný senzor? Jedná se o digitální měřicí nástroj nezbytný pro robota k určení barvy a jasu světla prováděním naprogramovaných akcí. Vzorkovací frekvence je 1 kHz. Na jakém principu to funguje? Senzor funguje díky dvěma komponentům: tříbarevné RGB LED a fotorezistoru (fotosenzitivní senzor). První vyzařuje červené, modré a zelené světlo a druhý určuje, jak intenzivní světlo na něj dopadá.
Jak to vypadá: LED vyzařuje světlo, postupně přepíná barevnou kombinaci a fotorezistor vyhodnocuje intenzitu odraženého světla a určuje barvu na základě té nejintenzivnější. Pro práci s nejvhodnější barvou můžete provést kalibraci napsáním speciálního programu. Barevný režim Robot může třídit barevné předměty, jako jsou kostky, podle daného algoritmu. Dokáže uvést názvy květin, se kterými se v prostředí setkává. Dokáže zastavit a zastavit jakékoli akce po rozpoznání červené. Rozsah snímače je následující: rozlišuje černou, bílou, modrou, červenou, zelenou, žlutou a žádnou barvu. Je velmi důležité, aby v tomto režimu byl snímač umístěn ve vztahu ke studovanému povrchu následujícím způsobem: v pravém úhlu ve vzdálenosti 10-15 mm, ale bez dotyku objektu. To mu umožní co nejpřesněji zkoumat předmět – další světelné zdroje, které ruší odražený signál snímače, jsou na blízkou vzdálenost blokovány. Jak pracovat v barevném režimu:
Pomocí myši programového bloku přesuňte snímač barev ze spodní části obrazovky, která se nazývá „programovací panel“, do programové oblasti programovacího prostředí LME. V tomto případě bude program střídavě používat blok „Čekat“, poté „Porovnat“, poté režim „Barva“ a testovat červenou barvu.
Dále můžete vybrat barvy, na které bude senzor reagovat. Jak můžete vidět na obrázku, umožňuje vám vybrat jednu nebo více barev.
Tento obrázek ukazuje, jak program používá bloky Wait and Compare a poté testuje barvy zelenou, modrou a červenou v barevném režimu. Režim “Jas odraženého světla” Tento režim je nezbytný pro určení jasu světla. Jak již bylo zmíněno výše, LED vyzařuje světlo – konkrétně červené světlo – a fotorezistor „studuje“ odražené světlo na základě speciální stupnice. Bere v úvahu indikátory od 0 do 100, kde 0 je velmi tmavé a 100 je nejsvětlejší. V praxi vám tato funkce umožňuje zadat robotovi následující úkoly: interpretovat identifikační kartu s vytištěným barevným kódem nebo se pohybovat po bílé ploše a zastavit se na černé čáře. Stejně jako v případě režimu „Color“ je důležité správně umístit snímač vzhledem ke studovanému povrchu – ve vzdálenosti 10-15 mm, vyhnout se dotyku. Tímto způsobem jsou zablokovány zdroje světla třetích stran a snímač analyzuje odražený signál bez rušení. Jak pracovat v režimu “Jas odraženého světla”.
V režimu „Porovnání“ vyberte řádek „Jas odraženého světla“. Dále senzor rozsvítí červené světlo, které známe jako RGB LED. Množství světla odraženého od objektu se měří na stupnici od 0 do 100 a robot na základě přijatých informací provádí akce, pro které je naprogramován.
Tento obrázek ukazuje, jak naprogramovat senzor tak, aby počkal, dokud nebude jas odraženého světla nižší než 50 %. Chcete-li to provést, vyberte bloky „Očekávání“, „Porovnání“ a „Jas odraženého světla“ jeden po druhém. Vezměte prosím na vědomí, že si můžete vybrat z pěti možných pozic: větší nebo menší než, rovno nebo ne rovno, větší nebo rovno, menší nebo rovno. Co takové logické srovnání poskytuje? Umožňuje porovnat barvu signálu přicházejícího ze senzoru (tj. digitální hodnotu odraženého světelného toku) a prahovou hodnotu (tj. indikátor, který „dává“ robotovi signál, že je nutné reprodukovat naprogramovaný chování – například zastavit na černé čáře). Režim jasu okolního světla Tento režim umožňuje pracovat se světlem přicházejícím z okolí. Může to být přirozené sluneční světlo nebo umělé světlo – například světlo baterky. Stejně jako v režimu Jas odraženého světla snímač řadí informace na stupnici od 0 do 100, přičemž 0 je velmi tmavé a 100 je nejsvětlejší. Robota můžete naprogramovat na určitou denní rutinu: například aby ráno signalizoval, když se objeví slunce, a přestal fungovat, když zhasnou světla a zmizí přirozené světlo.
Sdílejte na sociálních sítích
Přečtěte si také

Mezinárodní soutěž „STEM Educator of the Year“ 2017


Role designéra ve vývoji dítěte
V jedné z předchozích lekcí – Arduino: tricolor LED – RGB – jsme probrali, co je RGB a naučili se pracovat s tříbarevnou LED. V tomto návodu se naučíme pracovat s barevným senzorem, naučíme naše Arduino rozpoznávat červenou, modrou a zelenou a získaná data zobrazovat pomocí RGB LED!

Seznam požadovaných komponent
K provedení všech experimentů v tomto tutoriálu budete kromě samotného senzoru barev potřebovat: ovladač kompatibilní s Arduino, prkénko na krájení, RGB LED, odpory a nějaké kabely plug-to-plug a plug-to-socket. Potřebné komponenty můžete vložit do košíku přímo zde a poté zadat objednávku v našem internetovém obchodě.
Jak funguje snímač barev?
Snímač TCS230 umístěný ve středu desky se skládá ze čtyř typů fotodiod: 16 fotodiod s červeným filtrem, 16 fotodiod se zeleným filtrem, 16 fotodiod s modrým filtrem a 16 fotodiod bez filtru. Vzorek jedné ze tří barev – červené, zelené nebo modré – je přenesen do senzoru. Vzorek je osvětlen LED diodami na desce kolem senzoru. Snímač má převodník proudu na frekvenci, převádí hodnoty fotodiod na obdélníkovou vlnu s frekvencí úměrnou intenzitě světla zvolené barvy. Tuto frekvenci pak čte Arduino.
Pinout na desce se snímačem TCS230 má následující význam:
- GND – zem;
- OE – povolení kontaktu;
- S1, S0 – nastavení měřítka pulzní frekvence.
- S3, S2 – vstupní signál pro nastavení filtru;
- OUT – výstupní frekvence;
- VCC – napájecí napětí.
Pro určení barvy, kterou budou číst fotodiody, je snímač TCS230 vybaven kontakty S2 и S3. Protože jsou fotodiody zapojeny paralelně, lze přepínáním kontaktů volit různé typy fotodiod. S2 и S3 do různých kombinací stavů HIGH a LOW. Pravidla pro výběr těchto kombinací pro barvy, které potřebujeme, jsou následující:
| Typ fotodiody | S2 | S3 |
| Červený | LOW | LOW |
| Tmavě modrá | LOW | VYSOKÝ |
| Bez filtru (čistý) | VYSOKÝ | LOW |
| Zelený | VYSOKÝ | VYSOKÝ |
Kontakty S0 и S1 se používají ke škálování výstupní frekvence. Lze jej škálovat na tři přednastavené hodnoty: 100 %, 20 % a 2 %. Frekvenční škálování se používá pro různé mikrokontroléry k optimalizaci dat čtených senzorem.
| Frekvenční škálování | S0 | S1 |
| Odpojení | LOW | LOW |
| 2% | LOW | VYSOKÝ |
| 20% | VYSOKÝ | LOW |
| 100% | VYSOKÝ | VYSOKÝ |
Pro Arduino použijeme 20% škálování.
Připojení senzoru k Arduinu
Pro vizuální zobrazení určené barvy použijeme RGB LED. Obvod by měl fungovat následovně: na snímač se přivede vzorek zvolené barvy a na LED se rozsvítí stejná barva.
| TCS230 | GND | VCC | OUT | S0 | S1 | S2 | S3 |
| Arduino Uno | GND | + 5V | 8 | 4 | 5 | 6 | 7 |
Schematický diagram:

Vzhled rozložení:

Program:
// контакты TCS230 для подключения к Arduino #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorOut 8 // для хранения частоты, считанной фотодиодами int redFrequency = 0; int greenFrequency = 0; int blueFrequency = 0; // для хранения данных о красном, зеленом и синем цветах int redColor = 0; int greenColor = 0; int blueColor = 0; // подключение к контактам rgb-светодиода const byte rPin = 9; const byte gPin = 10; const byte bPin = 11; void setup() < pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(rPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(bPin, OUTPUT); pinMode(sensorOut, INPUT); digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600); >void loop() < // считывание данных с фотодиодов с красным фильтром digitalWrite(S2,LOW); digitalWrite(S3,LOW); redFrequency = pulseIn(sensorOut, LOW); // считываем выходную частоту redColor = map(redFrequency, 70, 120, 255,0); Serial.print("R = "); Serial.print(redColor); delay(100); // считывание данных с фотодиодов с зеленым фильтром digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); greenFrequency = pulseIn(sensorOut, LOW); // считываем выходную частоту greenColor = map(greenFrequency, 100, 199, 255, 0); Serial.print(" G = "); Serial.print(greenColor); delay(100); // считывание данных с фотодиодов с синим фильтром digitalWrite(S2,LOW); digitalWrite(S3,HIGH); blueFrequency = pulseIn(sensorOut, LOW); // считываем выходную частоту blueColor = map(blueFrequency, 38, 84, 255, 0); Serial.print(" B = "); Serial.print(blueColor); delay(100); // вывод на светодиод распознанный цвет // вывод в монитор порта сообщение, какой цвет распознан if(redColor >greenColor && redColor > blueColor) < digitalWrite( bPin, LOW ); digitalWrite( gPin, LOW ); digitalWrite( rPin, HIGH ); Serial.println(" - RED detected!"); >if(greenColor > redColor && greenColor > blueColor) < digitalWrite( rPin, LOW ); digitalWrite( bPin, LOW ); digitalWrite( gPin, HIGH ); Serial.println(" - GREEN detected!"); >if(blueColor > redColor && blueColor > greenColor) < digitalWrite( gPin, LOW ); digitalWrite( rPin, LOW ); digitalWrite( bPin, HIGH ); Serial.println(" - BLUE detected!"); >> Když spustíme program a otevřeme sériový monitor rychlostí 9600 baudů, když přivedeme vzorek na senzor, uvidíme hodnoty pro každou ze tří barev a zprávu o tom, která barva byla vybrána. Je třeba poznamenat, že pokud barevné hlášení neodpovídá skutečné barvě, je nutné upravit hodnoty frekvence v programu a upravit je podle hodnot R, G a B na monitoru portu:
redColor = map(redFrequency, 70, 120, 255,0); zelená Barva = mapa(zelenáFrekvence, 100, 199, 255, 0); modrá Barva = mapa(modráFrekvence, 38, 84, 255, 0);