5. diel - Raspberry Pi - Jednoduchý semafor
V predchádzajúcej lekcii, Raspberry Pi - Blikanie diódy , sme si vytvorili jednoduchý obvod s diódou.
Dnešné Raspberry Pi tutoriál bude o Python kódu a vytvoríme si pomocou vopred pripravených súčiastok jednoduchý semafor.
Ovládanie diódy pomocou Pythonu
Zapneme si naše Raspberry Pi a prejdeme v ňom do predinštalované aplikácie Thonny Python IDE, v ktorej budeme písať náš kód:
Aplikácia nám automaticky vytvorí prázdny blok kódu. Napíšeme do neho
program, ktorý zapne GPIO port s číslom 14
, sekundu počká a
zas daný GPIO port vypne. Pred tým vypíšeme aj hlášku "Hello world", aby
sme lepšie poznali, že program už beží a dióda treba neblikalo.
Kód vložíme nasledujúce:
import RPi.GPIO as GPIO import time GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(14, GPIO.OUT) print "hello world" GPIO.output(14, GPIO.HIGH) time.sleep(1) GPIO.output(14, GPIO.LOW)
Pekne si kód rozoberieme riadok po riadku.
Na prvých dvoch riadkoch importujete knižnice, ktoré budeme potrebovať
(GPIO
knižnicu a knižnicu time.GPIO
). Knižnice
potrebujeme vždy, keď ovládame Raspberry Pi porty GPIO. A knižnica
time
nám pridáva medzi všetkým ostatným funkciu
sleep()
, ktorá sa často hodí pri podobných projektoch, pretože
pozastaví na chvíľu chod celého programu. Ďalej nám táto knižnica dáva
všetky informácie čo sa týkajú času.
Tretí riadok nám iba odstráni otravná varovanie.
Riadok štvrtý nastavuje veľmi dôležitú časť, o ktorej sme hovorili v
predchádzajúcej lekcii a to, či budeme používať čísla GPIO portov alebo
nie. My budeme používať čísla GPIO portov, preto nastavíme mód
BCM
.
Na piatom riadku si nastavíme náš GPIO port na režim / channel
OUT
(ako OUTPUT, teda výstup). Táto časť je dôležitá,
pretože na Channel OUT
môžeme ovládať GPIO port práve pomocou
hodnôt HIGH
(zapnuté) a LOW
(vypnuté), čo tiež
robíme na 7. a 9. riadku. Na šiestom riadku jednoducho vypíšeme pomocou
príkazu print
známou hlášku všetkým programátorom.
Uloženie a spustenie prvého programu
Po zapísaní kódu si tlačidlom Save program uložíme pod názvom
blik
. Súbor automaticky dostane koncovku .py
. Náš
program sa nedá spustiť pomocou aplikácie Thonny, pretože aplikácia nemá
dostatočné práva. Máme tak dve možnosti, buď spustiť Thonny ako root
(príkazom sudo
) alebo spustiť program rovno v termináli.
Ukážeme si obe metódy.
Spustenie pomocou Thonny
Vypneme Thonny Python a do terminálu zadáme:
sudo thonny
Týmto príkazom spustíme aplikáciu so všetkými právami roota, čo pre
ovládanie GPIO portov presne potrebujeme (príkaz si najprv vyžiada vaše
root
heslo).
Spustenie pomocou terminálu
Ak sme program neukladali do špeciálnej zložky, stačí zadať len do terminálu toto:
sudo python blik.py
Inak musíme prejsť do zložky, kde máme program uložený, pomocou príkazu:
cd /názevsložky/
A až potom spustíme predchádzajúci príkaz:
Program nám teda vypísal do terminálu hlášku "hello world" a dióda blikla.
Semafor
Skúsime si naprogramovať niečo ťažšieho a to semafor. K tomuto projektu
budeme potrebovať veci popísané vyššie (teda ďalšie 2 diódy a
rezistory). Diódy zapojíme podobne ako tú jednu predchádzajúce, len na inej
GPIO piny. Všetky katódy môžu byť zapojené do jedného GND
,
ak nemáte nepájivé poľa, bude pohodlnejšie je zapojiť do "rôznych"
GND
(pozri opäť obrázky verzie s drôtikmi a poľom). Ďalej
potom každú anódu musíme zapojiť do vlastného GPIO portu, aby sme tak
mohli špecifickú diódu ovládať. Obe riešenia vidíte tu:
Naše zapojenie tvorí malý obvod, ktorý však môžeme ovládať pomocou Pythonu.
Program semafor
Vrátime sa k programovaniu. Otvoríme si Thonny rovno pomocou terminálu s
pomocou príkazu sudo
. Vytvoríme si nový program s názvom
semafor
tlačidlom New a napíšeme do neho tento kód:
import RPi.GPIO as GPIO import time GPIO.setwarnings(False) while(True): GPIO.setmode(GPIO.BCM) GPIO.setup(14,GPIO.OUT) GPIO.setup(18,GPIO.OUT) GPIO.setup(15,GPIO.OUT) GPIO.output(18,GPIO.HIGH) time.sleep(3) GPIO.output(15,GPIO.HIGH) time.sleep(2) GPIO.output(15,GPIO.LOW) GPIO.output(18,GPIO.LOW) GPIO.output(14,GPIO.HIGH) time.sleep(3) GPIO.output(14,GPIO.LOW) GPIO.cleanup() time.sleep(5)
Začiatok kódu obsahuje veci, ktoré už poznáme, takže len v rýchlosti. Vložíme totožné knižnice, ako pri prvom programu a rovno GPIO knižnicu použijeme na odstránenie otravných varovanie.
Ďalej tu máme cyklus while
s podmienkou True
. To
je taký malý programátorský "podvod" a tento cyklus znamená neustále sa
opakujúce slučku, čo sa nám hodí. Náš kód vnútri while
pobeží stále dokola a dokola. Aby program spoznal, že zvyšok kódu patrí
do slučky while
, musíme zvyšok kódu písať odsadený
(najlepšie pomocou Tab).
Ako prvé, čo musíme urobiť v našej slučke, je nastaviť
mode
. A to zakaždým, pretože na konci kódu voláme
GPIO.cleanup()
. To nám uvoľní GPIO porty a požaduje tak pre ich
opätovné použitie opäť nastaviť mode
. Vďaka tomu sme tiež
na koniec programu umiestnili 5s dlhú pauzu, ktorá je určená na ukončenie
programu, keď sú zrovna všetky diódy vypnuté a tým pádom porty
voľné.
Ďalej v kóde nie je nič nové, iba pridávame nové diódy. Tým pádom vždy meníme prvý údaj a to číslo GPIO portu.
Vysvetlenie kódu
Máme zapojené tri diódy, v mojom prípade červenú, bielu (žltá farba semafore), modrú (zelená farba semafore) rovnako, ako sú tri svetla na semafore. V kóde postupne diódy rozsvietime. Prvý rozsvietime červenú a uspia program na 3 sekundy. Potom rozsvietime bielu a uspia program na dve sekundy. Potom ale nenastane ako by ste čakali rozsvietenie diódy tretie, nastane zhasínanie. Na semafore totiž vždy prvá zhasne červené a žlté svetlo, než sa rozsvieti to zelené:
Preto aj my prvý zhasneme svetlo červené a biele, ale ešte k tomu rozsvietime svetlo modrej a program pozastavíme na 3 sekundy.
Pre ukážku ako má finálny produkt vyzerať sa môžete pozrieť na video:
V budúcej lekcii, Raspberry Pi - Magnetický senzor (otvorené / zatvorené dvere) , si ukážeme, ako zaznamenať otvorené / zatvorené dvere.