NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 5 - Raspberry Pi - Jednoduchý semafor

V předchozí lekci, Raspberry Pi - Blikání diody, jsme si vytvořili jednoduchý obvod s diodou.

Dnešní Raspberry Pi tutoriál bude o Python kódu a vytvoříme si pomocí předem připravených součástek jednoduchý semafor.

Ovládání diody pomocí Pythonu

Zapneme si naše Raspberry Pi a přejdeme v něm do předinstalované aplikace Thonny Python IDE, ve které budeme psát náš kód:

Raspberry Pi

Aplikace nám automaticky vytvoří prázdný blok kódu. Napíšeme do něj program, který zapne GPIO port s číslem 14, sekundu počká a zas daný GPIO port vypne. Před tím vypíšeme i hlášku "Hello world", abychom lépe poznali, že program již běží a dioda třeba neblikala.

Kód vložíme následující:

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)

Pěkně si kód rozebereme řádek po řádku.

Na prvních dvou řádcích naimportujeme knihovny, které budeme potřebovat (GPIO knihovnu a knihovnu time.GPIO). Knihovny potřebujeme vždy, když ovládáme Raspberry Pi porty GPIO. A knihovna time nám přidává mezi vším ostatním funkci sleep(), která se často hodí při podobných projektech, protože pozastaví na chvíli chod celého programu. Dále nám tato knihovna dává všechny informace co se týkají času.

Třetí řádek nám pouze odstraní otravná varování.

Řádek čtvrtý nastavuje velmi důležitou část, o které jsme mluvili v předchozí lekci a to, zda budeme používat čísla GPIO portů nebo nikoli. My budeme používat čísla GPIO portů, proto nastavíme mód BCM.

Na pátém řádku si nastavíme náš GPIO port na režim/channel OUT (jako OUTPUT, tedy výstup). Tato část je důležitá, protože na channelu OUT můžeme ovládat GPIO port právě pomocí hodnot HIGH (zapnuto) a LOW (vypnuto), což také děláme na 7. a 9. řádku. Na šestém řádku jednoduše vypíšeme pomocí příkazu print známou hlášku všem programátorům.

Uložení a spuštění prvního programu

Po zapsání kódu si tlačítkem Save program uložíme pod názvem blik. Soubor automaticky dostane koncovku .py. Náš program se nedá spustit pomocí aplikace Thonny, protože aplikace nemá dostatečná práva. Máme tak dvě možnosti, buď spustit Thonny jako root (příkazem sudo) nebo spustit program rovnou v terminálu. Ukážeme si obě metody.

Spuštění pomocí Thonny

Vypneme Thonny Python a do terminálu zadáme:

sudo thonny

Tímto příkazem spustíme aplikaci se všemi právy roota, což pro ovládání GPIO portů přesně potřebujeme (příkaz si nejprve vyžádá vaše root heslo).

Spuštění pomocí terminálu

Pokud jsme program neukládali do speciální složky, stačí zadat pouze do terminálu toto:

sudo python blik.py

Jinak musíme přejít do složky, kde máme program uložený, pomocí příkazu:

cd /názevsložky/

A až poté spustíme předchozí příkaz:

Raspberry Pi

Program nám tedy vypsal do terminálu hlášku "hello world" a dioda blikla.

Semafor

Zkusíme si naprogramovat něco těžšího a to semafor. K tomuto projektu budeme potřebovat věci popsané výše (tedy další 2 diody a rezistory). Diody zapojíme podobně jako tu jednu předchozí, jen na jiné GPIO piny. Všechny katody mohou být zapojeny do jednoho GND, pokud nemáte nepájivé pole, bude pohodlnější je zapojit do "různých" GND (viz opět obrázky verze s drátky a polem). Dále pak každou anodu musíme zapojit do vlastního GPIO portu, abychom tak mohli specifickou diodu ovládat. Obě řešení vidíte zde:

Raspberry Pi

Naše zapojení tvoří malý obvod, který však můžeme ovládat pomocí Pythonu.

Program semafor

Vrátíme se k programování. Otevřeme si Thonny rovnou pomocí terminálu s pomocí příkazu sudo. Vytvoříme si nový program s názvem semafor tlačítkem New a napíšeme do něj 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čátek kódu obsahuje věci, které už známe, takže jen v rychlosti. Vložíme totožné knihovny, jako při prvním programu a rovnou GPIO knihovnu použijeme na odstranění otravných varování.

Dále tu máme cyklus while s podmínkou True. To je takový malý programátorský "podvod" a tento cyklus znamená neustále se opakující smyčku, což se nám hodí. Náš kód uvnitř while poběží stále dokola a dokola. Aby program poznal, že zbytek kódu patří do smyčky while, musíme zbytek kódu psát odsazený (nejlépe pomocí Tab).

Jako první, co musíme udělat v naší smyčce, je nastavit mode. A to pokaždé, protože na konci kódu voláme GPIO.cleanup(). To nám uvolní GPIO porty a požaduje tak pro jejich opětovné použití opět nastavit mode. Díky tomu jsme také na konec programu umístili 5s dlouhou pauzu, která je určena na ukončení programu, když jsou zrovna všechny diody vypnuty a tím pádem porty volné.

Dále v kódu není nic nového, pouze přidáváme nové diody. Tím pádem vždy měníme první údaj a to číslo GPIO portu.

Vysvětlení kódu

Máme zapojeny tři diody, v mém případě červenou, bílou (žlutá barva semaforu), modrou (zelená barva semaforu) stejně, jako jsou tři světla na semaforu. V kódu postupně diody rozsvítíme. První rozsvítíme červenou a uspíme program na 3 sekundy. Pak rozsvítíme bílou a uspíme program na dvě sekundy. Poté ale nenastane jak byste čekali rozsvícení diody třetí, nastane zhasínání. Na semaforu totiž vždy první zhasne červené a žluté světlo, než se rozsvítí to zelené:

Raspberry Pi

Proto i my první zhasneme světlo červené a bílé, ale ještě k tomu rozsvítíme světlo modré a program pozastavíme na 3 sekundy.

Pro ukázku jak má finální produkt vypadat se můžete podívat na video:

V příští lekci, Raspberry Pi - Magnetický senzor (otevřené/zavřené dveře), si ukážeme, jak zaznamenat otevřené/zavřené dveře.


 

Předchozí článek
Raspberry Pi - Blikání diody
Všechny články v sekci
Raspberry Pi
Přeskočit článek
(nedoporučujeme)
Raspberry Pi - Magnetický senzor (otevřené/zavřené dveře)
Článek pro vás napsal Aleš Hlavín
Avatar
Uživatelské hodnocení:
37 hlasů
Raspberry
Aktivity