IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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:

Raspberry Pi

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:

Raspberry Pi

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:

Raspberry Pi

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é:

Raspberry Pi

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.


 

Predchádzajúci článok
Raspberry Pi - Blikanie diódy
Všetky články v sekcii
Raspberry Pi
Preskočiť článok
(neodporúčame)
Raspberry Pi - Magnetický senzor (otvorené / zatvorené dvere)
Článok pre vás napísal Aleš Hlavín
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Raspberry
Aktivity