Lekce 8 - Raspberry Pi - H-můstek a otáčení motůrkem
V předchozí lekci, Velká rodina Raspberry Pi - Přehled modelů a jejich funkcí, jsme si popovídali o velké rodině modelů Raspberry Pi.
Dneska si ukážeme, jak ovládat jakýkoliv jednoduchý DC motor pomocí Raspberry Pi. Seznámíme se s H-můstkem a dvěma typy motorů, které lze určitě pomocí něj ovládat. Nakonec si naše vědomosti ověříme programováním v Pythonu, ve kterém si napíšeme program. Jako vždy, budu používat fotky svého schématu, jak jsem projekt sestavil. Schémata jsou vytvořené v programu Fritzing.
Potřebné součástky
Na dnešní jednoduché zapojení budeme potřebovat tyto součástky:
- H-můstek
- Raspberry Pi
- DC motor
Krokové motory vs. DC motory
Než se pustíme do nějaké akce, musíme si nejdřív projít teorii. Jak vůbec takové motory fungují? Jaký je v nich rozdíl?
Hlavní rozdíl mezi krokovými a DC motory je v způsobu otáčení. Zatímco krokový motor, jak z názvu vyplývá, se otáčí pomocí kroků. Nejjednodušeji by se funkčnost krokových motorů dala přirovnat k převodovce. Krokový motor má také ozubená kola, která se krok po kroku otáčejí. Není tak možné udělat plynulý tah. Vždy, i když nastavíme, aby dělal více kroků za sebou, tak tah nebude úplně plynulý. Naopak u DC motoru nastavujeme otáčky motoru okolo celé své osy. V našem případě budeme program zmrazovat na určitý čas, na který chceme, aby se motor otáčel. Kolik otáček však za takový čas udělá, nevíme. Pro ovládání těchto motorů budeme ještě něco potřebovat. Jde o součástku, která nám umožní motor ovládat pomocí Raspberry Pi a tou je tzv. H-můstek.
Ve starých tiskárnách se používaly DC motory místo step (step = krok) motorů s tím, že tiskárny měly speciální pásku a scanner, který tu pásku sledoval a dovolil tak motoru otočit se pouze o krok stejně jako u step motorů.
Co je H–můstek?
H-můstek je modul určený pro ovládání jednoho krokového nebo dvou DC motorů. Součástka zajištuje stabilní ovládání motorů. Propouští napětí od 2,5 do 12VDC. Modul je použitelný pro všechny typy desek Arduino, Raspberry Pi, NodeMCU a další. Používá se především k spínání součástem s odlišným napětím. Řízení probíhá pomocí čtyř tranzistorů. Na každý kontakt motoru jsou dva. Pro každou stranu nám tyto dva tranzistory tvoří jeden řídící signál. Otáčení motoru je pak dáno jejich kombinací: 00 = neutrál, 01 = vpřed, 10 = vzad. Tímto způsobem se ovládají krokové motory. DC motory pak potřebují pouze 2 tranzistory, proto využívají funkčnost pouze půlky H-můstku. Avšak ovládání pomocí signálů zůstává stejné.
Popis částí H-můstku
Jednotlivé části H-můstku si nyní popíšeme a řekneme si k čemu slouží a co se do nich zapojuje. Na obrázku se budeme poté orientovat podle čísel:
1.čast
Náš H-můstek má dva výstupy se 4 zdířkami, které slouží k připojení dvou DC motorů nebo jednoho krokového motoru. Výstupy i zdířky jsou označeny. Dvě zdířky jsou pro motor A a dvě pro motor B. Je v podstatě jedno, do jaké zdířky zapojíte "plus" a do jaké "mínus" motoru, protože to jen změní, na jakou stranu se motor bude v jaké situaci otáčet. Dále se dozvíme, že každou zdířku musíme nastavit zvlášť pomocí GPIO pinů.
2.čast
4 zdířky se připojují k GPIO pinům. GPIO piny jsou přímo spojeny s výstupy z první části. Každá jedna zdířka má označení (B-1A: motor B, výstup 1A). Dále se nemění písmeno, ale číslo, například 2A. Celý motor se pak bude ovládat pouze tím, že budeme pouštět proud na plus nebo mínus a to bude také určovat, na jakou stranu se bude motor otáčet. Jednoduše, kdybychom motor připojili čistě k baterii, tak se bude otáčet jen podle toho, jestli jeho plus bude zapojeno do plusu nebo do mínusu. Otočíme-li totiž polaritu, směr otáčení se změní.
3. část
H-můstek dodává energii jak sobě, tak motorům. Proto přes tyto piny
připojujeme externí napájení nebo jej zapojujeme na VCC
a
GND
u Raspberry Pi. Pro více motorů je pak připojení externího
napájení nutností.
Vysvětlili jsme si, k čemu jaký výstup, zdířka či pin slouží a nyní můžeme začít zapojovat.
Zapojení
Zapojení je jednoduché. Začneme tím, že propojíme H-můstek s motorem.
Plus zapojíme do zdířky A-1A a mínus do A-2A. Poté pin A-1A spojíme s GPIO
pinem 14 na Raspberry Pi a A-2A spojíme s pinem 15. Poté už jen připojíme
pin GND
na GND
pin od Raspberry Pi a VCC
spojíme s 5V pinem. Také můžeme připojit GND
na mínus
napájení a VCC
na plus:
První hrátky s motorem
Když už máme motor připojený k našemu Raspberry Pi, pustíme se do jeho ovládání. Standardně budeme vše programovat přímo na Raspberry Pi v jazyce Python. Python kód budeme psát v Thonny IDE, který je automaticky předinstalovaný v Raspberry Pi OS. Náš program bude jednoduše pouze otáčet DC motorem na jednu a na druhou stranu. Mezi otáčeními bude však několika sekundová prodleva.
Kód v Pythonu
Části dnešního kódu budeme sice znát, ale i tak je vysvětlím. Budeme dnes vytvářet kód, který:
- otočí motorem,
- zastaví se a
- otočí motorem na druhou stranu.
Podobně jak u rozsvícení a zhasínaní diody. Kód vypadá následovně:
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()
Vysvětlení kódu
Jako úplně první si opět importujeme knihovny. Dnes budeme potřebovat
dvě knihovny. GPIO knihovnu používanou již ve dřívějších lekcích,
která nám dovoluje ovládat GPIO piny. Dále si z knihovny time
importujeme sleep
. Příkaz sleep
nám jednoduše
zmrazí program ve stavu, ve kterém je.
Většinu zde použitých příkazů jsme již používali dříve, proto jim
nebudu věnovat takové pozornosti. Máme tu základní nastavení boardu
(desky). Nastavení BCM
znamená, že budeme používat hodnoty
GPIO pinů a ne přímo desky Raspberry Pi. Následující dva řádky
nastavují dva použité piny na základní hodnotu OUT
. Toto
základní nastavení je vysvětleno již v předchozích lekcích. Musíme ho
nastavovat pokaždé, když chceme piny používat. Kdybychom chtěli
například program udělat ve smyčce, aby se dělal stále dokola, musíme
vždy na začátek smyčky vložit toto nastavení.
Když už máme vše připraveno, můžeme začít otáčet. Nastavíme jako
první GPIO port č. 15 na HIGH
, což znamená, že se motor začne
otáčet doprava po dobu, na kterou ho poté hned zmrazíme příkazem
sleep
. Příkaz HIGH
stejně jako u rozsvěcování
diody zapne port a pustí do něj proud na plus. Jelikož u DC motoru jednoduše
funguje prohazovaní plus a minus jako nastavení na jakou stranu se bude motor
otáčet, tak nám pouze stačí vždy jen piny prohazovat. Tenhle
troj-kód končíme tím, že pin zase nastavíme na LOW
,
což znamená, že se motor zastaví.
Dále zastavíme celý program pomocí příkazu sleep
. Toto
zastavení je jen pro zaznamenání, kdy se nic neděje.
Nakonec pak jednoduše pin č. 14 zapneme, zmrazíme a zase vypneme jako u předchozího pinu č. 15. Jelikož jsme ale prohodili plus a mínus, motor se bude otáčet na opačnou stranu, co minule.
Velmi jednoduchý kód, který se dá ještě vylepšit o doplnění smyčky
while
, aby se motor neustále otáčel dokola.
V příští lekci, Raspberry Pi - Drátová komunikace s Arduino UNO, si vytvoříme komunikaci mezi Raspberry Pi a Arduinem UNO pomocí USB kabelu.