KURZ: Motor a jeho pohyb

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 MotorDragged Motor je umístěn v paletě icon completeCompleteAction Action.

NXTG Motor rozbaleny

 

Popis bloku

Blok MotorDragged Motor obsahuje celkem osm konektorů sloužících k propojení s dalšími programovými bloky:

Port Port - vyjadřuje, ke kterému výstupnímu portu (A, B, C) je motor připojen.

Direction Direction - označuje směr otáčení motoru (vpřed či vzad).

Action Action - nastavený typ ovládání akcelerace motoru.

Power Power - intenzita otáčení motoru.

SoundMode Control Motor Power - regulace výkonu motoru.

Goal Duration - délka trvání pohybu.

Wait Wait for Completion - ukončení činnosti před dalším krokem programu.

StopAfter Next Action - vyjadřuje, zda bude po ukončení akce motor pokračovat v činnosti či nikoliv.

Direction Direction out - řízení pohybu motoru během provádění činnosti bloků.

Degreesout 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í Forward, druhá intenzitu otáčení motoru Power a třetí značí délku trvání pohybu Infinity. Číslo v horní části bloku označuje, ke kterému výstupnímu portu je motor připojen.

 

Parametry bloku

motor single

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

Blok pro ovládání lineárního motoru

Rozcestník


Umístění bloku

Programový blok Large Motor je umístěn v paletě Action Action.

UMISTENI LARGE


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).

LARGE REZIMY


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).

 LARGE REZIMY


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 Identification 515 Port Port (červeně zvýrazněno).

LARGE WIRED


Režimy programového bloku

Off (vypnuto)

Vypnutí chodu motoru. V tomto řežimu  je aktivní pouze jediný vstupní port.

LARGE OFF

Identification 508 BrakeAtEnd BrakeBreak 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.

LARGE ON

Identification 203 Speed Plus75 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.

LARGE SECONDS

Identification 203 Speed Plus75 Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).

Identification 240 Time Seconds - doba otáčení motoru udávaná ve vteřinách.

Identification 508 BrakeAtEnd BrakeBreak 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.

LARGE DEGREES

Identification 203 Speed Plus75 Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).

Identification 288 DegreesAngle Plus360 Degrees - míra natočení zadávaná v úhlových stupních od 0 do 360°.

Identification 508 BrakeAtEnd BrakeBreak 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.

LARGE ROTATIONS

Identification 203 Speed Plus75 Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).

Identification 503 NumberRotations Rotations - počet prováděných otáček motoru.

Identification 508 BrakeAtEnd BrakeBreak at End - způsob zastavení motoru. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.

 

 



Umístění bloku

Programový blok Medium Motor je umístěn na paletě Action Action.

UMISTENI MIDDLE 


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).

MIDDLE PORT


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).

MIDDLE REZIMY


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 Identification 515 Port Port (červeně zvýrazněno).

MEDIUM WIRED


Režimy programového bloku

Off (Vypnuto)

Vypnutí chodu motoru. V tomto řežimu  je aktivní pouze jediný vstupní port.

MIDDLE OFF

Identification 508 BrakeAtEnd BrakeBreak 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.

MIDDLE ON

Identification 203 Speed Plus75 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.

MIDDLE SECONDS

Identification 203 Speed Plus75 Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).

Identification 240 Time Seconds - doba otáčení motoru udávaná ve vteřinách.

Identification 508 BrakeAtEnd BrakeBreak 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.

MIDDLE DEGREES

Identification 203 Speed Plus75 Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).

Identification 288 DegreesAngle Plus360 Degrees - míra natočení zadávaná v úhlových stupních od 0 do 360°.

Identification 508 BrakeAtEnd BrakeBreak 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.

MIDDLE ROTATIONS

Identification 203 Speed Plus75 Power - rychlost otáčení motoru udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).

Identification 503 NumberRotations Rotations - počet prováděných otáček motoru.

Identification 508 BrakeAtEnd BrakeBreak 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.

casovac foto

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  MotorDragged 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.

motor

 
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 WaitForTimeDrag 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 MotorDragged Motor. Nyní se tedy po spuštění programu vyčká 15 vteřin a poté se ručička pootočí o 90 stupňů.

wait

 
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 LoopBig 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.

 loop

 
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ě:

hotovy program

 
Program ke stažení

Stáhnout ve formátu .rbt

 

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í

Stáhnout ve formátu .c

 

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í.

1 1 1 1 1 1 1 1 1 1 Hodnocení 3.00 (2 hodnocení)

Nemáte oprávnění přidat komentář.
Komentáře mohou přidávat pouze registrovaní uživatelé, kteří neporušují pravidla diskuze.