IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 11 - Arduino - Druhy motorů a programování servo motoru

V minulé lekci, Arduino - Měření tlaku a teploty s OLED displejem, jsme si ukázali Arduino projekt na měření tlaku a teploty pomocí BMP280 modulu s OLED displejem.

V dnešní lekci HW Arduino tutoriálu si představíme další druh elektronických komponent. Povíme si základní informace o motorech, ukážeme si, jaké existují druhy motorů a k čemu je lze použít. Také si jeden z motorů společně zapojíme a naprogramujeme. Naučíme se tak pracovat se servo motorem.

Výběr motorů

Začneme tím, že si řekneme, co to vůbec motor je. Motor by se dal definovat jako elektrický točivý stroj, do této kategorie se mimo jiné také řadí například generátor. Opakem točivých strojů jsou netočivé stroje. Z této kategorie můžeme například uvést jako příklad transformátor.

Točivý elektrický stroj, v našem případě motor, mění elektrickou energii na mechanickou energii. Může fungovat i opačně a měnit mechanickou energii na elektrickou energii. Točivé elektrické stroje se poté dále dělí na další kategorie.

Pojďme se tedy podívat na konkrétní druhy motorů:

Motory - Arduino - Hardware

Na obrázku vidíme sedm různých motorů:

  • servo motor,
  • krokový motor,
  • ss. motor s kódovačem,
  • servo motor (jiný model),
  • ss. motor,
  • vibrační motor,
  • převodový motor.

V dnešním dílu si naprogramuje pouze servo motor. Zbývající motory si představíme příště.

Projekt vytvoříme ve vývojovém prostředí Tinkercad, práce zde je velice jednoduchá a příjemná. Virtuální prostředí Tinkercad nabízí všech sedm druhů motorů uvedených na obrázku. Projdeme si vše od základů - vybrání motoru, zapojení dle schématu a nakonec naprogramování.

Pro ty, kteří by nechtěli pracovat v Tinkercadu nebo by si prostě chtěli zapojit projekt v reálu mám dobrou zprávu, lze to také. Stačí využít Arduino IDE a psát kód zde.

Servo motor

Začneme tedy servo motorem. Ten vypadá například takto:

Servo - Arduino - Hardware

Jak vidíme, jedná se o malé plastové mikroservo, které lze celkem levně zakoupit. Pro zájemce připojujeme odkaz na e-shop LaskaKit, kde je možné mikroservo pořídit. Konkrétně se jedná o model SG90, který má provozní napětí v rozsahu 3 V až 7,2 V. Model existuje ve dvou variantách, ve 180° a kontinuální verzi. Rozdíl mezi těmito servo motory je jak v kódu, tak v celém fungování motoru.

První motor, jak vyplývá z názvu, se může otáčet pouze v rozmezí 180°, jeho výhodou je, že je celkem přesný a zná své stupně otočení. Nevýhodou je, právě omezený rozsah otáčení. Druhé, kontinuální servo funguje trochu jinak, jeho značnou přednostní je to, že se dokáže otáčet v rozmezí 360°, avšak chybí zde senzor pro určování polohy otáčení. Motor tudíž není tak přesný a musíme se zde řídit časem otáčení. To u starších motorů může způsobovat potíže, když se motor například nevrátí na pozici, na kterou se původně vracel.

Zapojení servo motoru

Nyní, když jsme si řekli základní informace o servo motoru, tak nám nic nebrání vrhnout se rovnou na schéma zapojení. Zapojení bude velice jednoduché, postačí nám jakýkoliv model desky Arduino a servo motor. My budeme používat model Uno, ale ve výsledku na tom nezáleží. Naše zapojení vypadá takto:

Zapojeni-servo-motor - Arduino - Hardware

Oranžový kabel (datový kabel) zapojíme do libovolného digitálního pinu, v našem případě se jedná o digitální pin číslo dva. Dále použijeme červený kabel (napájecí kabel), který zapojíme do pinu 5 V na desce Arduina a poslední černý kabel (uzemnění) se zapojí do pinu GND.

Pokud máme vše zapojeno, můžeme se pustit do programování motůrku. Dnes si naprogramujeme polohové servo.

Typ serva můžeme v Tinkercadu opět jednoduše přepnout v novém okně, které se otevře, pokud na model serva klikneme. V nabídce Typ pak pro první projekt zvolíme položku Polohové.

Programování polohového servo motoru

Naprogramujeme si jednoduchý program, abychom si ukázali funkčnost motůrku. V programu budeme chtít, aby se servo otočilo vždy o 45° až do maximálních 180°. Až bude servo otočeno na maximum, vrátíme ho zpět na začátek a celá smyčka začne znovu.

Nejprve do projektu přidáme knihovnu pro práci se servem a doplníme konstanty, resp. proměnné:

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

Knihovnu přidáme pomocí příkazu #include <Servo.h>. Díky ní budeme moci používat již naprogramované funkce pro servo motor. Dále si příkazem #define SERVO_PIN 2 definujeme číslo pinu, na kterém se nachází naše servo, v našem případě pin číslo dva.

Pak si vytvoříme instanci našeho motoru, důležité je klíčové slovo Servo, díky němuž vytvoříme danou instanci, poté je potřeba zadat název serva, v našem případě deklarujeme servo_motor. Jako další jsme si vytvořili proměnnou typu byte, kterou jsme nazvali uhel_otoceni, ta nám poslouží jako pomocná proměnná.

Proměnné uhel_otoceni jsme nepřiřadili žádnou hodnotu, bude tedy defaultně nastavena na 0.

Následuje krátká inicializace serva:

void setup()
{
  servo_motor.attach(SERVO_PIN); // Propojení instance našeho serva
}

Koukneme-li se do části setup(), tak zde uvidíme příkaz, s kterým jsme se doposud nesetkali. Jedná se o příkaz servo_motor.attach(SERVO_PIN), díky tomuto příkazu přiřadíme instanci serva našemu zapojenému servo motoru, který máme připojený na pinu číslo dva.

Nyní se přesuneme na finální část programu a ukážeme si kód funkce 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

}

K otočení servo motoru použijeme příkaz write(), který voláme na instanci našeho serva a jemuž v parametru nastavujeme požadovaný úhel otočení. Příkaz servo_motor.write(45) by tedy otočil naše servo na 45°.

Jako první se ale v hlavní smyčce nachází podmínka, kterou kontrolujeme, zda proměnná uhel_otoceni nedosáhla již maximální hodnoty, tedy 180°. Pokud ano, proměnnou vynulujeme. Díky tomu se následně servo vrátí do původní polohy. V opačném případě hodnotu proměnné navýšíme o požadovaných 45°.

Nakonec zavoláme příkaz servo_motor.write(uhel_otoceni), tím docílíme toho, že se motor otočí o navýšenou hodnotu. Na závěr ještě přidáme prodlevu jeden a půl sekundy, po které bude program pokračovat znova v cyklu.

Díky pomocné proměnné jsme se vyhnuli opakovanému volání příkazu write() s konkrétním parametrem v argumentu.

Program nyní můžeme spustit a vyzkoušet. Pokud vše proběhlo bez problémů, máme nyní funkční servo motor! V případě dotazů nebo potíží se neváhejte obrátit do komentářové sekce.

V následující lekci, Arduino - Senzory a programování pohybového senzoru PIR, se budeme zabývat dalším typem elektronických komponent, a to senzory. V praktické části si pak ukážeme využití pohybového senzoru spolu s fotorezistorem.


 

Předchozí článek
Arduino - Měření tlaku a teploty s OLED displejem
Všechny články v sekci
Arduino - Hardware
Přeskočit článek
(nedoporučujeme)
Arduino - Senzory a programování pohybového senzoru PIR
Článek pro vás napsal Dominik Němeček
Avatar
Uživatelské hodnocení:
11 hlasů
Autor se věnuje programování mikropočítačů Arduino.
Aktivity