Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

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:

Motory - Arduino - Hardvér

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.
V dnešnom dieli si naprogramuje iba servo motor. Zostávajúce motory si predstavíme nabudúce.

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:

Servo - Arduino - Hardvér

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:

Zapojenie-servo-motor - Arduino - Hardvér

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.


 

Všetky články v sekcii
Arduino - Hardvér
Preskočiť článok
(neodporúčame)
Arduino - Senzory a programovanie pohybového senzora PIR
Článok pre vás napísal Dominik Němeček
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování mikropočítačů Arduino.
Aktivity