Svět není černobílá záležitost a ani mBot si to nemyslí. Nemyslí si to, protože dokáže vidět barevně. A barevně dokáže vidět díky snímači barev zvaném také color sensor.
MBot vidí barvy v klasickém režimu RGB. Jinými slovy si výslednou barvu skládá ze tří barevných kanálů – červené barvy, zelené a modré. Barvy, které mBot vnímá jsou barvy, které jsou odražené od povrchu na který je namířený modul pro čtení barev. Podobně jako u jiných modulů není přímo nějaké předepsané místo, kam by se musel modul color sensor montovat. Umístění modulu tak vyplývá z účelu za jakým chceme barvy číst.
Modul ME Color Sensor V1
Montáž modulu Me Color Sensor je jednoduchá, podobně jako u ostatních modulů z dílny firmy Makeblock. Pro její upevnění k šasi mBota lze bezproblémově využít konstrukční prvky typu L. Asi nejčastěji se budete snažit tento modul využít ke čtení barvy povrchu na který mBot vjede, tudíž nejčastější instalace bude nejspíše někam do přední části mBota. Po krátkém laborování v tomto směru se mi velmi osvědčila montáž do perforovaného M na boku mBota. Lze tam umístění modulu „doladit“.
Modul snímače barev je využitelný kromě mBotů i u vozítek typu mBot Ranger, nebo Ultimate z produkce Makeblocku. Připojuje se přes konektor typu RJ-25, který je modré barvy, tudíž pro své fungování využívá sériové sběrnice I2C. U mBota je to jedno, připojit lze tento modul na kterýkoliv ze čtyř hřbetních konektorů. U jiných typů robotů se raději řiďte barevným kódem a připojujte pouze „modrou na modrou“.
Mým prvým nápadem, když se mi dostal tento modul do ruky bylo využít jen podobně jako ME Line Follower – snímač čáry s tím, že by mBot chodil dle programu po přesně určených barevných čarách. Tak bohužel takto tento modul nelze využít. K mBotovi totiž je možné připojit pouze jeden tento modul (výrobce v datasheetu tuto skutečnost i jasně deklaroval). Jeden modul snímá barvu pouze jedním snímačem, tudíž jej nelze použít pro snímání dvou hran, jako to umí snímač pro čtení čáry.
Modul pracuje tak, že dvěma LED diodami přisvětluje povrch a v 160 ms intervalech pak čte všechny tři barevné kanály. Intenzitu odrazu světla v každém barevném kanálu převede do intervalu od 0-255 a posílá tuto informaci dál mBotovi. Čtení povrchu zkresluje velice mnoho věcí, například fakt je-li povrch lesklý, nebo matný. Je proto vhodné si správnou funkčnost na daném povrchu raději nanečisto vyzkoušet a upravit vzdálenost snímače od snímaného povrchu. V praxi se tato vzdálenost pohybuje od 0,5 do 3 cm.
Programování ME Color Sensor
Chceme-li používat snímač barvy musíme do programu mBlock 3, kterým programujeme mBoty, doinstalovat rozšíření pro ME Color Sensor od firmy Makeblock. Já vše programoval s verzí 1.0 tohoto rozšíření.
Tyto dva bloky, o které je rozšířeno naše portfolio lze používat buď v kombinaci s podmínkovými příkazy, nebo v kombinaci s blokem činnosti (například s příkazem k rozsvícení LED na hřbetě mBota). Blok, který je na grafice jako první (s oblými konci bloku) nám vrací zpět hodnotu naměřenou v daném barevném kanále (tři kanály R-G-B) v rozmezí od 0 do 255.
Druhý blok, který je zakončen špičkou vyhodnocuje formou pravda/nepravda jestli snímač „vidí“ jednu ze šesti nadefinovaných barev (bílá, červená, žlutá, zelená, modrá a černá). Samotný tento blok lze použít přímo v podmínkovém příkazu.
Program Color-Preview
Abychom si jednoduše předvedli, jak lze použít snímače barev a vyzkoušeli si fungování, vytvořil jsem dva jednoduché projekty.
Sami vidíte, že použití bloků z tohoto rozšíření je velmi prosté. Program neustále cykluje v intervalech 500 milisekund + 160 milisekund (měření snímače barev) a průběžně aktualizuje svit hřbetních LED světel podle naměřených hodnot.
Využívám zde faktu, že snímané hodnoty a hodnoty, které jsou potřebné pro zadání přesných parametrů barvy hřbetního světla mBota jedou ve stejném rozsahu 0 – 255. Snímaná hodnota se nám tedy bezprostředně projevuje i na světlech mBota. MBot nám tedy ukazuje co vlastně vidí.
Pokud bychom vyhodnocovali, co vlastně mBot vidí, uvědomíme si, že vlastně nevidí třeba „čistě“ červenou barvu (jak si to vykládá náš mozek), ale kombinaci tří kanálů, ve které navíc hraje velmi silnou roli i podíl bílé barvy (rozuměj směsi všech tří kanálů najednou). Z tohoto poznatku vyplývá, jak v dalším díle seriálu poznáme, že spolehlivá detekce barvy není až tak jednoduchou věcí, jak by se mohlo zdát.
Program Colormetr
Z programu Color-Preview je odvozený následující program Colormetr.
Program Colormetr doplňuje vizuální část programu Color-Preview o složku zvukovou a tím pádem mBota přetváří v cosi, co bychom mohli označit, jako barevný dozimetr :-).
V prvním kroku programu vloženém do nekonečné smyčky vkládáme do proměnné ton součet tří hodnot naměřených snímačem barvy ve třech kanálech.
V druhém kroku tyto hodnoty zobrazí na hřbetním LED světle mBota podobně, jako v předchozím programu.
V posledním třetím kroku programu mBota zahraje hudební tón o frekvenci dané hodnotou proměnné ton (hodnota může nabýt velikosti od 0 do 765) po dobu 100 milisekund. Hodnota proměnné ton se vždy po každém cyklu aktualizuje novou hodnotou, kterou naměřil snímač barvy.
A v čem je tento program zajímavý? Již víme, že výslednou hodnotou je součet všech tří barevných kanálů. Před tím, než jsem si začal hrát s tímto programem jsem si myslel, že naměřené hodnoty typu čistě červená, zelená a modrá budou víceméně stejné. Ovšem není tomu tak (viz. video).
Modrá barva (podle snímače barev) obsahuje kupodivu značně menší podíl červené a zelené složky a tudíž výsledný zvuk programu je výrazně hlubší, než u červeného a zeleného podkladu při jejichž měření snímačem mBot signalizuje výrazný podíl dalšího barevného kanálu (zvuk je o něco vyšší). Pokud položíme mBota například na žlutý, fialový, nebo azurově modrý podklad, indikujeme opět o poznání vyšší frekvenci/zvuk – jedná se totiž o sekundární barvy vzniklé smísením barev ze dvou barevných kanálů. Nejviditelnější tento jev ovšem bude, položíme-li mBota na bílý podklad. Bílá je totiž směsicí barev ze všech tří barevných kanálů a tudíž výsledný součet je nejvyšší.
Schválně co se stane, když mBota položíte na podklad o černé barvě?
Tip: Pokud jsou obrázky programu Colormetr a Color-preview příliš malé, zobrazte je po kliknutí pravého tlačítka na obrázek na nové kartě ve větším rozlišení.
Program Stopka při jízdě
Prvé dva programy, které vám představuji v tomto článku byly víceméně demonstrační, abychom pochopili jak vlastně snímač barvy neboli Color Sensor funguje v praxi. V dalším programu již ale snímače využijeme jako regulátoru jiné činnosti.
V konkrétním případě se bude jednat o regulaci klasické chůze po čáře, kdy budeme chtít, aby mBot chodil klasicky po čáře (již jsem o tom psal v tomto článku). Za tím účelem využijeme i program jízda po čáře, který ovšem mírně upravíme.
Program je spuštěn po stisku tlačítka na hřbetě mBota. V nekonečné smyčce, která zabezpečuje neustálé testovaní okolí dvěma moduly mBota, testujeme jednak barvu vedle černé čáry (tuto informaci nám dodává snímač barvy) a také testujeme snímačem pro čtení čáry jestli stojí mBot na čáře.
Vyšší prioritu v našem programu má stav čtení barvy protože chceme, aby na červeném podkladu mBot zastavil. Tuto skutečnost pak v programové rovině realizujeme soustavou podmínkových příkazů, přičemž ty, které reagují na stav snímače čtení čáry jsou podřízené – vložené do jedné větve podmínkového příkazu, který reaguje na čtení barvy. Vše snadno pochopíte z předchozího obrázku.
Všimněte si, že v hlavičce podmínky je použit blok pro čtení barvy z nainstalovaného rozšíření (blok se špičatými konci).
Snad se vám mé povídání o snímač barev pro vašeho mBotího kámoše bude hodit a v příštím článku si trošku podrobněji popovídáme na stejné téma.