Programovací úloha: Vidět infračervené světlo
Publikováno: 24.7.2023
Ukážeme vám další z úloh do kroužků programování, která využívá roboty Meet Edison.
Text vyšel původně na autorově webu.
Mezi první úlohy, které zkoušíme s roboty Meet Edison, patří program „vyhýbej se překážkám“ a řízení dálkovým ovladačem (třeba od televize). To je příležitost vysvětlit si, jak to funguje pod pokličkou, a probrat tak infračervené světlo.
Úvod
Z didaktického hlediska záleží na vás, co chcete všechno s dětmi probrat. Neosvědčila se mi frontální přednáška. Spíš sonduju, co vědí (rády se pochlubí) a následně to vhodně to rozvinu.
Když se řekne světlo, často máme na mysli viditelnou část elektromagnetického záření. Spektrum je však mnohem širší.
Nejblíže viditelnému světlu je nám neviditelné ultrafialové záření, kterému se víc věnovat nebudeme. Z mnoha využití jmenujme například dezinfekci nebo kontrolu bankovek.
Na opačné straně viditelného světla najdeme infračervené světlo. Toho se prakticky využívá v přístroji pro noční vidění (neodolám a musím zmínit článek o uniformách americké armády, který popisuje, že maskování musí fungovat ve dne i v noci). Dále se infračerveného světla využívá pro vyhledávání ohnisek požárů pomocí termovize. Povídání je vhodné doplnit obrazovým materiálem. Je to divácky velmi atraktivní.
Pro potřeby kroužku programování nás nejvíc zajímá dálkové ovládání a detekce překážek. Dálkové ovládání pomocí infračerveného světla pošle nějaké číslo, na které je namapovaná v přístroji určitá akce. Až při přípravě tohoto příspěvku jsem si ze školy vzpomněl, že abyste signál odlišili od všudypřítomného infračerveného světla, tak ho musíte modulovat (to je informace spíš pro zvídavé lektory než pro děti). Pro vyhýbání překážek se využívá toho, že infračervené světlo se odráží, takže robot něco vyzáří a měří, co se mu vrátí.
Pro názorné ukázky a ladění problémů se nám zrovna nehodí, že infračervené světlo není vidět. Bohužel si ho ani nevyfotíme, jelikož fotoaparáty mají předřazený filtr, který infračervené světlo tlumí, protože čipy jsou na něj velmi citlivé. Existuje obor, který se soustředí na focení infračerveného světla.
Jak je tedy možné „vidět“ infračervené světlo? Můžeme si sestavit jednoduché Arduino udělátko.
Arduino
Martin Javorek napsal článek Jak si vypsat hodnotu, kterou ví jen robot Edison (pokus o debugging), který trochu předžvýkám a zjednoduším. Ještě jsem našel podrobný anglický článek How to Set Up an IR Remote and Receiver on an Arduino.
Přeskočím úvod do Arduina, který můžete najít jinde.
Kromě Arduina budeme potřebovat doinstalovat knihovnu IRremote a doslova za pár korun pořídit čidlo, například VS 1838B.
Schéma zapojení
Autor obrázku: Martin Javorek
Popis nožiček senzoru VS 1838B
Autor obrázku: Martin Javorek
Zdrojový kód
Procházel jsem mnoho tutoriálů a chvíli mi trvalo, než jsem zjistil, že nefungují, protože knihovna lehce změnila svoje API. V dokumentaci je to sice popsané, ale tam jsem hned nekoukal.
Funkční řešení pro verzi IRremote 4.0.0
#include <IRremote.hpp>constint RECV_PIN = 13;
IRrecv irrecv(RECV_PIN);
voidsetup() {
Serial.begin(9600);
irrecv.enableIRIn();
}
voidloop() {
if (IrReceiver.decode()) {
IrReceiver.printIRResultShort(&Serial);
IrReceiver.printIRSendUsage(&Serial);
irrecv.resume();
}
}
Záznam pro stisk tlačítka pak může vypadat například takto (pro každé tlačítko něco jiného):
Protocol=NEC Address=0x1000 Command=0x15 Raw-Data=0xEA151000 32 bits LSB first Send with: IrSender.sendNEC(0x1000, 0x15, <numberOfRepeats>);
Budeme-li sledovat Edisona, který se vyhýbá překážkám, tak můžeme číst něco podobného:
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Protocol=UNKNOWN Hash=0x0 2 bits (incl. gap and start) received
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Protocol=RC5 Address=0x0 Command=0x40 Repeat gap=11750us
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Protocol=RC5 Address=0x0 Command=0x40 Repeat gap=11750us
Protocol=RC5 Address=0x0 Command=0x40 Repeat gap=24200us
Protocol=RC5 Address=0x0 Command=0x40 Repeat gap=11750us
Protocol=RC5 Address=0x0 Command=0x40 Repeat gap=11750us
Protocol=RC5 Address=0x0 Command=0x40 Repeat gap=24300us
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Protocol=RC5 Address=0x0 Command=0x40 Repeat gap=11800us
Protocol=RC5 Address=0x0 Command=0x40 Repeat gap=11800us
Protocol=RC5 Address=0x0 Command=0x40 Repeat gap=11750us
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Protocol=RC5 Address=0x0 Command=0x40 Repeat gap=11750us
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Protocol=UNKNOWN Hash=0x0 1 bits (incl. gap and start) received
Meet Edison
Roboti Meet Edison si mezi sebou můžou posílat a přijímat signály pomocí infračerveného světla. Na tom jsem postavil úlohu železniční přejezd.
Martin Javorek v článku Jak si vypsat hodnotu, kterou ví jen robot Edison (pokus o debugging) empiricky namapoval signály na čísla. Meet Edison protokol je popsaný v Edison Infrared Communication Protocol. Knihovna IRremote tento protokol (zatím, pokud nikdo nedopíšete) nepodporuje.
Závěr
Ukázali jsme si, co to je infračervené světlo a k čemu se prakticky používá. Vyzkoušeli jsme si způsob, jak můžeme infračervené světlo vidět a sledovat, co se v éteru děje. Pokročilé diagnostice robotů Meet Edison se budu možná věnovat někdy později. Chtěl jsem si především připravit udělátko na demonstraci dálkového ovladače.