8. diel - Raspberry Pi - H-mostík a otáčanie motorkom
V predchádzajúcej lekcii, Veľká rodina Raspberry Pi - Prehľad modelov a ich funkcií , sme sa porozprávali o veľkej rodine modelov Raspberry Pi.
Dneska si ukážeme, ako ovládať akýkoľvek jednoduchý DC motor pomocou Raspberry Pi. Zoznámime sa s H-mostíkom a dvoma typmi motorov, ktoré možno určite pomocou neho ovládať. Nakoniec si naše vedomosti overíme programovaním v Pythone, v ktorom si napíšeme program. Ako vždy, budem používať fotky svojej schémy, ako som projekt zostavil. Schémy sú vytvorené v programe Fritzing.
Potrebné súčiastky
Na dnešnej jednoduché zapojenie budeme potrebovať tieto súčiastky:
- H-mostík
- Raspberry Pi
- DC motor
Krokové motory vs. DC motory
Než sa pustíme do nejakej akcie, musíme si najskôr prejsť teóriu. Ako vôbec takéto motory fungujú? Aký je v nich rozdiel?
Hlavný rozdiel medzi krokovými a DC motory je v spôsobe otáčania. Kým krokový motor, ako z názvu vyplýva, sa otáča pomocou krokov. Najjednoduchšie by sa funkčnosť krokových motorov dala prirovnať k prevodovke. Krokový motor má tiež ozubené kolesá, ktoré sa krok po kroku otáčajú. Nie je tak možné urobiť plynulý ťah. Vždy, aj keď nastavíme, aby robil viac krokov za sebou, tak ťah nebude úplne plynulý. Naopak, u DC motora nastavujeme otáčky motora okolo celej svojej osi. V našom prípade budeme program zmrazovať na určitý čas, na ktorý chceme, aby sa motor otáčal. Koľko otáčok však za taký čas urobí, nevieme. Pre ovládanie týchto motorov budeme ešte niečo potrebovať. Ide o súčiastku, ktorá nám umožní motor ovládať pomocou Raspberry Pi a tou je tzv. H-mostík.
V starých tlačiarňach sa používali DC motormi namiesto step (step = krok) motorov s tým, že tlačiarne mali špeciálnu pásku a scanner, ktorý tu pásku sledoval a dovolil tak motora otočiť sa iba o krok rovnako ako u step motorov.
Čo je H-mostík?
H-mostík je modul určený pre ovládanie jedného krokového alebo dvoch DC motorov. Súčiastka zaisťuje stabilné ovládanie motorov. Prepúšťa napätia od 2,5 do 12VDC. Modul je použiteľný pre všetky typy dosiek Arduino, Raspberry Pi, NodeMCU a ďalšie. Používa sa predovšetkým k spínanie komponentom s odlišným napätím. Riadenie prebieha pomocou štyroch tranzistorov. Na každý kontakt motora sú dva. Pre každú stranu nám tieto dva tranzistory tvoria jeden riadiaci signál. Otáčanie motora je potom dané ich kombinácií: 00 = neutrál, 01 = vpred, 10 = vzad. Týmto spôsobom sa ovládajú krokové motory. DC motory potom potrebujú iba 2 tranzistory, preto využívajú funkčnosť iba polovičky H-mostíka. Avšak ovládanie pomocou signálov zostáva rovnaké.
Popis častí H-mostíka
Jednotlivé časti H-mostíka si teraz popíšeme a povieme si na čo slúži a čo sa do nich zapája. Na obrázku sa budeme potom orientovať podľa čísel:
1.časť
Náš H-mostík má dva výstupy so 4 zdierkami, ktoré slúžia na pripojenie dvoch DC motorov alebo jedného krokového motora. Výstupy i zdierky sú označené. Dve zdierky sú pre motor A a dve pre motor B. Je v podstate jedno, do akej zdierky zapojíte "plus" a do akej "mínus" motora, pretože to len zmení, na akú stranu sa motor bude v akej situácii otáčať. Ďalej sa dozvieme, že každú zdierku musíme nastaviť zvlášť pomocou GPIO pinov.
2.časť
4 zdierky sa pripájajú k GPIO pinom. GPIO piny sú priamo spojené s výstupmi z prvej časti. Každá jedna zdierka má označenie (B-1A: motor B, výstup 1A). Ďalej sa nemení písmeno, ale číslo, napríklad 2A. Celý motor sa potom bude ovládať iba tým, že budeme púšťať prúd na plus alebo mínus a to bude tiež určovať, na akú stranu sa bude motor otáčať. Jednoducho, keby sme motor pripojili čisto k batérii, tak sa bude otáčať len podľa toho, či jeho plus bude zapojené do plusu alebo do mínusu. Otočíme Ak totiž polaritu, smer otáčania sa zmení.
3. časť
H-mostík dodáva energiu ako sebe, tak motorom. Preto cez tieto piny
pripájame externé napájanie alebo ho zapájame na VCC
a
GND
u Raspberry Pi. Pre viac motorov je potom pripojenie externého
napájania nutnosťou.
Vysvetlili sme si, k čomu aký výstup, zdierka či pin slúži a teraz môžeme začať zapájať.
Zapojenie
Zapojenie je jednoduché. Začneme tým, že prepojíme H-mostík s motorom.
Plus zapojíme do konektora A-1A a mínus do A-2A. Potom pin A-1A spojíme s
GPIO pinom 14 na Raspberry Pi a A-2A spojíme s pinom 15. Potom už len
pripojíme pin GND
na GND
pin od Raspberry Pi a
VCC
spojíme s 5V pinom. Tiež môžeme pripojiť GND
na mínus napájanie a VCC
na plus:
Prvý hrátky s motorom
Keď už máme motor pripojený k nášmu Raspberry Pi, pustíme sa do jeho ovládanie. Štandardne budeme všetko programovať priamo na Raspberry Pi v jazyku Python. Python kód budeme písať v Thonny IDE, ktorý je automaticky predinštalovaný v Raspberry Pi OS. Náš program bude jednoducho iba otáčať DC motorom na jednu a na druhú stranu. Medzi otáčaním bude však niekoľkých sekundová oneskorenie.
Kód v Pythone
Časti dnešného kódu budeme síce poznať, ale aj tak je vysvetlím. Budeme dnes vytvárať kód, ktorý:
- otočí motorom,
- zastaví sa a
- otočí motorom na druhú stranu.
Podobne ako u rozsvietenie a zhasínanie diódy. Kód vyzerá nasledovne:
import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(14, GPIO.OUT) GPIO.setup(15, GPIO.OUT) GPIO.output(15, GPIO.HIGH) sleep(0.5) GPIO.output(15, GPIO.LOW) sleep(2) GPIO.output(14, GPIO.HIGH) sleep(0.5) GPIO.output(14, GPIO.LOW) GPIO.cleanup()
Vysvetlenie kódu
Ako úplne prvý si opäť importujeme knižnice. Dnes budeme potrebovať dve
knižnice. GPIO knižnicu používanú už vo skorších lekciách, ktorá nám
dovoľuje ovládať GPIO piny. Ďalej si z knižnice time
importujeme sleep
. Príkaz sleep
nám jednoducho
zmrazí program v stave, v ktorom je.
Väčšinu tu použitých príkazov sme už používali predtým, preto im
nebudem venovať takej pozornosti. Máme tu základné nastavenia boarde
(dosky). Nastavenie BCM
znamená, že budeme používať hodnoty
GPIO pinov a nie priamo dosky Raspberry Pi. Nasledujúce dva riadky nastavujú
dva použité piny na základnú hodnotu OUT
. Toto základné
nastavenie je vysvetlené už v predchádzajúcich lekciách. Musíme ho
nastavovať zakaždým, keď chceme piny používať. Keby sme chceli napríklad
program urobiť v slučke, aby sa robil stále dokola, musíme vždy na
začiatok slučky vložiť toto nastavenie.
Keď už máme všetko pripravené, môžeme začať otáčať. Nastavíme
ako prvý GPIO port č. 15 na HIGH
, čo znamená, že sa motor
začne otáčať doprava po dobu, na ktorú ho potom hneď zmrazíme príkazom
sleep
. Príkaz HIGH
rovnako ako u rozsvecovania diódy
zapne port a pustí do neho prúd na plus. Keďže pri DC motore jednoducho
funguje prehadzovania plus a mínus ako nastavenie na akú stranu sa bude motor
otáčať, tak nám len stačí vždy len piny prehadzovať. Tento
troj-kód končíme tým, že pin zase nastavíme na LOW
,
čo znamená, že sa motor zastaví.
Ďalej zastavíme celý program pomocou príkazu sleep
. Toto
zastavenie je len pre zaznamenanie, kedy sa nič nedeje.
Nakoniec potom jednoducho pin č. 14 zapneme, zmrazíme a zase vypneme ako u predchádzajúceho pinu č. 15. Keďže sme ale prehodili plus a mínus, motor sa bude otáčať na opačnú stranu, čo minule.
Veľmi jednoduchý kód, ktorý sa dá ešte vylepšiť o doplnenie slučky
while
, aby sa motor neustále otáčal dokola.
V budúcej lekcii, Raspberry Pi - Drôtová komunikácia s Arduino UNO , si vytvoríme komunikáciu medzi Raspberry pi a Arduino UNO pomocou USB kábla.