Raspberry_Pi_12.pdf

(3365 KB) Pobierz
Na warsztacie
SZKOŁA
Poziom tekstu: średnio trudny
To już 12-ty odcinek kursu Raspberry Pi. Numery archiwalne MT
z poprzednimi odcinkami można kupić na www.ulubionykiosk.pl
Raspberry Pi (12)
łączenie logiki
Wykorzystanie Raspberry Pi do kontrolowania innych urządzeń elektronicznych
otwiera przed konstruktorami całą kategorię nowych wyzwań. Nawiązanie
komunikacji między RPi a np. czujnikiem odległości oznacza konieczność
pokonania barier komunikacyjnych – wzajemnego rozumienia „języka”, którym
łączone elementy się posługują. Do tego dochodzą jeszcze zagadnienia typowo
fizyczne – takie, jak kwestie zasilania (napięcie, prąd) i różnych poziomów
napięcia, jakimi mogą operować układy. Są to kwestie na tyle specyficzne,
że często sprawiają problemy Młodym Technikom. Co więcej – pozostawiając
sprawy samym sobie, ryzykujecie uszkodzenie tych układów.
Wyposażenie Raspberry Pi w złącze GPIO umożliwia
łączenie go z wieloma różnymi układami elektro-
nicznymi. Mogą to być urządzenia wejściowe, jak
czujniki zbierające dane o otoczeniu, np. odległo-
ści, koloru, dymu – a nawet kamery termowizyjne.
Urządzenia wyjściowe informują (lub ostrzegają)
otoczenie o wynikach przetwarzania zebranych
danych. Na pewno słyszeliście o różnego rodzaju
wyświetlaczach (diody LED, LCD) oraz układach
generujących dźwięki (buzzery, syreny itp.). Rynek
jest pełen nie tylko poszczególnych elementów, ale
i całych modułów gotowych do podłączenia do jed-
nostki sterującej. Dzięki temu projekty zaczynają
przypominać budowanie z klocków.
Niestety, czasami bywa to złudne. Mimo wielu uła-
twień, każdy układ elektroniczny ma swoją specyficzną
naturę. Wymaga odpowiedniego napięcia zasilania,
pobiera moc, komunikuje się w charakterystyczny dla
siebie sposób. Nie wszystkie klocki pasują do innych
– a niektóre nawet się nie lubią. Weźmy za przykład
kondensatory elektrolityczne. Znajdują się w wielu mo-
dułach. Zasilenie ich niezgodnie z polaryzacją sprawi,
że kondensatory zaczną puchnąć, żeby po chwili eks-
plodować! Oczywiście część układów będzie na taką
ewentualność zabezpieczona. Ale nie wszystkie! Ostra
konkurencja cenowa sprawia, że produkty są „odchu-
dzane” o co mniej efektowne funkcje. Możecie powie-
dzieć, że dioda kosztuje grosze. Przemnóżcie jednak
te grosze przez miliony sprzedanych sztuk, a szybko
zbierze się sumka nie do pogardzenia.
Wnioski z powyższego sprowadzają się do ko-
nieczności uprzedniego dokładnego przyjrzenia się
właściwościom danego modułu. Jakiego napięcia
wymaga, jaki prąd pobiera, jak komunikuje się
z układem sterującym, na co jest wrażliwy.
Rozumu nigdy za wiele
Wśród adeptów budowania własnych urządzeń
elektronicznych (tzw. DYI – ang.
do it yourself,
czyli
rodzime zrób-to-sam) obserwuję niebezpieczną
tendencję do kompletnego zawierzenia wszelkim
poradnikom, których całe mnóstwo można znaleźć
w Internecie. Chciałbym Was szczególnie uczulić
na to, że nie zawsze są one prawdziwe, aktualne
i uniwersalne. Generalnie powinniście zachować
dużą ostrożność i nigdy nie robić niczego na ślepo
czy tylko na podstawie jednego tekstu. Często ich
autorzy idą na różne skróty (specjalnie lub z niewie-
dzy), a przedstawione przez nich rozwiązania mogą
mieć charakter bardzo prowizoryczny. Zazwyczaj
zadziałają – ale czy po pół godzinie nie doprowadzą
do przegrzania jakiegoś układu, znacznie skracając
czas jego życia (czasami do tej właśnie pół godzi-
ny)? Czy po dłuższym okresie używania nie staną
się źródłem zagrożenia? Jest to szczególnie istotne
w dziedzinie budowania automatyki domowej. Tam,
gdzie w grę wchodzą duże napięcia i prądy, napraw-
dę warto zachować rozsądek i na chłodno podejść
do tematu. A zanim zaczniecie grzebać w skrzynce
z bezpiecznikami, może lepiej poradzić się zawodo-
wego elektryka?
Wiele z rozwiązań prezentowanych w Sieci jest
często dokumentowanych po fakcie. Łatwo w ta-
kim przypadku zapomnieć o pewnych istotnych
82
m.technik – www.mt.com.pl – nr 7/2015
szczegółach. W rezultacie
zainwestujecie w projekt
pieniądze (kupno kompo-
nentów), a na końcu może
się okazać, że nie działa, jak
powinien, lub tak, jak to wy-
gląda na filmiku zamieszczo-
nym przez autora.
Kolejną kwestią są same
komponenty. Nigdy nie
ma nic za darmo. Kupując
„odpowiednik” lub „klon”
kosztujący dziesięć razy
mniej niż firmowy układ,
1. Przetwornica DC-DC, generująca piki napięcia na wyjściu USB, przy pod-
musicie wziąć pod uwagę,
łączaniu i odłączaniu jej od źródła zasilania
że niższa cena nie bierze się
z niczego. Oczywiście, część
ceny każdego produktu stanowią koszty związane
Nie jestem jednak przeciwnikiem tanich kompo-
z jego projektowaniem, dystrybucją i utrzymaniem
nentów (oczywiście pod warunkiem, że nie naruszają
pracowników. Płacicie także za „markę”. Ale część
niczyich praw autorskich, majątkowych itp.). Co więcej
z tych kosztów to również elementy o większych
– uważam, że to głównie dzięki nim i ich masowej
tolerancjach błędów, które potrafią dłużej wytrzy-
dostępności, jesteśmy świadkami boomu na DYI.
mać przeciążenia, są bardziej odporne na zakłóce-
Proponuję jednak, żebyście zawsze podchodzili do nich
nia i spełniają odpowiednie normy środowiskowe.
z pewną rezerwą. Oscyloskop to raczej droga „zabawka”.
Pamiętajcie, że do tych norm w niektórych krajach
Nawet podstawowy model kosztuje co najmniej tysiąc zł.
przykłada się większą wagę niż w innych.
Pozwala jednak na dokładną analizę tego, co dzieje się
W efekcie możecie dostać wyrób modułopodobny,
z układami. Nie raz uratował mi projekt. Jeżeli już macie
który w zasadzie działa, trochę działa, lub czasem
dostateczne przekonanie, że z elektroniką zwiążecie się
działa... Może się okazać, że wymagane są np.
na dłużej – warto w niego zainwestować.
dodatkowe kondensatory filtrujące na zasilaniu (np.
Wiele można się również dowiedzieć za pomocą
klony nrf24l01), albo układ jest dużo mniej stabil-
zwykłego multimetru. Pozwoli Wam stwierdzić, czy
ny niż jego firmowy odpowiednik. Często – idąc
w badanym układzie nie ma przypadkiem żadnych
tropem obniżania kosztów – okrojona jest też sama
zwarć. Warto sprawdzić pod tym kątem każdy nowy
funkcjonalność.
moduł, zanim podłączycie go do Waszego Raspberry.
Problem z niefirmowymi elementami polega
Żeby badać zachowania już uruchomionych ukła-
na tym, że nie zawsze są one odpowiednio udoku-
dów zaopatrzcie się w analizator stanów logicznych.
mentowane. Brakuje odpowiednich schematów.
Ceny najtańszych narzędzi tego typu zaczynają się
Na płytkach umieszcza się tajemnicze przyciski
zazwyczaj od 30 zł – i takie dla amatorów są zazwy-
i zworki, których funkcjonalność można odkryć
czaj wystarczające.
dopiero po zakupie. Dodatkową kwestią jest jakość
Poza tym gorąco namawiam Was do czytania,
wykonania. Zdarzają się elementy po prostu wadliwe.
czytania i jeszcze raz czytania. Nie poprzestawajcie
Jedno z moich Arduino padło ofiarą rozszerzenia (ang.
na jednej stronie www. Spójrzcie na kilka podobnych
shield),
które spinało zasilanie z masą. Efekty takiego
projektów, korzystajcie z zaufanych źródeł – stron
problemu są nietrudne do przewidzenia. Kiedyś natra-
producentów lub firm specjalizujących się w apli-
fiłem na egzemplarz przetwornicy DC-DC z wyjściem
kacji modułów i przede wszystkim oficjalnych not
USB. Wszystko byłoby w porządku, gdyby nie piki
katalogowych. A gdy już będziecie wiedzieli, czego
zasilania generowane przy jej włączaniu. Powodowały
nie rozumiecie – poszukajcie odpowiedzi na specja-
one krótkie, trwające kilkadziesiąt milisekund poja-
listycznych forach. Pod warunkiem zadania pytania
wienia się napięcia. Podłączone do USB urządzenie
dotyczącego unikalnego problemu, na pewno znaj-
włączało się na część sekundy, a potem wyłączało. Nie
dzie się ktoś, kto udzieli fachowej rady.
trzeba chyba Wam tłumaczyć, co mogłoby to oznaczać
I najważniejsze: nie odpuszczajcie. Czasami zrozu-
dla np. twardego dysku czy Raspberry otwierającego
mienie samego problemu zajmuje godziny, dni i ty-
system plików. Problem polega na tym, że są to zacho-
godnie. Ale dzięki poświęconemu czasowi będziecie
wania, które bez porządnego sprzętu laboratoryjnego
mogli odkryć prawdziwą naturę zagadnienia i poznać
raczej ciężko przebadać.
wiele szczegółów, które pozwolą Wam uniknąć po-
W przypadku towarów będących przedmiotem
dobnych sytuacji w przyszłości. Dotyczy to nie tylko
prywatnego importu z Dalekiego Wschodu praktycz-
samego sprzętu, ale również oprogramowania.
nie nie ma możliwości wyegzekwowania gwarancji
Biblioteki dostępne są najczęściej na zasadach
(rękojmi) ani uzyskania pomocy od producenta.
wolnych i otwartych licencji. Taki model pozwala
83
Na warsztacie
na analizę kodu źródłowego a to z kolei – na zro-
zumienie reguł rządzących daną implementacją.
To wspaniale podnosi poziom wiedzy, umiejętno-
ści i – moim zdaniem – jest jednym z kluczowych
czynników sprzyjających rozwojowi kompetencji
technicznych.
Kod udostępniany na zasadach Open Source może
mieć jednak swoje wady. Czasami jest tworzony
na potrzeby bardzo konkretnego projektu – wca-
le nie z zamiarem bycia uniwersalnym (ta uwaga
dotyczy również rozwiązań sprzętowych). Może
się więc zdarzyć, że nie będzie dokładnie pasował
do Waszych potrzeb. Wtedy pozostaje odpowiednio
go zmodyfikować (najlepiej publikując zmiany dalej,
na potrzeby kolejnych „pokoleń”) lub... poszukać
innej biblioteki. I tak się często dzieje. Powstaje wiele
„klonów” mniej lub bardziej różniących się od ory-
ginalnej pracy – nie zawsze z nią do końca zgodnych
(tzw. kompatybilność wstecz). Miksowanie takich
bibliotek z oryginalnym rozwiązaniem może nie
przynieść spodziewanych efektów.
np. dla Arduino opartego na mikrokontrolerze Atmel
ATMega328p dopiero napięcie 3 V na wejściu będzie
oznaczało „1”; w szczególności:
• logiczne „0” na wyjściu = 0-0,9 V;
• logiczne „0” na wejściu = 0-1,5 V;
• logiczne „1” na wyjściu = 4,2-5 V;
• logiczne „1” na wejściu = 3-5 V.
Dla CMOS’owych urządzeń 3,3 V, jakim jest CPU
Raspberry (zob. [2]), poziomy te będą całkiem inne:
• logiczne „0” na wyjściu = 0-0,5 V;
• logiczne „0” na wejściu = 0-0,8 V;
• logiczne „1” na wyjściu = 2,4-3,3 V;
• logiczne „1” na wejściu = 2-3,3 V.
Zauważcie, że w obydwu przypadkach – dla TTL
i CMOS – istnieje pewna „szara strefa”, gdzie napię-
cie już nie jest „zerem” ale jeszcze nie jest „jedynką”.
I jak to w szarej strefie – nigdy nie wiadomo, jak
zostanie to zinterpretowane.
Załóżmy teraz (czysto teoretycznie!), że podłącza-
my piny GPIO Raspberry bezpośrednio do portów
Arduino. Stan niski na wyjściu pinu Raspberry
to do 0,5 V. Arduino na wejściu za stan niski uważa
napięcie do 1,5 V, więc tu się urządzenia dogadają.
Stan wysoki na wyjściu Raspberry to minimum 2,4 V
– na wejściu Arduino to 3 V. Arduino może więc
uznać taki sygnał za szum. Praktycznie Raspberry
daje na stanie wysokim sygnał pod 3 V – więc tu naj-
prawdopodobniej nie powinno być problemów.
W drugą stronę Raspberry zrozumie „0” z Arduino.
Jednak „1” z Atmela może już uszkodzić Raspberry!
Przyłożenie na piny GPIO napięcia większego niż
Poziom tekstu: średnio trudny
SZKOŁA
(Nie)Zgodność charakterów
Udało się Wam już upewnić, że zebrane moduły nie
przedstawiają bezpośredniego zagrożenia dla życia
i portfela. Teraz czas na analizę, czy będą ze sobą
współpracować. W tym tekście zajmę się tylko
komunikacyjną częścią dopasowania elementów
elektronicznych. Sprawdzimy, czy istnieją logiczne
przeszkody, żeby elementy ze sobą „rozmawiały”.
W szczególności przeanalizujemy tu zagadnienia
związane z dopasowaniem poziomów logiki.
Poziomy logiki
Binarne układy cyfrowe posługują się sygnałami
logicznymi o dwóch poziomach. Określamy je jako
„zero” i „jedynkę” lub sygnał „niski” i „wysoki”.
Sygnały te realizowane są przez impulsy o odpo-
wiednim napięciu i minimalnym natężeniu (rzędu
miliamperów). Większość układów posługuje się sys-
temami opartymi na elementach 3,3 V (CMOS) lub
5 V (TTL). Popularnie uważa się, że np. sygnał 0 V
to logiczne „0”, a sygnał 3,3 V lub 5 V (w zależności
od typu układu) to logiczna „1”. W rzeczywistości
posługiwanie się napięciami o dokładnie takich
wartościach byłoby bardzo trudne do realizacji i jed-
nocześnie mało praktyczne. Zamiast konkretnych
wartości, mamy do czynienia z pewnymi przedziała-
mi napięć uważanymi za „0” lub „1”, dodatkowo róż-
nymi na ich wejściu i wyjściu. I tak dla 5 V układów
TTL (zob. [1]):
• logiczne „0” na wyjściu = 0-0,4 V;
• logiczne „0” na wejściu = 0-0,8 V;
• logiczne „1” na wyjściu = 2,7-5 V;
• logiczne „1” na wejściu = 2-5 V.
Oczywiście są to wartości teoretyczne, wynikające
z budowy samych tranzystorów. Praktyczne reali-
zacje mogą się różnić o tolerancje lub specyficzne
warunki – jak w przypadku granicznego 5 V. I tak
2. Zazębianie się poziomów logiki
84
m.technik – www.mt.com.pl – nr 7/2015
3,3 V (tu: 4,2-5 V) jest niebezpieczne dla Raspberry.
Konieczna jest konwersja napięcia wyjściowego
logiki z Arduino na odpowiedni poziom napię-
cia wejściowego dla Raspberry. Przeanalizujmy
to na podstawie ultradźwiękowego miernika odległo-
ści HC-SR04 oraz cyfrowego czujnika temperatury
DS18B20.
time.sleep(1)
print „Rozpoczynam pomiar”
GPIO.output(TRIG_PIN, True)
time.sleep(0.00001)
GPIO.output(TRIG_PIN, False)
#Czekamy na stan wysoki; uwaga
na wciecie
while GPIO.input(ECHO_PIN) == 0:
impuls_start = time.time()
#to jest odpowiedz czujnika; uwaga
na wciecie
while GPIO.input(ECHO_PIN) == 1:
impuls_koniec = time.time()
#obliczmy ilosc milisekund i odległosc
impuls_czas = impuls_koniec
- impuls_start
odległosc = impuls_czas * 17150
print „Odleglosc: „, odleglosc, „ cm”
Uwaga: funkcja time.time() działa z dokładnością
co do dziesiątek milisekund (2 miejsca po przecinku
sekund) – zależnie od systemu.
Teraz zajmiemy się podłączeniem kabelków – ale
na razie bez pinu
Echo.
Połączcie więc:
• pin
GND
czujnika do pinu 9 Raspberry (ja mam
na 6 podłączony UART);
• pin
VCC
czujnika do pinu 2 Raspberry (zasilanie
5 V);
• pin
Trig
czujnika do pinu 7 Raspberry (GPIO4);
• pin
Echo
czujnika – na razie niepodłączony.
Dodatkowo do czujnika podłączyłem analizator
logiczny. Przejściówka UART-USB pozwoliła mi
na łatwą komunikację (podłączona GND – pin 6,
Rx/Tx do pinów 8 i 10). Układ testowy wyglądał jak
na ilustracji
3.
Wydruk z analizatora logicznego znajdziecie
na ilustracji
4.
Długi impuls na Echo miał czas
3. Testowanie czujnika HC-SR04
Ultradźwiękowy czujnik
odległości HC-SR04
Ultradźwiękowy miernik odległości HC-SR04 ma
cztery piny: dwa opisane jako
Trig
i Echo odpowie-
dzialne za wymianę danych, masę oraz zasilanie Vcc
(zob. [3]). Czujnik wymaga zasilania 5 V i posługuje
się logiką TTL. Zgodnie ze specyfikacją pobiera
ok. 15 mA prądu, co mieści się w zakresie możli-
wości pinu 2 (5 V) Raspberry. Jego obsługa polega
na podaniu impulsu na pin
Trig
(od ang.
trigger
– wyzwalacz) i obserwacji odpowiedzi na pinie
Echo.
Sekwencja wygląda tak:
• wystaw krótki sygnał wysoki na pin
Trig
(Python:
time.sleep(0.0001));
• zaczekaj aż pin
Echo
zmieni swój stan na wysoki;
• zmierz czas, przez który pin
Echo
utrzymuje się
w stanie wysokim;
• pomnóż zmierzony czas przez 17 150, a otrzy-
masz odległość do przeszkody w cm.
Napiszmy teraz w Pythonie program, który pozwo-
li nam przeprowadzić doświadczenie. Wymagane jest
zainstalowanie biblioteki Rpi.GPIO (preinstalowana
w większości nowszych dystrybucji):
$ sudo apt-get install python-rpi.gpio
Otwórzcie nowy skrypt w edytorze
nano
(na pod-
stawie [4]; uwaga na wcięcia charakterystyczne dla
Pythona):
$ nano dist.py
#importujemy biblioteki
import RPi.GPIO as GPIO
import time
#Numeracja portow wedlug BCM i wylacze-
nie ostrzezen
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#Piny odpowiedzialne
dzenia, fizyczny 7
TRIG_PIN=4
#Piny odpowiedzialne
dzenia, fizyczny 11
ECHO_PIN=27
#ustawiamy ktory pin
a ktory wejsciem
GPIO.setup(TRIG_PIN,
GPIO.setup(ECHO_PIN,
za wysylanie pobu-
za odebranie pobu-
jest wyjsciem
GPIO.OUT)
GPIO.IN)
#Poczekaj na ustalenie czujnika
GPIO.output(TRIG_PIN, False)
85
Na warsztacie
trwania ok. 0,9 ms, daje
to ok. 15,5 cm – co zgadzało
się z odległością czujnika
od testowej przeszkody.
Pobudzenie działa, kod
gotowy – dlaczego jesz-
cze nie podłączyłem
Echo
do Raspberry? Żeby Wam
to dokładnie pokazać,
zamiast analizatora logicz-
nego użyję oscyloskopu
(ilustracja 5).
Widać tu, że o ile pobu-
dzenie jest na poziomie 3,3 V
– odpowiedź ma 5 V! To zde-
cydowanie może zaszkodzić
Raspberry. Wyniki zgadzają
się z teoretyczną dysku-
sją z początku tego tekstu.
Czujnik, będąc układem TTL,
na wejściu jako logiczną „1”
oczekuje napięcia co najmniej
2 V. CMOS’owy Raspberry
na wyjściu podaje od 2,4 V.
To sprawia, że czujnik „rozu-
mie” pobudzenie z Raspberry
i poprawnie na nie odpowia-
da. Zgodnie z teorią – odpo-
wiada sygnałem 5 V na pinie
Echo.
Taka wartość napięcia
jest jednak niebezpieczna dla
Raspberry!
Poziom tekstu: średnio trudny
SZKOŁA
4. HC-SR04 pobudzony z Raspberry odpowiada na wyjściu
Echo
sygnałem
o długości odpowiadającym odległości od wykrytej przeszkody
Konwersja
poziomów logiki
5. Pobudzenie i odpowiedź czujnika HC-SR04 na wydruku z oscyloskopu
dwukierunkowa pozwala natomiast na łączenie ukła-
dów porozumiewających się np. za pomocą protoko-
łu i2c. Stosując konwertery w Waszych realizacjach,
musicie być świadomi takich właściwości i odpo-
wiednio dobierać ich piny do potrzeb (ilustracja
6).
Schemat podłączenia Raspberry do czujnika
odległości HC-SR04 poprzez konwerter z liniami
jednokierunkowymi (lewy na ilustracji 6) przedsta-
wiłem na ilustracji
7.
Zauważcie, że:
• po stronie „HIGH” podłączacie napięcie 5 V
z Raspberry i wejścia/wyjścia czujnika;
• po stronie „LOW” podłączacie napięcie 3,3 V
i GPIO z Raspberry;
• musicie zwrócić uwagę, które z linii są jednokie-
runkowe – tutaj H2 do L2 i H3 do L3.
Wniosek z powyższego: konwertery są proste
w używaniu, nie trzeba się ich obawiać. Ich ceny
kształtują się na poziomie kilku zł, nie obciążą więc
znacząco budżetu. Niestety, wymagają dodatkowych
podłączeń, co w ciasnych obudowach może być
kłopotliwe. Jeżeli planujecie używać wielu układów
operujących różnymi poziomami logiki (np. czuj-
niki), musicie w swoim projekcie uwzględnić kilka
dodatkowych elementów i kabli.
Do „tłumaczenia” różnych poziomów logiki stosuje
się gotowe układy, tzw. konwertery poziomów logicz-
nych. Zamieniają one sygnały 5 V na 3,3 V – w jed-
ną lub obydwie strony. Każdy z takich modułów
wymaga podłączenia zasilania 5 V i 3,3 V oraz masy.
Pozostałe piny służą do łączenia linii logiki.
Poszczególne realizacje takich konwerterów mogą
się od siebie znacząco różnić. Niektóre z nich oferują
linie jednokierunkowe – gdzie napięcia konwer-
towane są jedynie z wyższych na niższe. Praca
6. Konwertery logiki: niektóre linie są jednokierunko-
we (z lewej produkowany przez msx-elektronika.pl)
86
m.technik – www.mt.com.pl – nr 7/2015
Zgłoś jeśli naruszono regulamin