4.2
Shieldy
Shield (štít) je periferií, která tvoří mezistupeň mezi Arduinem a dalšími periferiemi. Může v sobě některé další periferie integrovat (tlačítka, displej apod.) nebo může zprostředkovat připojení jiných, se kterými Arduino samo spolupracovat neumí, nebo je spolupráce s nimi obtížná (přinapájení, předzpracování signálu). Pojmenování shield vzniklo z toho, že často překryje původní konektory Arduina.
4.2.1
Motory
Motorům, kterým nestačí energie dodaná samotným Arduinem, musíme zajistit jiné napájení, které bude Arduino pouze regulovat. Dále tu máme krokové motory s úplně jiným principem fungování. Množí se součástky, které je potřeba vložit mezi výstupy mikrořadiče a vstupy motoru. Nejpraktičtějším řešením je integrovat tyto součástky do jednoho modulu.
4.2.1.1
DC motory
Shieldy (moduly) pro řízení DC motorů obsahují tzv. H můstek, oblíbeným je např. L298N (je dokonce dvojitý – pro 2 DC nebo 1 krokový). S rozsahem vstupního napětí 5 V a 7–35 V (až 46 V) poskytuje výkon do 25 W (proud do 2 A na most). [13]
+

Obr. 28. Modul s L298N dvojitým H můstkem
Začněme napájením – pokud máme zdroj napětí 5 V, připojíme jej ke GND (−) a 5 V (+) a odstraníme propojku za svorkovnicí (stačí přepojit tak, aby jeden kolík zůstal volný – nechceme propojku ztratit…). Jestliže chceme použít zdroj v rozsahu 7–35 V, použijeme vstupy VCC a GND, propojku zapojíme a 5 V naopak poskytuje výstup z integrovaného stabilizátoru. Výstupy do motorů komentovat nepotřebujeme … snad jen, že pokud nám nevyhovuje smysl jejich otáčení, prohodíme polaritu.
Vstupy ENA, IN1 a IN2 slouží k řízení motoru A:
- ENA – je-li propojka spojena, motor bude buď v klidu, nebo v maximálních otáčkách, je-li rozpojena, krajní pin slouží ke vstupu PWM signálu k proměnné regulaci otáček.
- IN1, IN2 – logické vstupy – mají-li stejnou hodnotu, motor je v klidu, mají-li různou hodnotu, motor jede a směr je určen tím, který z nich má hodnotu HIGH a který LOW.
Zbylé ENB, IN4 a IN3 slouží analogicky k řízení motoru B. Při tvorbě zdrojového kódu lze vyjít z funkce motor() (odd. 4.1.7) a uvědomit si rozdíl v ovládání smyslu otáčení hřídele:
// rozsah otáček motoru v %
#define MOTOR_MIN -100
#define MOTOR_MAX 100
uint8_t po_Motor[] = {5,6,7}; // 1. pin PWM pro řízení výkonu
…
void motor(int8_t procenta) // nastaví směr a otáčky motoru
{
uint8_t soaVykon; // úroveň signálu PWM pro motor
soaVykon = abs(map(procenta,MOTOR_MIN,MOTOR_MAX,-255,255)); // výkon nezáleží na směru
if(procenta == 0) // klid
{
soaVykon = 0; // pro jistotu
digitalWrite(po_Motor[1],LOW);
digitalWrite(po_Motor[2],LOW);
}
else if(procenta > 0) // kladný směr
{
digitalWrite(po_Motor[1],LOW);
digitalWrite(po_Motor[2],HIGH);
}
else // záporný směr
{
digitalWrite(po_Motor[1],HiGH);
digitalWrite(po_Motor[2],LOW);
}
analogWrite(po_Motor[0],soaVykon);
}
4.2.1.2
Krokové motory
Krokové motory se od DC motorů liší funkcí i konstrukcí. Jedna otáčka jeho rotoru je rozdělena na tzv. kroky (typicky 200 kroků), v nichž je schopen zastavit a setrvat. Jeho rotor je tvořen permanentním magnetem, jehož jeden pól k sobě přitáhne jedna z cívek rozmístěných po obvodu statoru. Motor je tedy řízen impulzy do jednotlivých cívek, tedy digitálně.
+

Obr. 29. Ukázky krokových motorů, vlevo s vnitřním rotorem, vpravo s vnějším rotorem tvořeným prstencovým permanentním magnetem
Krokový motor odebírá proud i v době, kdy stojí (drží krok), protože k fixaci v dané poloze potřebuje stále energii, která jej do ní přivedla. Paradoxně se tak více zahřívá než při otáčení rotoru a také má trvale vysokou spotřebu. Z hlediska krouticího momentu, přesnosti nastavení polohy a spotřeby energie se používají různé způsoby řízení, kde rozhoduje:
- zapojení
- výkon
- přesnost
+

Obr. 30. Náčrtek rozdílného zapojení pro unipolární a bipolární řízení krokového motoru
Krokový motor nejsme schopni provozovat s Arduinem bez přídavného napájení. Jestliže nepotřebujeme mikrokroky, lze použít tranzistorové pole (např. ULN2003A) nebo stejný modul s L298N můstkem jako v minulém oddílu, jen místo dvou DC připojíme jeden krokový motor.
U Arduina vyčleníme pro řízení motoru čtyři logické výstupy, případně ještě pátý, pokud chceme softwarově ovládat i povolení/zákaz činnosti motoru. Pak stačí do jednotlivých výstupů posílat pulzy v pořadí podle tabulek v [15] nebo [16]. Jestliže nechceme sami řídit jednotlivé pulzy, můžeme použít objekt Stepper ze stejnojmenné vestavěné knihovny (Stepper.h, viz referenční příručka Arduino IDE).
Jiná situace nastává, pokud potřebujeme mikrokroky, např. pro pohony 3D tiskáren, plotterů, gravírek apod. Pak využijeme pokročilých driverů, např. Pololu A4988 nebo DRV8825. Nastavení počtu mikrokroků na jeden „řádný“ krok se nastavuje pevně pomocí propojení určených vstupů. K řízení motoru pak stačí využít pouze tři logické piny (povolit, směr, krok). Nicméně v 3D tiskárně pracují nejméně čtyři krokové motory a další výstupní i vstupní periferie, takže se vyrábějí ještě další shieldy, které propojí Arduino s Pololu drivery a ostatními periferiemi. Asi nejznámějším je RAMPS (viz https://reprap.org/wiki/RAMPS_1.4).