11. diel - Arduino - Druhy motorov a programovanie servo motora
V dnešnej lekcii HW Arduino tutoriálu si predstavíme ďalší druh elektronických komponentov. Povieme si základné informácie o motoroch, ukážeme si, aké existujú druhy motorov a na čo ich možno použiť. Tiež si jeden z motorov spoločne zapojíme a naprogramujeme. Naučíme sa tak pracovať so servo motorom.
Výber motorov
Začneme tým, že si povieme, čo to vôbec motor je. Motor by sa dal definovať ako elektrický točivý stroj, do tejto kategórie sa okrem iného zaraďuje napríklad generátor. Opakom točivých strojov sú netočivé stroje. Z tejto kategórie môžeme napríklad uviesť ako príklad transformátor.
Točivý elektrický stroj, v našom prípade motor, mení elektrickú energiu na mechanickú energiu. Môže fungovať aj opačne a meniť mechanickú energiu na elektrickú energiu. Krútiace elektrické stroje sa potom ďalej delia na ďalšie kategórie.
Poďme sa teda pozrieť na konkrétne druhy motorov:
Na obrázku vidíme sedem rôznych motorov:
- servo motor,
- krokový motor,
- ss. motor s kódovačom,
- servo motor (iný model),
- ss. motor,
- vibračný motor,
- prevodový motor.
Projekt vytvoríme vo vývojovom prostredí Tinkercad, práca tu je veľmi jednoduchá a príjemná. Virtuálne prostredie Tinkercad ponúka všetkých sedem druhov motorov uvedených na obrázku. Prejdeme si všetko od základov - vybranie motora, zapojenie podľa schémy a nakoniec naprogramovanie.
Pre tých, ktorí by nechceli pracovať v Tinkercade alebo by si jednoducho chceli zapojiť projekt v reáli mám dobrú správu, možno to tiež. Stačí využiť Arduino IDE a písať kód tu.
Servo motor
Začneme teda servo motorom. Ten vyzerá napríklad takto:
Ako vidíme, jedná sa o malé plastové mikroservo, ktoré je možné celkom lacno zakúpiť. Pre záujemcov pripájame odkaz na e-shop LaskaKit, kde je možné mikroservo zaobstarať. Konkrétne sa jedná o model SG90, ktorý má prevádzkové napätie medzi 3 V a 7,2 V. Model existuje v dvoch variantoch, v 180 ° a kontinuálnej verzii. Rozdiel medzi týmito servo motormi je ako v kóde, tak v celom fungovaní motora.
Prvý motor, ako vyplýva z názvu, sa môže otáčať iba v rozmedzí 180°, jeho výhodou je, že je celkom presný a pozná svoje stupne otočenia. Nevýhodou je práve obmedzený rozsah otáčania. Druhé, kontinuálne servo funguje trochu inak, jeho značnou prednostnou je to, že sa dokáže otáčať v rozmedzí 360 °, avšak chýba tu senzor pre určovanie polohy otáčania. Motor teda nie je taký presný a musíme sa tu riadiť časom otáčania. To u starších motorov môže spôsobovať problémy, keď sa motor napríklad nevráti na pozíciu, na ktorú sa pôvodne vracal.
Zapojenie servo motora
Teraz, keď sme si povedali základné informácie o servo motore, tak nám nič nebráni vrhnúť sa rovno na schému zapojenia. Zapojenie bude veľmi jednoduché, postačí nám akýkoľvek model dosky Arduino a servo motor. My budeme používať model Uno, ale vo výsledku na tom nezáleží. Naše zapojenie vyzerá takto:
Oranžový kábel (dátový kábel) zapojíme do ľubovoľného digitálneho pinu, v našom prípade sa jedná o digitálny pin číslo dva. Ďalej použijeme červený kábel (napájací kábel), ktorý zapojíme do pinu 5 V na doske Arduina a posledný čierny kábel (uzemnenie) sa zapojí do pinu GND.
Pokiaľ máme všetko zapojené, môžeme sa pustiť do programovania motúrku. Dnes si naprogramujeme polohové servo.
Typ serva môžeme v Tinkercade opäť jednoducho prepnúť v novom okne, ktoré sa otvorí, pokiaľ na model serva klikneme. V ponuke Typ potom pre prvý projekt zvolíme položku Polohové.
Programovanie polohového servo motora
Naprogramujeme si jednoduchý program, aby sme si ukázali funkčnosť motúrku. V programe budeme chcieť, aby sa servo otočilo vždy o 45 ° až do maximálnych 180 °. Až bude servo otočené na maximum, vrátime ho späť na začiatok a celá slučka začne znova.
Najprv do projektu pridáme knižnicu pre prácu so servom a doplníme konštanty, resp. premenné:
#include <Servo.h> // Knihovna pro servo #define SERVO_PIN 2 // Definování pinu, na kterém se nachází servo Servo servo_motor; // Vytvoření instance servo motoru byte uhel_otoceni; // Pomocná proměnná pro nastavování úhlů otočení
Knižnicu pridáme pomocou príkazu #include <Servo.h>
.
Vďaka nej budeme môcť používať už naprogramované funkcie pre servo
motor. Ďalej si príkazom #define SERVO_PIN 2
definujeme číslo
pinu, na ktorom sa nachádza naše servo, v našom prípade pin číslo dva.
Potom si vytvoríme inštanciu nášho motora, dôležité je kľúčové
slovo Servo
, vďaka ktorému vytvoríme danú inštanciu, potom je
potrebné zadať názov serva, v našom prípade deklarujeme
servo_motor
. Ako ďalší sme si vytvorili premennú typu
byte
, ktorú sme nazvali uhel_otoceni
, tá nám
poslúži ako pomocná premenná.
Premenné uhel_otoceni
sme nepriradili žiadnu
hodnotu, bude teda defaultne nastavená na 0
.
Nasleduje krátka inicializácia serva:
void setup() { servo_motor.attach(SERVO_PIN); // Propojení instance našeho serva }
Ak sa pozrieme do časti setup()
, tak tu uvidíme príkaz, s
ktorým sme sa doposiaľ nestretli. Ide o príkaz
servo_motor.attach(SERVO_PIN)
, vďaka tomuto príkazu priradíme
inštanciu serva nášmu zapojenému servo motoru, ktorý máme pripojený na
pinu číslo dva.
Teraz sa presunieme na finálnu časť programu a ukážeme si kód funkcie
loop()
:
void loop() { if (uhel_otoceni == 180) { uhel_otoceni = 0; } else { uhel_otoceni += 45; } servo_motor.write(uhel_otoceni); // Otočení motoru na požadovaný úhel delay(1500); // Nastavení prodlevy na 1,5 sekundy }
Na otočenie servo motora použijeme príkaz write()
, ktorý
voláme na inštanciu nášho serva a ktorému v parametri nastavujeme
požadovaný uhol otočenia. Príkaz servo_motor.write(45)
by teda
otočil naše servo na 45°.
Ako prvá sa ale v hlavnej slučke nachádza podmienka, ktorou kontrolujeme,
či premenná uhel_otoceni
nedosiahla už maximálnu hodnotu, teda
180°. Ak áno, premennú vynulujeme. Vďaka tomu sa následne servo vráti do
pôvodnej polohy. V opačnom prípade hodnotu premennej navýšime o
požadovaných 45 °.
Nakoniec zavoláme príkaz servo_motor.write(uhel_otoceni)
, tým
docielime to, že sa motor otočí o navýšenú hodnotu. Na záver ešte
pridáme oneskorenie jeden a pol sekundy, po ktorej bude program pokračovať
znova v cykle.
Vďaka pomocnej premennej sme sa vyhli opakovanému volaniu
príkazu write()
s konkrétnym parametrom v argumente.
Program teraz môžeme spustiť a vyskúšať. Pokiaľ všetko prebehlo bez problémov, máme teraz funkčné servo motor! V prípade otázok alebo problémov sa neváhajte obrátiť do komentárovej sekcie.
V nasledujúcej lekcii, Arduino - Senzory a programovanie pohybového senzora PIR , sa budeme zaoberať ďalším typom elektronických komponentov, a to senzormi. V praktickej časti si potom ukážeme využitie pohybového senzora spolu s fotorezistorom.