Kurs Raspberry Pi – #13 – PWM, wejścia, skrypty z kamerą

Kurs Raspberry Pi – #13 – PWM, wejścia, skrypty z kamerą

Za nami podstawy GPIO i pierwsze skrypty. Tym razem przetestujemy w praktyce generowanie sygnału PWM. Wykorzystamy również piny jako wejścia naszego układu.

Na zakończenie napiszemy skrypt, który połączy GPIO oraz dedykowaną kamerę. Dzięki temu zamienimy Raspberry Pi w aparat fotograficzny.

Symulacja świateł drogowych na Raspberry Pi

Zanim przejdziemy do nowych zagadnień czas na krótką powtórkę z poprzedniego odcinka. Kto z Was spróbował napisać skrypt, który będzie symulował działanie świateł drogowych?

Oto nasza wersja tego zadania. Diody zostały podłączone przez rezystory 1,2kΩ do pinów numer: 16 (czerwona), 20 (żółta) oraz 21 (zielona). Schemat połączeń był więc bardzo prosty:

Schemat podłączenia diod do Raspberry Pi.

W praktyce układ prezentował się następująco:

Kolejnym krokiem było przygotowanie skryptu, który powstał na bazie poprzedniej części kursu. Na początku ustawiamy 3 piny jako wyjścia, a następnie w pętli zapalamy lub gasimy poszczególne diody:

W efekcie otrzymaliśmy prosty sygnalizator, który na zmianę wyświetla poszczególne kombinacje:

Działanie sygnalizatora świateł drogowych w praktyce.

"Zadanie domowe" za nami - pora przejść do czegoś nowego!

Zestaw elementów do kursu

Gwarancja pomocy na forum Błyskawiczna wysyłka

Elementy niezbędne do wykonania wszystkich ćwiczeń z kursu podstaw Rasberry Pi dostępne są w formie gotowych zestawów!

Kup w Botland.com.pl

Generowanie sygnału PWM na Raspberry Pi

Malinka potrafi generować sygnał PWM, który najczęściej wykorzystywany jest do zmiany jasności świecenia diod (w tym taśm LEDowych). Jest on również przydatny, gdy chcemy sterować prędkością silników lub pozycją serw modelarskich.

W naszym przypadku najłatwiej będzie zacząć od diody świecącej. Podłączmy ją przez rezystor 1,2kΩ do pinu numer 12, zgodnie z poniższym schematem:

Schemat podłączenia diody do pinu nr 12.

Następnie wydajemy poniższe polecenie, które odpowiednio skonfiguruje pin. Polecenie można wpisać bezpośrednio w konsoli lub stworzyć skrypt (tak jak robiliśmy to w poprzedniej części kursu).

Poprzednio do zmiany stanu pinu wykorzystywaliśmy słowo kluczowe write, tym razem będzie to pwm. Oprócz numeru pinu musimy podać również parametr, który będzie określał wypełnienie sygnału PWM. Parametr ten przyjmuje wartości z zakresu 0-1024, gdzie 1024 oznacza 100% wypełnienia.

Przykładowo, aby dioda świeciła z pełną jasnością wydamy polecenie:

Aby ją wyłączyć wpiszemy:

Jeśli argumentem będzie inna liczba (np. 800) to dioda będzie świeciła z mniejszą jasnością. Najlepiej poeksperymentować w tym miejscu testując kilka różnych wartości np.: 300, 400, 800.

Uniwersalne wejścia w Raspberry Pi

Potrafimy już sterować wyjściami malinki, czas odczytać sygnał z zewnątrz. W tym celu podłączmy jedno wyprowadzenie przycisku do pinu numer 26, a drugie do masy (GND). 

Podłączenie przycisku do Raspberry Pi.

Jak wiemy, domyślnie wszystkie piny są wejściami, jednak możemy być zaskoczeni próbując odczytać wartość z pinu 26 - ciągle będzie tam zero. Nie mamy rezystora podciągającego na płytce, ale tak jak w przypadku mikrokontrolerów, możemy go aktywować w procesorze.

W tym celu ustawiamy tryb up (od pull-up):

Teraz możemy odczytać stan pinu pisząc:

Powinniśmy uzyskać wynik "1", a po naciśnięciu przycisku "0". 

Działanie przycisku w praktyce widoczne jest na poniższym zrzucie ekranu:

Odczytanie stanu przycisku.

Odczytywanie stanu wejścia w przerwaniu

Ciągłe odczytywanie wartości może być męczące zarówno dla nas, jak i dla procesora. Dlatego znacznie lepiej wykorzystać mechanizm przerwań. Poniższe polecenie sprawi, że program zatrzyma się do chwili, gdy naciśniemy przycisk (zbocze opadające sygnału, czyli falling):

Po wydaniu powyższego polecenia program się zatrzyma (co widać na lewym zrzucie ekranu), a po wciśnięciu przycisku wykona się do końca. W tym wypadku oznacza to zakończenie działania skryptu, bo składał się on tylko z jednej linijki:

Za chwilę wykorzystamy mechanizm przerwań w praktyce - wtedy wszystko się wyjaśni.

Raspberry Pi jako aparat fotograficzny

Wiemy już jak pisać skrypty i sterować portami GPIO w podstawowym zakresie. Pora wykorzystać to do zbudowania czegoś praktycznego. Napiszemy skrypt, który zmieni malinkę w aparat fotograficzny.

Będzie on wyposażony dodatkowo w przycisk, diodę i buzzer. Zdjęcie będzie robione po wciśnięciu przycisku, a pozostałe elementy będą sygnalizowały (światłem i dźwiękiem) stan aparatu. Dzięki temu każdy będzie mógł zrobić zdjęcie malinką.

Do wcześniej złożonego układu dodajemy moduł buzzera, a do Raspberry Pi podłączamy dedykowaną kamerę. Aktualnie używane piny to:

  • pin numer 21 - moduł buzzera,
  • pin numer 12 - dioda podłączona przez rezystor 1,2kΩ,
  • pin numer 26 - przycisk.

Podłączenie wszystkich niezbędnych elementów do Raspberry Pi.

W praktyce będziemy musieli okiełznać małą plątaninę kabli:

Zacznijmy pisać skrypt. Na początku konieczna jest konfiguracja GPIO. Do pinu 21 podłączamy buzzer, pin 12  będzie sterował diodą, a do pinu numer 26 podłączamy przycisk:

Następnie damy znać użytkownikowi (włączając diodę), że aparat jest gotowy i oczekuje na wciśnięcie przycisku. Wyjście, do którego podłączyliśmy diodę zostało skonfigurowane jako PWM, więc możemy sterować jasnością naszego sygnalizatora. Gdy użytkownik naciśnie przycisk program ruszy dalej:

 Teraz wyłączymy diodę i włączymy buzzer, który zasygnalizuje robienie zdjęcia:

Kolejny, najważniejszy krok, to wykonanie zdjęcia. W tym celu wykorzystujemy dobrze nam znany program raspistill. Dla przypomnienia wystarczy jedna linijka:

Na koniec wyłączamy buzzer:

Ostatecznie skrypt aparat.sh ma więc postać:

Na koniec nadajemy odpowiednie uprawnienia (szczegóły omówiliśmy poprzednio):

Teraz uruchamiamy "aparat fotograficzny":

Po starcie programu włączy się dioda, która poinformuje użytkownika o gotowości aparatu. Wciśnięcie przycisku wyłączy diodę i uruchomi buzzer. Dźwięk ucichnie, gdy zdjęcie zostanie zrobione. Działanie programu przedstawione jest graficznie na poniższej animacji:

Graficzne "opis" działania aparatu.

Wykonane zdjęcia możemy podejrzeć np. przez WinSCP:

Widok zdjęć zapisanych na Raspberry Pi przez nasz skrypt aparatu.

Podsumowanie

Podczas tego artykułu uzupełniliśmy informacje na temat wykorzystywania GPIO. Stworzyliśmy również skrypt, który łączył uniwersalne porty wejścia/wyjścia z innymi peryferiami (kamerą). Opisane tutaj podstawy są wystarczające do wykonania wielu przydatnych skryptów. W dalszej części kursu zajmiemy się pisaniem prostych programów w Pythonie. Dzięki temu korzystanie z GPIO będzie jeszcze łatwiejsze, szczególnie, gdy będziemy chcieli podłączyć bardziej skomplikowane peryferia.

Nawigacja kursu

Autor: Piotr Bugalski
Testy, ilustracje: Piotr Adamczyk
Redakcja: Damian Szymański

GPIO, kursRaspberryPi, malinka, PWM, RPI

Komentarze

Dodaj komentarz