KURZ: Motor a jeho pohyb
- Podrobnosti
- Mgr. Jan Baťko
- Aktualizováno: 06.09.2017
- Zobrazení: 18697
KAPITOLY
Pro pohyb a natáčení robotů a jejich jednotlivých částí můžeme využít Interaktivní servomotor. Tento motor je kombinací motoru zajišťujícího otáčení a senzoru měřícího míru natočení.
Vlastnosti motoru
Nejdůležitější vlastností motoru je výkon, směr a port, ke kterému je motor připojen.
Výkon motoru: udává intenzitu (rychlost) motoru jakou se motor otáčí. Hodnotu výkonu lze nastavit v procentech, kde 100 % je maximální výkon.
Směr: určuje směr otáčení motoru (vpřed, vzad či zastavení).
Port: udává port řídící jednotky (A, B, C) ke kterému je motor připojen.
Určení míry natočení
Otáčení motoru zaznamenávají optická čidla poskytující zpětnou vazbu. Tuto hodnotu lze pomocí programu načíst, ale je též automaticky využívána k vykonání různých pohybových sekvencí. Pohyb lze realizovat čtyřmi různými způsoby:
Stupně
Nastavením stupňů v rozsahu 0 až 360° motoru udáváme, o kolik stupňů se má otočit. Úhel natočení je motorem zjišťován a korigován zpětně přes počitadlo otáček. Protože se nejedná o krokový motor, není pohyb zcela přesný a je tak nutné počítat s určitou odchylkou v řádu jednotek. V případě zadání malého natočení pak i s případným rozmitáním motoru.
Rotace
Vyjádření míry natočení pomocí rotace motoru udává, kolik otočení kolem své osy má být k danému pohybu vykonáno. Jedna rotace motoru odpovídá 360°. Natočení pomocí rotace využijeme pro pohyb po delší trase známé délky.
Sekundy
Sekundy určují, po jakou dobu se má provádět otáčení motoru. Chceme-li tímto způsobem stanovit délku dráhy po které se robot bude pohybovat, musíme počítat také s nastaveným výkonem motoru. Během stejného časového úseku totiž motor s menším výkonem provede méně otáček. Vyjádření míry natočení pomocí času tedy není pro potřeby přesného stanovení délky dráhy příliš přesné.
Neomezeně
Poslední možností nastavení míry natočení je neomezený pohyb motoru. Jak již název naznačuje, nejedná se o časově ani parametrově omezený pohyb. Vykonávání je prováděno po celou dobu chodu programu. Tento způsob tedy neskýtá možnost jakkoliv ovlivnit dobu či míru natočení.
Použití motoru v programovacím prostředí
NXT-G
Blok pro ovládání motoru
Rozcestník
Umístění bloku
Programový blok Motor je umístěn v paletě Complete > Action.
Popis bloku
Blok Motor obsahuje celkem osm konektorů sloužících k propojení s dalšími programovými bloky:
Port - vyjadřuje, ke kterému výstupnímu portu (A, B, C) je motor připojen.
Direction - označuje směr otáčení motoru (vpřed či vzad).
Action - nastavený typ ovládání akcelerace motoru.
Power - intenzita otáčení motoru.
Control Motor Power - regulace výkonu motoru.
Duration - délka trvání pohybu.
Wait for Completion - ukončení činnosti před dalším krokem programu.
Next Action - vyjadřuje, zda bude po ukončení akce motor pokračovat v činnosti či nikoliv.
Direction out - řízení pohybu motoru během provádění činnosti bloků.
Degrees out - vyjadřuje, o kolik stupňů se motor otočí během provádění činnosti bloků.
Aktuální nastavení bloku označují tři ikony v jeho dolní části. První označuje směr otáčení , druhá intenzitu otáčení motoru a třetí značí délku trvání pohybu . Číslo v horní části bloku označuje, ke kterému výstupnímu portu je motor připojen.
Parametry bloku
Port: udává port řídící jednotky (A, B, C) ke kterému je motor připojen.
Direction: určuje směr otáčení motoru (vpřed, vzad či zastavení).
Action: umožňuje třemi způsoby ovládat akceleraci motoru.
- Ramp Up - pomalé zvyšování rychlosti dokud není dosaženo nastavené intenzity otáčení motoru (power).
- Ramp Down - pomalé snižování intenzity otáčení motoru, dokud není dosaženo nulové hodnoty.
- Constant - plného výkonu je dosaženo ihned. Zastavení je dosaženo buď setrvačností motoru nebo dalším nastavením (Next Action).
Power: intenzita (rychlost) otáčení motoru nastavitelná v procentech (100% je maximum).
Control: zapnutí regulace výkonu motoru.
Duration: možnost nastavení délky trvání pohybu. Skýtá čtyři možnosti nastavení:
- míra natočení ve stupních (Degrees),
- míra natočení vyjádřená pomocí otáček motoru (Rotations),
- doba chodu motoru při daném výkonu v sekundách (Seconds),
- neomezený běh motoru po dobu průběhu programu (Unlimited).
Wait: vybráním této možnosti dáváme motoru pokyn ukončit svoji činnost ještě před dalším krokem programu.
Next Action: udává, zda se má po ukončení akce motor zastavit (Brake) nebo pokračovat v chodu (Coast).
RobotC
Příkazy a metody
V programu RobotC se ovládání motoru provádí v podstatě pomocí jediného příkazu. Další chování ovlivňují zadané hodnoty a proměnné.
Rozcestník
Nastavení a ovládání motoru
Veškeré ovládání motoru v programovacím prostředí RobotC je prováděno pomocí příkazu motor[]. V tomto příkazu označujeme jak port, ke kterému je motor připojen, tak i intenzitu jeho otáčení a směr otáčení
Port: výraz v závorce označuje, ke kterému portu (motorA, motorB nebo motorC) řídící jednotky je motor připojen.
motor[motorA] = 100; // Motor je pripojen k portu A a otaci se smerem vpred s maximalnim vykonem.
Intenzita otáčení motoru: udává na stupnici od 0 do 100% výkon motoru.
motor[motorA] = 75; // Motor je pripojen k portu A a otaci se smerem vpred s vykonem 75%.
Směr otáčení motoru: je určen znaménkem před hodnotou určující výkon motoru. Kladné číslo vyjadřuje otáčení vpřed, záporné vzad.
motor[motorA] = -100; // Motor je pripojen k portu A a otaci se smerem vzad s maximalnim vykonem.
Ovlivnění doby otáčení motoru
Délka trvání pohybu je nastavována v milisekundách pomocí příkazu wait1Msec() nebo v desítkách milisekund příkazem wait10Msec().
motor[motorA] = 100; // Motor je pripojen k portu A a otaci se smerem vpred s maximalnim vykonem. wait1Msec(4000); // Otaceni motoru je provadeno 4 sekundy, po kterych je pohyb ukoncen a program pokracuje dale. motor[motorA] = 0; // Vykon motoru je nastaven na nulu.
Možnosti natočení motoru
Natočení motoru je možné provádět příkazem bMotorReflected[], díky němuž se motor pootočí o 180 stupňů. Nabývá hodnot true nebo false.
bMotorReflected[motorA] = true; // Motor A se pootoci o 180 stupnu. bMotorReflected[motorA] = false; // Motor A se nepootoci o 180 stupnu.
Druhou možností, která umožňuje oproti předchozímu příkazu libovolné natočení, je pomocí čítače otáček motoru. Čítač zaznamenává, o kolik stupňů (0 - 360) se motor pootočil. Pracuje se s ním pomocí příkazu nMotorEncoder[]. Na příkladu můžete vidět, jak pomocí čítače pootočit motor o 360 stupňů.
nMotorEncoder[motorB] = 0; // Nulovani citace motoru B. while(nMotorEncoder[motorB] < 360) // Nastavení podminky cyklu (dokud citac motoru B nedosahne 360 stupnu...). { motor[motorB] = 75; // ...tak se motor B otaci s vykonem 75%. } motor[motorB] = 0; // Nastaveni vykonu motoru B na 0.
EV3
BLOK PRO OVLÁDÁNÍ SERVOMOTORU
Rozcestník
- Umístění bloku
- Výběr výstupního portu
- Změna režimu
- Přidání vstupního portu
- Režimy programového bloku
Blok pro ovládání lineárního motoru
Rozcestník
- Umístění bloku
- Výběr výstupního portu
- Změna režimu
- Přidání vstupního portu
- Režimy programového bloku
Umístění bloku
Programový blok Large Motor je umístěn v paletě Action.
Výběr výstupního portu
Před započetím práce s motorem je nejprve nutné zvolit výstupní port (A, B, C nebo D) řídící jednotky, ke kterému je motor připojen (červeně zvýrazněno).
Změna režimu
Programový blok Large Motor můžeme využívat v pěti režimech. Přepínání mezi nimi se provádí pomocí tlačítka v levé spodní části (červeně zvýrazněno).
Přidání vstupního portu
Po kliknutí do pole pro výběr výstupních portů pro řízení motorů je možné vybrat první možnost Wired, po které se do programového bloku přidá vstupní port Port (červeně zvýrazněno).
Režimy programového bloku
Off (vypnuto)
Vypnutí chodu motoru. V tomto řežimu je aktivní pouze jediný vstupní port.
Break at End - způsob zastavení motoru. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On (Zapnuto)
Neomezený běh motoru po dobu průběhu programu. V tomto řežimu je aktivní pouze jediný vstupní port.
Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
On for seconds (otáčení po zadaný časový úsek)
Ovlivnění chodu motoru pomocí času. V tomto režimu máme k dispozici tři vstupní porty.
Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Seconds - doba otáčení motoru udávaná ve vteřinách.
Break at End - způsob zastavení motoru. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On for Degrees (otočení o zadaný úhel)
Ovlivnění chodu motoru pomocí úhlových stupňů. V tomto režimu máme k dispozici tři vstupní porty.
Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Degrees - míra natočení zadávaná v úhlových stupních od 0 do 360°.
Break at End - způsob zastavení motoru. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On for Rotations (otočení o počet otáček)
Ovlivnění chodu motoru pomocí počtu nastavených otáček. V tomto režimu máme k dispozici tři vstupní porty.
Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Rotations - počet prováděných otáček motoru.
Break at End - způsob zastavení motoru. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
Programový blok Medium Motor je umístěn na paletě Action.
Výběr výstupního portu
Před započetím práce s motorem je nejprve nutné zvolit výstupní port (A, B, C nebo D) řídící jednotky, ke kterému je motor připojen (červeně zvýrazněno).
Změna režimu
Programový blok Medium Motor můžeme využívat v pěti režimech. Přepínání mezi nimi se provádí pomocí tlačítka v levé spodní části (červeně zvýrazněno).
Přidání vstupního portu
Po kliknutí do pole pro výběr výstupních portů pro řízení motorů je možné vybrat první možnost Wired, po které se do programového bloku přidá vstupní port Port (červeně zvýrazněno).
Režimy programového bloku
Off (Vypnuto)
Vypnutí chodu motoru. V tomto řežimu je aktivní pouze jediný vstupní port.
Break at End - způsob zastavení motoru. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On (zapnuto)
Neomezený běh motoru po dobu průběhu programu. V tomto řežimu je aktivní pouze jediný vstupní port.
Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
On for Seconds (otáčení po zadaný časový úsek)
Ovlivnění chodu motoru pomocí času. V tomto režimu máme k dispozici tři vstupní porty.
Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Seconds - doba otáčení motoru udávaná ve vteřinách.
Break at End - způsob zastavení motoru. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On for Degrees (otočení o zadaný úhel)
Ovlivnění chodu motoru pomocí úhlových stupňů. V tomto režimu máme k dispozici tři vstupní porty.
Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Degrees - míra natočení zadávaná v úhlových stupních od 0 do 360°.
Break at End - způsob zastavení motoru. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On for Rotations (otočení o určitý počet otáček)
Ovlivnění chodu motoru pomocí počtu nastavených otáček. V tomto režimu máme k dispozici tři vstupní porty.
Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Rotations - počet prováděných otáček motoru.
Break at End - způsob zastavení motoru. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
Možnosti praktického využití
Motor se používá u konstrukcí, ve kterých je potřeba využí jeho hnací sílu. Narozdíl od zařízení, která se pohybují na kolech do různých směrů, jejichž využití jsme popsali v kapitole Pohyb dvou motorů, se zde jedná o pohyb většinou statických konstruktů. Je u nich možné využít pouze jeden motor. Jako příklad můžeme uvést použití motoru pro pohánění simulace třídící linky nebo pásového dopravníku.
Využití motoru pro pohon zařízení
Možnost využití jednoho motoru ukážeme na praktické ukázce. Na obrázku můžete vidět jednoduchý model časovače. Jedná se o zařízení, které slouží ke změření předem zadaného času. Kostru tvoří pomyslný ciferník s hodinovou ručičkou, která je poháněna motorem stavebnice LEGO MINDSTORMS NXT, který je napojen na řídící jednotku.
NXT-G
OVLÁDÁNÍ ČASOVAČE POHÁNĚNÉHO MOTOREM
V následujícím příkladu představíme vytváření programu pro ovládání jednoduchého časovače v programovacím prostředí NXT-G. Bude se jednat o jednoduchý konstrukt s využitím jednoho motoru, který zde bude sloužit jako ovládací zařízení. Princip zařízení bude prostý. Po uplynutí 15 vteřin se ručička přesune o 90 stupňů po směru hodinových ručiček. Kolik 15 vteřinových úseků bude měřeno, musí být také programově ošetřeno. Pomocí tohoto zařízení tak budeme moci například odměřit jednu minutu nebo stopovat také delší časové úseky.
Krok 1 - Natočení o 90 stupňů
Pokaždé když uplyne 15 vteřin budeme chtít, aby se pomyslná hodinová ručička pootočila o 90 stupňů, tedy o čtvrt hodiny. Jelikož tento úkon budeme vykonávat pomocí motoru, využijeme tedy blok Motor. Zvolíme si příslušný port pro připojení a směr tak, aby se ručička otáčela ve směru hodinových ručiček. Abychom zaručili co nejvyšší přesnost měření, zvolili jsme sílu motoru 40%. V případě, že se ale ručička otáčí vyšší rychlostí na krátký úsek, jako v tomto případě, musíme počítat s tím, že po skončení měření můžeme zaregistrovat odchylku v její konečné pozici (nebude umístěna přesně ve výchozí pozici). Tento jev je následkem prudkého zastavování servomotoru z vyšší rychlosti na krátkém úseku. Projeví se hlavně v případě, že budeme měřit delší časový úsek. Při měření krátkých úseků, jako například jedna minuta, nebude odchylka znatelná. Poslední volbou, kterou musíme učinit je nastavení trvání pohybu. Použijeme možnost měření otáčení ve stupních (Degrees) a zadáme hodnotu 90.
Krok 2 - Provádění po 15 vteřinách
V dalším kroku potřebujeme zajistit, aby se ručička nenatáčela okamžitě, ale až po uplynutí 15 vteřin. Potřebujeme tedy použít blok, který oddálí provádění dalšího příkazu. Tímto blokem je v programovacím prostředí NXT-G blok Wait. V sekci Control musíme zvolit, že chceme využít řízení časem. Jako hodnotu pro čekání poté zvolíme požadovaných 15 sekund a blok umístíme před blok Motor. Nyní se tedy po spuštění programu vyčká 15 vteřin a poté se ručička pootočí o 90 stupňů.
Krok 3 - Zajištění opakovaného provádění
V současné podobě programu by se pouze jednou čekalo 15 vteřin a poté by se provedlo jedno natočení ručičky. My ale chceme, aby se měřil tak dlouhý časový úsek, jak si uživatel navolí. Pokud chceme provést opakované provádění jednoho nebo několika příkazů, použijeme v programovacím prostředí NXT-G blok Loop. Do něj musíme umístit oba příkazy z předchozích kroků. V sekci Control cyklu poté musíme zvolit řízení pomocí čítače (Count). V příkladu jsme zvolili demonstraci měření minutového časového úseku. Do pole Count tedy musíme zadat měření čtyř patnáctivteřinových úseků. Díky tomu se provedou příkazy umístěné v cyklu 4x a časovač tedy odměří jednu minutu.
Výsledný program
Při správném provedení jednotlivých kroků a umístění bloků bude poté výsledný program vypadat následovně:
Program ke stažení
Rozšiřující úkol
Zařiďte, aby po každém přesunutí ručičky časovače o devadesátistupňový úsek zaznělo z řídící kostky pípnutí či jiná zvuková signalizace. Jiný a výraznější signál použijte pro oznámení konce odpočítávání.
RobotC
Ovládání časovače poháněného motorem
Funkci časovače budeme demonstrovat na příkladu, ve kterém se budeme pokoušet odměřit předem zadaný časový úsek. Uživatel v úvodní deklaraci konstant zadá jak dlouhou dobu chce změřit a po spuštění programu započne odpočítávání. Po každých 15 vteřinách se vteřinová ručička posune o čtvrtinu ciferníku (čtvrt, půl, třičtvrtě a celá).
Krok 1 - Deklarace konstant
Při vytváření programu budeme využívat dvě hodnoty. První bude doba, po jejímž uplynutí ručička urazí čtvrtinu obvodu ciferníku. Ta bude pokaždé 15 vteřin. Druhá hodnota, která bude volitelná, určuje, jak dlouhou dobu budeme pomocí časovače měřit. Jedná se o počet patnáctivteřinových úseků.
Hodnoty, které nadeklarujeme v úvodu programu a pak na ně pouze odkazujeme pomocí jejich názvu, nazýváme konstanty. Pro potřeby našeho programu si tedy nadeklarujeme konstantu doba_otoceni jejíž hodnota bude 15 sekund a doba_mereni do níž se bude zadávat jak dlouho se bude pomocí čítače měřit.
const int doba_otoceni = 15000; // Deklarovany 15 vterinovy usek, po kterem se rucicka otoci o ctvrtinu ciferniku. const int doba_mereni = 4; // Pocet 15 vterinovych useku, ktere maji byt zmereny (cislo 4 odpovida jedne minute).
Krok 2 - Otočení ručičky o 90 stupňů
Než začneme měřit konkrétní časové úseky, musíme zajistit, aby se ručička otáčela po čtvrtinách ciferníku, tedy pokaždé o 90 stupňů. Při takto přesném otočení použijeme snímač otáček motoru. Jako pokaždé, když s ním začínáme pracovat, musíme snímač vynulovat pomocí příkazu nMotorEncoder[], do kterého přiřadíme číslo 0. Dále potřebujeme, aby se ručička začala otáčet a zastavila se až ve chvíli, kdy dosáhne motor natočení o 90 stupňů. Použijeme tedy cyklus s podmínkou na začátku while(). Příslušná podmínka tedy bude obsahovat výraz vyjadřující, že se bude motor otáčet, dokud hodnota snímače nebude rovna 90 stupňům (nMotorEncoder[motorA] < 90). Tělo cyklu poté musí obsahovat příkaz, který samotný motor rozpohybuje. Ovládání motorů je možné pomocí příkazu motor[], do nějž přiřadíme rychlost otáčení v procentech. V našem případě jsme zvolili hodnotu 15%, která by mohla být pro chod hodinové ručičky optimální.
Ručička v našem programu funguje jako signalizátor, který se otočí po uplynutí 15 vteřin. Musíme tedy tento časový úsek nastavit. Potřebujeme proto oddálit provádění cyklu. K tomuto účelu slouží příkaz wait1Msec(), jehož parametrem bude konstanta doba_otoceni, jejíž hodnota je příslušných 15 vteřin.
nMotorEncoder[motorA] = 0; // Nulovani snímače otáček pri kazdem pruchodu cyklem. wait1Msec(doba_otoceni); // 15 vterin po kterych je provedeno otoceni rucicky. while(nMotorEncoder[motorA] < 90) // Cyklus zajistujici otoceni rucicky o 90 stupnu. { motor[motorA] = 15; }
Krok 3 - Zajištění měření času
Poslední věcí, kterou musíme pro celkovou funkčnost programu zajistit, je provádění předchozího kroku tolikrát, kolikrát si v úvodní deklaraci zvolíme. Časovač bude měřit přesně tolik patnáctivteřinových úseků, kolik jich bude nadeklarováno v konstantě s názvem doba_mereni. Pokud bychom použili konstrukci, kterou jsme vytvořili v předchozím kroku, 15 vteřin by se čekalo na provedení dalších příkazů, poté by se ručička otočila o 90 stupňů a tím by program skončil bez ohledu na hodnotu proměnné doba_mereni.
Jelikož počet natočení bude vždy pevně daný, použijeme pro jeho realizaci cyklus s pevným počtem průchodů for(). Cyklus obsahuje tři části. Nejprve musíme nastavit inicializační proměnnou. Zvolíme si tedy proměnou s názvem i, která bude datového typu integer, do níž přiřadíme hodnotu 0 (int i = 0;). Druhá část obsahuje podmínku, která musí být splněna. V našem programu chceme, aby se měření provádělo tak dlouho, jak je nadeklarováno v konstantě doba_mereni. To znamená, že se cyklus bude provádět, dokud bude hodnota proměnné i nižší než hodnota proměnné doba_mereni (i < doba_mereni). Třetí částí cyklu je krok provádění. Do naší proměnné i se bude ukládat počet průchodů cyklem. Při každém provedení se tedy její hodnota zvýší o jedničku. Inkrementace, neboli zvýšení hodnoty o 1 se v RobotC zapisuje následovně - i++. Do těla takto vytvořeného cyklu poté umístíme všechny příkazy z předchozího kroku. Kompletní podobu cyklu můžete vidět níže.
Pro zajištění správného chodu motoru je dobré uvést motor po každém průchodu cyklem do klidu. Docílíme toho příkazem motor[], do nějž přiřadíme hodnotu 0.
for (int i = 0; i<doba_mereni; i++) // Cyklus pro mereni casu. { nMotorEncoder[motorA] = 0; // Nulovani encoderu pri kazdem pruchodu cyklem. wait1Msec(doba_otoceni); // 15 vterin po kterych je provedeno otoceni rucicky. while(nMotorEncoder[motorA] < 90) // Cyklus zajistujici otoceni rucicky o 90 stupnu. { motor[motorA] = 15; } motor[motorA] = 0; }
Výsledný program pro časovač
task main() { const int doba_otoceni = 15000; // Deklarovany 15 vterinovy usek, po kterem se rucicka otoci o ctvrtinu ciferniku. const int doba_mereni = 4; // Pocet 15 vterinovych useku, ktere maji byt zmereny (cislo 4 odpovida jedne minute). for (int i = 0; i<doba_mereni; i++) // Cyklus pro mereni casu. { nMotorEncoder[motorA] = 0; // Nulovani encoderu pri kazdem pruchodu cyklem. wait1Msec(doba_otoceni); // 15 vterin po kterych je provedeno otoceni rucicky. while(nMotorEncoder[motorA] < 90) // Cyklus zajistujici otoceni rucicky o 90 stupnu. { motor[motorA] = 15; } motor[motorA] = 0; } }
Poznámka: Zvýšení rychlosti otáčení motoru na hodnotu vyšší než 15% může mít za následek přetočení motoru o úhel větší než 90 stupňů. Důvodem je pomalé zastavení servomotoru z vyšší rychlosti na krátkém úseku.
Program ke stažení
Rozšiřující úkol
Zařiďte, aby po každém přesunutí ručičky časovače o devadesátistupňový úsek zaznělo z řídící kostky pípnutí či jiná zvuková signalizace. Jiný a výraznější signál použijte pro oznámení konce odpočítávání.