KURZ: Světelné kostky a signalizace tlačítek řídící jednotky
- Podrobnosti
- Mgr. Jan Baťko
- Aktualizováno: 06.09.2017
- Zobrazení: 11605
KAPITOLY
Základní sada stavebnice LEGO MINDSTORMS NXT obsahuje světelné kostky, které jsou opatřeny vláknovou žárovkou. Kostky jsou napájeny 9V a jejich stálý odběr je 30mA. Jedná se o výstupní zařízení a tudíž jsou k řídící jednotce připojeny pomocí jednoho ze vstupních portů (A, B nebo C). Připojují se pomocí redukčního kabelu RCX, který zajišťuje kompatibilitu mezi starší a novější verzí rozhraní pro připojení senzorů.
Novější stavebnicí LEGO Mindstorms EV3 již nejsou světelné kostky podporovány. Tento typ signalizace byl nahrazen a nově obsahuje řídící jednotka podsvícení svých tlačítek, které je možné využít jako vnější světelnou signalizaci. Ovládání podsvícení je možné pomocí příslušného bloku v programovacím prostředí EV3. V záložce EV3 níže se tak již nevěnujeme světelným kostkám, ale popisujeme práci se světelnou signalizací řídící jednotky v tomto programovacím prostředí.
Práce se světelnými kostkami v programovacích prostředích
NXT-G
BLOK PRO OVLÁDÁNÍ světelných kostek
Rozcestník
Umístění bloku
Blok Lamp pro ovládání světelných kostek se nachází v paletě Complete > Action.
Popis bloku
Programový blok Lamp obsahuje šest konektorů pro připojení dalších bloků:
Port - značí výstupní port, ke kterému je kostka připojena.
Action - vyjadřuje, zda je žárovka kostky rozsvícena či nikoliv.
Intensity - udává hodnotu intensity světla (0 - 100).
Aktuální nastavení bloku udávají tři ikonky. Vpravo nahoře je zobrazen port, ke kterému je kostka připojena (A, B nebo C). Ve spodní části poté signalizace, zda je kostka rozsvícena či není (On nebo Off). Poslední, umístěná vpravo dole udává nastavenou intenzitu světla.
Parametry bloku
Port: označuje, ke kterému výstupnímu portu je kostka připojena (A, B nebo C).
Action: nastavení, zda je LED dioda umístěná na kostce rozsvícena (On) nebo zhasnuta (Off).
Intensity: tažítkem nastavitelná hodnota intensity světla LED diody (0 - 100).
RobotC
Příkazy pro práci se světelnými kostkami
Světelné kostky opatřené vláknovou žárovkou nenabízí příliš mnoho funkcí, jelikož jejich hlavní určení je spíše v podobě signalizátoru nějakého jevu. Při jejich ovládání tedy pracujeme hlavně s nastavením intenzity svitu a dobou po kterou žárovka svítí.
Rozcestník
Nastavení intenzity svitu kostek
Ovládání světelných kostek v programovacím prostředí RobotC se provádí obdobným způsobem, jako ovládání chodu motoru. K nastavení intenzity světla slouží příkaz motor[], u nějž v závorce definujeme, k jakému výstupnímu portu kostky, ho pomocí RCX kabelu připojujeme. Číselnou hodnotou na stupnici 0 - 100 poté udáváme samotnou intenzitu světla.
motor[motorB] = 100; // Kostka je pripojena k portu B a sviti s maximalni intenzitou.
Ovládání doby svitu kostek
U světelné kostky je možné ovládat dobu, po kterou je její žárovka rozsvícena či zhasnuta. K načasování podobných jevů slouží příkaz wait1Msec(). Jeho pomocí můžeme v milisekundách určit dobu, po kterou se daný úkon bude provádět. Tímto způsobem je možné přesně nastavit sekvence, po které bude světlo svítit či bude zhasnuto nebo dosáhnout rozblikání diody.
motor[motorA] = 100; // Kostka je pripojena k portu A a sviti s maximalni intenzitou svetla. wait1Msec(4000); // Doba svitu kostky je ctyri sekundy. motor[motorA] = 0; // Po ctyrech sekundach dioda kostky zhasne. wait1Msec(4000); // Po dobu ctyr sekund je dioda kostky zhasnuta. motor[motorA] = 100; // Po uplynuti doby ctyr sekund po ktere byla dioda kostky zhasnuta se opet rozsviti s maximalni intenzitou. wait1Msec(4000); // Dioda svetelne kostky bude opet svitit po dobu ctyr sekund a pote zhasne.
EV3
Blok pro práci se světelnou signalizací řídící jednotky
Rozcestník
Umístění bloku pro světelnou signalizaci řídící jednotky
Programový blok Brick Status Light je umístěn v paletě Action.
Změna režimu programového bloku
Programový blok Brick Status Light můžeme využívat ve třech základních režimech. Přepínání mezi nimi se provádí pomocí tlačítka v levé spodní části bloku (červeně zvýrazněno).
Režimy programového bloku
Off (vypnuto)
Režim, pomocí kterého je možné vypnout aktivní světelnou signalizaci řídící jednotky.
On (zapnuto)
Režim pro zapnutí světelné signalizace řídící jednotky. Programový blok obsahuje v tomto režimu dva vstupní porty.
Colour - výběr barvy světelné signalizace. Na výběr máme ze tříbarev (viz obrázek níže).
Pulse - pokud je hodnota nastavena na True (pravda) světlo pulzuje, v opačném případě nikoliv.
Reset (resetování)
Režim, který znovu aktivuje výchozí světelnou signalizaci chodu programu (zelené blikající světlo).
Možnosti praktického využití
Světelné kostky můžeme považovat spíše za doplňkovou komponentu LEGO MINDSTORMS NXT. Dají se využít u různých zařízení pro signalizaci nastálého děje. U ultrasonického senzoru se dají využít jako světelný signalizátor pro překročení povolené vzdálenosti od překážky. U dotykového senzoru mohou signalizovat stisknutí jeho tlačítka a podobně.
Využití světelných kostek pro sestrojení jednoduchého semaforu
Použití a ovládání světelných kostek si ukážeme na jednoduchém modelu semaforu, který můžete vidět na obrázku. Skládá se ze tří světelných kostek, které symbolizují všechny tři barvy semaforu (zelená, oranžová a červená). Pomocí speciálních vodičů jsou připojeny k řídící jednotce. Diody se rozsvicují a zhasínají stejně tak, jako na opravdovém semaforu. Nejprve svítí zelená, ke které se následně rozsvítí také oranžová. Ve chvíli, kdy obě tato světla zhasnou, se rozsvítí červená. K červené se po chvíli rozsvítí oranžová a po jejich současném zhasnutí se opět rozsvítí zelená. Tento děj se opakuje, stejně tak jako na křižovatce, stále dokola.
NXT-G
OVLÁDÁNÍ SEMAFORU ZE SVĚTELNÝCH KOSTEK
Pro ovládání semaforu složeného ze světelných kostek budeme v programovacím prostředí NXT-G využívat blok Lamp, který je k jejich ovládání určený. Na následujícím příkladu si vysvětlíme, jako ho správně používat a jak docílit správného chodu improvizovaného dopravního semaforu.
Krok 1 - Rozsvícení zelené diody
Jako první se pokusíme na semaforu rozsvítit zelenou diodu tak, aby svítila po dobu 4 sekund. Použijeme tedy blok Lamp. V jeho nastavení musíme zvolit port, ke kterému je kostka připojena. Chceme aby kostka svítila, musíme tudíž v sekci Action zvolit možnost On. Svit s maximální intenzitou zajistíme zadáním maximální hodnoty 100 v sekci Intensity.
Nyní jsme nastavili vše tak, jak potřebujeme. Musíme ovšem ještě zajistit, aby žárovka svítila po dobu 4 sekund. K tomu použijeme cyklus s pevným počtem průchodů Loop, do kterého blok umístíme. V jeho nastavení musíme zvolit kontrolu pomocí času (Time) a nastavit dobu provádění cyklu na 4 sekundy.
Výsledný cyklus bude vypadat následovně:
Krok 2 - Svit zelené a oranžové diody
Než se na semaforu rozsvítí červené světlo, krátký časový úsek svítí zelené a oranžové světlo současně. My budeme v našem programu chtít, aby se tak dělo po dobu 2 sekund. Postup ke správnému řešení je obdobný jako v předchozím kroku. Budeme potřebovat dva bloky pro ovládání světelných kostek. Zvolíme správné porty, ke kterým jsou zelená a oranžová dioda připojeny. Vybereme, že chceme aby svítily (volba On) a navolíme maximální intezitu svitu (100). Oba bloky umístíme do cyklu s pevným počtem průchodů tak, jak můžete vidět na obrázku. V nastavení bloku opět zvolíme provádění na základě času (Time) a zadáme požadované 2 vteřiny.
Krok 3 - Zhasnutí svítících diod
V okamžiku, kdy se rozsvítí červené světlo semaforu, musí zelená a oranžová kostka zhasnout. Musíme tedy nyní zhasnutí zrealizovat. Jedná se o opačný proces než při rozsvícení světla. Do programu si umístíme dva bloky, které reprezentují kostky připojené k příslušným portům jako zelené a oranžové světlo a v sekci Action jejich nastavení zvolíme možnost Off. Tímto docílíme toho, že po provedení přechozího kroku, kdy budou obě diody svítit 2 vteřiny, zhasnou.
Krok 4 - Rozsvícení červené diody
Přesně v okamžiku, kdy zhasne zelená a oranžová kostka budeme potřebovat, aby se rozsvítila kostka červená. Stejně jako tomu bylo u zelené, tak i zde budeme chtít, aby svítila 4 vteřiny. Nastavení tedy bude naprosto stejné jako u rozsvícení zelené kostky. U bloku pro zelenou kostku navolíme správný port, akci On a maximální intezitu a umístíme ho do cyklu, který se bude provádět po dobu 4 sekund.
Krok 5 - Zajištění neustálého střídání barev na semaforu
Zbývá nám poslední kombinace barev semaforu. Než se rozsvítí opět zelené světlo, musí nejprve po dobu 2 vteřin svítit červená a oranžová kostka zároveň, jako tomu bylo při přechodu ze zelené barvy na červenou. Postup realizace je opět totožný jako v kroku 2. Důležité je zda dbát hlavně na zadávání správných označení portů, abychom si nespletli diody a nerozsvítili je chybně. Oba bloky musí být opět umístěny v cyklu. Za oba dva znovu umístíme bloky, které po průchodu cyklem červené a oranžové světlo zhasnou.
Stejně jako u opravdového semaforu, který řídí dopravní křižovatku, budeme i u našeho chtít, aby se na něm barvy střídaly stále dokola. Musíme tak celou posloupnost příkazů, kterou jsme si popsali v předchozích krocích umístit do cyklu s pevným počtem průchodů Loop. V jeho nastavení musíme provést jediné. V sekci Control zvolit možnost Forever, čímž zajistíme nekonečné provádění celé posloupnosti příkazů.
Program ke stažení
RobotC
Ovládání semaforu ze světelných kostek
Jak jsme si již ukázali v teoretické části této kapitoly, tak rozsvícení a zhasnutí diod světelných kostek se ovládá pomocí stejného příkazu jako ovládání motoru, tedy motor[]. V našem příkladu jde pouze o to, abychom správně sesynchronizovali příkazy tak, aby svítili vždy pouze kostky, které chceme aby svítili. Nakonec budeme požadovat, aby se celý cyklus chodu semaforu opakoval stále dokola.
Krok 1 - Rozsvícení zelené kostky
Jako první se na semaforu pokusíme rozsvítit zelenou kostku, která na křižovatkách symbolizuje možnost volného průjezdu vozidel. Budeme chtít, aby svítila 4 sekundy, protože následně se k ní ještě rozsvítí kostka oranžová a po jejich zhasnutí se rozsvítí kostka červená. Zelenou kostku rozsvítíme pomocí příkazu motor[]. Chceme aby svítila s maximální intenzitou, takže nastavíme hodnotu příkazu na 100. V parametru příkazu musíme správně zadat port, ke kterému je světelná kostka připojena. Nyní musíme zajistit, aby svítila 4 sekundy. Docílíme toho příkazem wait1Msec(). Jako parametr nastavíme 4000 milisekund (4 sekundy). Tímto docílíme oddálení provádění dalšího příkazu o 4 sekundy a tedy svitu zelené kostky po tuto dobu.
// Rozsviceni zelene diody po dobu 4s. motor[motorA] = 100; wait1Msec(4000);
Krok 2 - Svit zelené a oranžové kostky současně
Než se na semaforu rozsvítí červené světlo, svítí nejprve krátký časový úsek zelené a oranžové světlo zároveň. My v našem příkladě chceme, aby světla svítila současně po dobu 2 sekund. Jak rozsvítit kostku po určitou dobu jsme si již ukázali. Nyní pouze přidáme oranžovou kostku.
// Usek 2 vterin, behem kterych sviti zelena a oranzova dioda. motor[motorA] = 100; motor[motorB] = 100; wait1Msec(2000);
Krok 3 - Zhasnutí svítících diod
Ve stejný okamžik, kdy se na semaforu rozsvítí červené světlo, zhasne světlo zelené a oranžové. Zhasnutí docílíme opačným postupem než rozsvícení. Do příkazu motor[] zadáme nulovou hodnotu intenzity světla.
// Zhasnuti zelene a oranzove diody. motor[motorA] = 0; motor[motorB] = 0;
Krok 4 - Rozsvícení červené diody
Jakmile zhasne zelené a červené světlo, rozsvítí se na semaforu červené. Pro jeho rozsvícení stačí opět použít příkaz motor[]. Zadat maximální intenzitu svitu a uvést správně příslušný port.
// Rozviceni cervene diody na dobu 4s. motor[motorC] = 100; wait1Msec(4000);
Krok 5 - Zajištění neustálého střídání barev na semaforu
Nyní známe všechny kroky, pomocí kterých naprogramujeme i zbývající dva. Prvním z nich bude současný svit červené a oranžové barvy po dobu 2 sekund, po jejichž zhasnutí se rozsvítí zelené světlo. Na každém dopravním semaforu se ale toto střídání barev děje neustále dokola, neprobíhá pouze jednou. Musíme tedy zajistit ještě jejich střídání stále dokola. Docílíme toho umístěním veškerých příkazů pro střídání barev do nekonečného cyklu while(). Jak poté bude výsledný program vypadat můžete vidět níže.
Výsledný program pro semafor
task main() { // Nekonecny cyklus zajistujici neustale opakovani. while(1 == 1) { // Rozsviceni zelene diody po dobu 4s. motor[motorA] = 100; wait1Msec(4000); // Usek 2 vterin, behem kterych sviti zelena a oranzova dioda. motor[motorA] = 100; motor[motorB] = 100; wait1Msec(2000); // Zhasnuti zelene a oranzove diody. motor[motorA] = 0; motor[motorB] = 0; // Rozviceni cervene diody na dobu 4s. motor[motorC] = 100; wait1Msec(4000); // Usek 2 vterin, behem kterych sviti cervena a oranzova dioda. motor[motorB] = 100; motor[motorC] = 100; wait1Msec(2000); // Zhasnuti cervene a oranzove diody. motor[motorB] = 0; motor[motorC] = 0; } }
Popis programu
V programu je pomocí příkazu motor[] zajištěno vždy rozsvícení příslušné kostky na maximum (100%). Pokud svítí pouze zelená nebo pouze červená kostka, je doba svitu nastavena na 4 sekundy. Přechodný stav, kdy se rozsvicuje při přechodu ze zelené na červenou a opačně také oranžová dioda jsme zkrátili na 2 sekundy. Neustálé opakování chodu semaforu zajišťuje nekonečný cyklus while().