Mrugająca dioda LED: Różnice pomiędzy wersjami
(→Gdzie tą sondę podłączyć?) |
(→Włączanie i wyłączanie diody w pythonie) |
||
(Nie pokazano 16 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 1: | Linia 1: | ||
− | Prosty projekt elektroniczno-programowy na start. | + | Prosty projekt elektroniczno-programowy na start. Przed rozpoczęciem programowania mrugającej diody warto zajrzeć na stronę o [[Wstęp_do_pythona|podstawach pythona]]. |
=== Do czego zmierzamy === | === Do czego zmierzamy === | ||
Linia 7: | Linia 7: | ||
<youtube>nKmRdgq0upY</youtube> | <youtube>nKmRdgq0upY</youtube> | ||
− | === | + | === Dioda do wykrywania stanów logicznych - trochę elektroniki === |
− | [[Plik:Rezystor i led smd.jpg|thumb|400px|right| | + | [[Plik:Rezystor i led smd.jpg|thumb|400px|right|Części SMD są naprawdę małe (kratka ma bok 1cm). Z lewej opornik -- element pozwalający ograniczać przepływ prądu, kierunek jego podłączania ani kolejność nie ma znaczenia (mógłby być odwrócony albo z drugiej strony diody). Po prawej dioda LED -- zauważ, że ma jeden styk jest specjalnie wyróżniony (tutaj zielony marker bliżej lewego boku), który musi być podłączony do masy zasilania (podłączenie tego styku do "+" może ją łatwo uszkodzić).]] |
− | Żeby przygotować naszą | + | Żeby przygotować naszą sondę logiczną kładziemy elementy jak na zdjęciu obok. Następnie -- najlepiej dociskając z góry ramionami pęsety każdy z elementów -- dotykamy obu środkowych styków jednocześnie rozgrzanym grotem lutownicy z niewielką ilością cyny, im krócej tym lepiej, sekunda powinna starczyć. Stopiona cyna powinna spłynąć między elementy i stworzyć połączenie (zarówno elektryczne jak i mechaniczne). |
− | Teraz przygotowujemy krótkie odcinki kabelków miedzianych. Najlepiej jeśli jeden z nich, który przylutujemy od strony masy diody | + | Teraz przygotowujemy krótkie odcinki kabelków miedzianych. Najlepiej jeśli jeden z nich, który przylutujemy od strony masy diody LED (od strony zielonych markerów) był czarny bo tego koloru używa się zwykle do oznaczania masy i przyjęcie takiej konwencji ułatwia szybką orientację, który kabel gdzie przytknąć. Kabelki mniej więcej takiej długości jak na filmie. Ściągamy izolację na małym odcinku na końcach (2mm wystarczy) i cynujemy rozgrzaną lutownicą <b>jeszcze przed lutowaniem</b> do pary dioda-opornik. Takie wstępne pocynowanie końcówek ułatwia potem lutowanie do małych elementów SMD, których nie chcemy "usmażyć" zbyt długim podgrzewaniem. |
Kable układamy w linii ze zlutowaną wcześniej parą elementów i podobnie jak przed chwilą wkładając rozgrzaną lutownicę w środek z odrobiną cyny łączymy razem. | Kable układamy w linii ze zlutowaną wcześniej parą elementów i podobnie jak przed chwilą wkładając rozgrzaną lutownicę w środek z odrobiną cyny łączymy razem. | ||
Linia 19: | Linia 19: | ||
<br clear=all> | <br clear=all> | ||
+ | |||
=== Gdzie tą sondę podłączyć? === | === Gdzie tą sondę podłączyć? === | ||
+ | |||
+ | |||
<div class="thumb"><div class="thumbinner"><div class="thumbcaption"><span style="color:#bb0044">'''Zacznijmy od ostrzeżenia:''' Podłączanie czegoś do płytki Maliny wywołuje konkretne obciążenia elektryczne. Złącze 40 pinowe nie zostało pomyślane jako "publicznie" dostępne (takie jak np. różne złącza w komórce) i zakłada się, że korzysta z niego świadomy użytkownik, który '''wie co robi'''. Łącząc przypadkowe piny '''bez wielkiego wysiłku można spalić płytkę''' i w ten sposób pozbyć się jej. Biorąc pod uwagę, że na nowe dostawy Maliny Zero trzeba czekać zwykle około miesiąca, efekt może być średnio przyjemny. | <div class="thumb"><div class="thumbinner"><div class="thumbcaption"><span style="color:#bb0044">'''Zacznijmy od ostrzeżenia:''' Podłączanie czegoś do płytki Maliny wywołuje konkretne obciążenia elektryczne. Złącze 40 pinowe nie zostało pomyślane jako "publicznie" dostępne (takie jak np. różne złącza w komórce) i zakłada się, że korzysta z niego świadomy użytkownik, który '''wie co robi'''. Łącząc przypadkowe piny '''bez wielkiego wysiłku można spalić płytkę''' i w ten sposób pozbyć się jej. Biorąc pod uwagę, że na nowe dostawy Maliny Zero trzeba czekać zwykle około miesiąca, efekt może być średnio przyjemny. | ||
<br /> | <br /> | ||
− | '''Oczywiście od razu dodajmy, że lepiej spalić płytkę i się czegoś dowiedzieć niż siedzieć i patrzyć jak inni się bawią!''' | + | '''Oczywiście od razu dodajmy, że lepiej spalić płytkę i się czegoś dowiedzieć niż siedzieć i patrzyć jak inni się bawią!''' Najwygodniej bawić się nie psując sobie narzędzi, ale znów bez tej przesady, którą różni ludzie zawierają w słowach "Nie dotykaj bo zepsujesz". Odwrotnie! Dotykaj i ucz się! |
</span> | </span> | ||
</div></div> | </div></div> | ||
+ | |||
Piny złącza 40 pinowego liczy się zaczynając od kwadratowego (numer 1), a dalej "zygzakiem". Poniżej numeracja z zaznaczonym miejscem podłączenia diody tak jak na filmie powyżej. | Piny złącza 40 pinowego liczy się zaczynając od kwadratowego (numer 1), a dalej "zygzakiem". Poniżej numeracja z zaznaczonym miejscem podłączenia diody tak jak na filmie powyżej. | ||
− | + | {| | |
− | [ | + | |- |
− | + | |style="padding-right:0.5em;"| zasilanie 3.3V | |
− | + | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:right;"| 1 | |
− | + | |[[Plik:Pin_kwadratowy.jpg|30px]] | |
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:left;" | 2 | ||
+ | |style="padding-left:0.5em;"| zasilanie 5V | ||
+ | |- | ||
+ | |style="padding-right:0.5em;"| | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:right;"| 3 | ||
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:left;" | 4 | ||
+ | |style="padding-left:0.5em;"| zasilanie 5V (<span style="color:red">UWAGA: Wcześniej było źle oznaczone jako masa!</span>) | ||
+ | |- | ||
+ | |style="padding-right:0.5em;"| | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:right;"| 5 | ||
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:left;" | 6 | ||
+ | |style="padding-left:0.5em;"| masa (tutaj można podłączyć masę diody) | ||
+ | |- | ||
+ | |style="padding-right:0.5em;"| | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:right;"| 7 | ||
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:left;" | 8 | ||
+ | |style="padding-left:0.5em;"| GPIO 14 procesora Maliny połączone jest z tym wyjściem (tu podłączamy dodatni biegun kabelka z diodą) | ||
+ | |- | ||
+ | | itd...|| || || || || || | ||
+ | |- | ||
+ | |style="padding-right:0.5em;"| | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:right;"| 37 | ||
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:left;" | 38 | ||
+ | |style="padding-left:0.5em;"| | ||
+ | |- | ||
+ | |style="padding-right:0.5em;"| | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:right;"| 39 | ||
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |[[Plik:Pin_okragly.jpg|30px]] | ||
+ | |style="width: 15px; background: black;color:white;padding-left:0.5em;padding-right:0.5em;text-align:left;" | 40 | ||
+ | |style="padding-left:0.5em;"| | ||
+ | |} | ||
+ | |||
+ | Na stronie [[Trzykołowiec#Opis wyprowadzeń łącza 40 pinowego|trzykołowca]] znajduje się pełny opis wszystkich pinów. | ||
+ | |||
+ | === Włączanie i wyłączanie diody w pythonie === | ||
+ | |||
+ | |||
+ | Podstawowe informacje o pisaniu programów w '''pythonie''' zawiera [[Wstęp_do_pythona|ta strona]]. Dalej zakładamy, że już coś na ten temat wiesz. | ||
+ | |||
+ | |||
+ | Poniżej prosty kod przełączający diodę podłączoną do wyjść tak jak na schemacie powyżej. Kod będzie działał tylko na Raspbianie ponieważ w tym systemie dostępny jest moduł '''RPi.GPIO''' przeznaczony do pracy z pinami wejścia/wyjścia maliny (''ang. GPIO'' to skrót ''General Purpose Input/Output'' czyli wejście/wyjście dowolnego przeznaczenia, a ''RPi'' to oczywiście ''raspberry pi''). Próbę importowania modułu '''RPi''' na innym systemie (np. na laptopie) '''python''' skwituje komunikatem o jego braku. | ||
+ | |||
− | + | <div class="thumb"><div class="thumbinner"><div class="thumbcaption"><span style="color:#0044bb">'''Uwaga:''' W kodzie poniżej zmieniamy domyślny tryb numeracji wyjść na zgodny z układem pinów na płytce (p. instrukcja <code>gpio.setmode(gpio.BOARD)</code>). Zamiast poprzedniego GPIO 14 zgodnego z numeracją procesora i przyjmowaną domyślnie, będziemy korzystać z numeru 8, czyli po prostu numeru pinu w łączu 40-pinowym (jak na diagramie wyżej). </span></div></div> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<source lang="python"> | <source lang="python"> | ||
# coding: utf-8 | # coding: utf-8 | ||
− | # wczytujemy moduł pythona zawierający | + | # wczytujemy moduł pythona zawierający funkcje obsługi czasu, których używamy do mierzenia opóźnień |
import time | import time | ||
− | # | + | # tym module mamy funkcje do obsługi wyjść złącza 40-pinowego |
− | # żeby było prościej | + | # żeby było prościej będziemy go nazywać dalej w programie krótszą nazwą i bez dużych liter (gpio zamiast RPi.GPIO) |
import RPi.GPIO as gpio | import RPi.GPIO as gpio | ||
# moduł RPi.GPIO może używać dwóch różnych sposobów numerowania pinów; nas interesuje w tej chwili wygodniejszy | # moduł RPi.GPIO może używać dwóch różnych sposobów numerowania pinów; nas interesuje w tej chwili wygodniejszy | ||
− | # tryb BOARD (z ang. płytka), w którym numery | + | # tryb BOARD (z ang. płytka), w którym numery wyjść użyte w kodzie zgadzają się z numerami pinów złącza na płytce Maliny |
gpio.setmode(gpio.BOARD) | gpio.setmode(gpio.BOARD) | ||
− | # będziemy się bawić wyjściem 14 procesora | + | # będziemy się bawić wyjściem GPIO 14 procesora, które na płytce jest podłączone do pinu numer 8 |
− | gpio.setup( | + | # chcemy używać go jako wyjścia sterującego diodą dlatego włączamy tryb OUT |
+ | # (można też odczytywać napięcie na pinie w trybie IN np. jeśli mamy podłączony jakiś czujnik, ale tego tutaj nie potrzebujemy) | ||
+ | gpio.setup(8, gpio.OUT) | ||
− | + | # zmiena, która będzie odliczała kolejne powtórzenia mrugnięcia diodą, zaczynamy od 0 | |
+ | ilePowtorek = 0 | ||
− | while | + | while ilePowtorek < 100: # while powtarza instrukcje tak długo jak długo spełniony jest podany warunek |
− | gpio.output( | + | gpio.output(8, 0) # ustawienie napięcia 0V na styku nr 8, dioda gaśnie |
− | time.sleep(0.5) | + | time.sleep(0.5) # pół sekundy czekamy |
− | gpio.output( | + | gpio.output(8, 1) # ustawienie napięcia 3.3V styku nr 8, dioda zapala się |
− | time.sleep(0.5) | + | time.sleep(0.5) # znów chwilę czekamy |
− | # zwiększamy zmienną | + | # skoro wykonaliśmy mrugnięcie zwiększamy zmienną ilePowtorek o jeden |
− | + | # w końcu osiągnie ona wartość 100, a wtedy warunek w pętli while ilePowtorek < 100 przestanie być spełniony | |
+ | # i program się skończy | ||
+ | ilePowtorek = ilePowtorek + 1 | ||
− | # porządki, czyli przywracamy pierwotne ustawienia wyjść (dobry zwyczaj) | + | # porządki, czyli przywracamy pierwotne ustawienia wyjść zanim skończymy program (dobry zwyczaj!) |
gpio.cleanup() | gpio.cleanup() | ||
</source> | </source> | ||
− | [[Category: | + | |
+ | Żeby powyższy kod wykonać na malinie trzeba go zapisać w pliku na jej karcie pamięci, albo będąc zdalnie połączonym (po ssh) wpisać go z klawiatury i zapisać. | ||
+ | |||
+ | Można również utworzyć zdalne połączenie z "dyskiem" maliny korzystając z protokołu <code>sftp</code> (''ang. safe file transfer protocol'') po lokalnej sieci: wystarczy otworzyć przeglądarkę plików na laptopie, wybrać "Inne położenia" i tam wybrać łączenie ze zdalnym serwerem, gdzie jako adres wpisujemy <code>sftp://192.168.1.177/</code> (oczywiście należy podać aktualny adres IP maliny); po połączeniu malina zażąda podania użytkownika (pi) i hasła (raspberry) i jeśli logowanie przebiegnie prawidłowo zostanie otwarte połączenie po którym będziemy mogli używać "dysku" maliny z laptopa tak, jakby był jednym z katalogów w laptopie. W szczególności mamy swobodny dostęp do katalogu domowego użytkownika '''pi''' czyli do <code>/home/pi</code>. Jest to ten sam katalog, w którym domyślnie się znajdujemy po zdalnym logowaniu poleceniem <code>ssh pi@192.168.1.177</code>. | ||
+ | |||
+ | |||
+ | Ponieważ program jest krótki, równie dobrze można go wykonać wpisując kolejne linijki we włączonym interpreterze pythona (patrz [[Wstęp do pythona]]). Przy wykonywaniu linijka po linijce w terminalu Maliny, warto pamiętać, że wielolinijkową pętlę '''while''' można skrócić do jednej linii tak jak poniżej. | ||
+ | |||
+ | |||
+ | <code> | ||
+ | while True: gpio.output(14, 0); time.sleep(0.5); gpio.output(14, 1); time.sleep(0.5); | ||
+ | </code> | ||
+ | |||
+ | |||
+ | Dla uproszczenia komentarze zostały usunięte, a testowanie wartości zmiennej <code>ilePowtorek < 100</code> zastąpione zostało "zawsze prawdą" (<code>True</code>), a więc pętla będzie się wykonywała w nieskończoność i kiedy już zobaczymy jej działanie i będziemy chcieli ją przerwać musimy to zrobić "ręcznie" wciskając klawisze '''Ctrl-C'''. | ||
+ | |||
+ | [[Category:Projekty_Pi_Zero]] |
Aktualna wersja na dzień 00:18, 16 sty 2019
Prosty projekt elektroniczno-programowy na start. Przed rozpoczęciem programowania mrugającej diody warto zajrzeć na stronę o podstawach pythona.
Spis treści
Do czego zmierzamy
Chcemy uzyskać taki efekt jak na filmie poniżej, czyli swobodną kontrolę nad jednym z cyfrowych wyjść Maliny. Stan wyjścia będziemy testowali diodą LED.
Dioda do wykrywania stanów logicznych - trochę elektroniki
Żeby przygotować naszą sondę logiczną kładziemy elementy jak na zdjęciu obok. Następnie -- najlepiej dociskając z góry ramionami pęsety każdy z elementów -- dotykamy obu środkowych styków jednocześnie rozgrzanym grotem lutownicy z niewielką ilością cyny, im krócej tym lepiej, sekunda powinna starczyć. Stopiona cyna powinna spłynąć między elementy i stworzyć połączenie (zarówno elektryczne jak i mechaniczne).
Teraz przygotowujemy krótkie odcinki kabelków miedzianych. Najlepiej jeśli jeden z nich, który przylutujemy od strony masy diody LED (od strony zielonych markerów) był czarny bo tego koloru używa się zwykle do oznaczania masy i przyjęcie takiej konwencji ułatwia szybką orientację, który kabel gdzie przytknąć. Kabelki mniej więcej takiej długości jak na filmie. Ściągamy izolację na małym odcinku na końcach (2mm wystarczy) i cynujemy rozgrzaną lutownicą jeszcze przed lutowaniem do pary dioda-opornik. Takie wstępne pocynowanie końcówek ułatwia potem lutowanie do małych elementów SMD, których nie chcemy "usmażyć" zbyt długim podgrzewaniem.
Kable układamy w linii ze zlutowaną wcześniej parą elementów i podobnie jak przed chwilą wkładając rozgrzaną lutownicę w środek z odrobiną cyny łączymy razem.
Na koniec na całość możemy nałożyć przeźroczystą rurkę termokurczliwą i zatopić w niej elementy. Sonda gotowa. Jeśli wszystko zrobiliśmy dobrze podłączona do dwóch baterii "paluszków" powinna się zaświecić. Bateria ma masę na od strony płaskiego końca, a biegun dodatni tam gdzie znajduje się dodatkowa wypustka.
Gdzie tą sondę podłączyć?
Piny złącza 40 pinowego liczy się zaczynając od kwadratowego (numer 1), a dalej "zygzakiem". Poniżej numeracja z zaznaczonym miejscem podłączenia diody tak jak na filmie powyżej.
Na stronie trzykołowca znajduje się pełny opis wszystkich pinów.
Włączanie i wyłączanie diody w pythonie
Podstawowe informacje o pisaniu programów w pythonie zawiera ta strona. Dalej zakładamy, że już coś na ten temat wiesz.
Poniżej prosty kod przełączający diodę podłączoną do wyjść tak jak na schemacie powyżej. Kod będzie działał tylko na Raspbianie ponieważ w tym systemie dostępny jest moduł RPi.GPIO przeznaczony do pracy z pinami wejścia/wyjścia maliny (ang. GPIO to skrót General Purpose Input/Output czyli wejście/wyjście dowolnego przeznaczenia, a RPi to oczywiście raspberry pi). Próbę importowania modułu RPi na innym systemie (np. na laptopie) python skwituje komunikatem o jego braku.
# coding: utf-8
# wczytujemy moduł pythona zawierający funkcje obsługi czasu, których używamy do mierzenia opóźnień
import time
# tym module mamy funkcje do obsługi wyjść złącza 40-pinowego
# żeby było prościej będziemy go nazywać dalej w programie krótszą nazwą i bez dużych liter (gpio zamiast RPi.GPIO)
import RPi.GPIO as gpio
# moduł RPi.GPIO może używać dwóch różnych sposobów numerowania pinów; nas interesuje w tej chwili wygodniejszy
# tryb BOARD (z ang. płytka), w którym numery wyjść użyte w kodzie zgadzają się z numerami pinów złącza na płytce Maliny
gpio.setmode(gpio.BOARD)
# będziemy się bawić wyjściem GPIO 14 procesora, które na płytce jest podłączone do pinu numer 8
# chcemy używać go jako wyjścia sterującego diodą dlatego włączamy tryb OUT
# (można też odczytywać napięcie na pinie w trybie IN np. jeśli mamy podłączony jakiś czujnik, ale tego tutaj nie potrzebujemy)
gpio.setup(8, gpio.OUT)
# zmiena, która będzie odliczała kolejne powtórzenia mrugnięcia diodą, zaczynamy od 0
ilePowtorek = 0
while ilePowtorek < 100: # while powtarza instrukcje tak długo jak długo spełniony jest podany warunek
gpio.output(8, 0) # ustawienie napięcia 0V na styku nr 8, dioda gaśnie
time.sleep(0.5) # pół sekundy czekamy
gpio.output(8, 1) # ustawienie napięcia 3.3V styku nr 8, dioda zapala się
time.sleep(0.5) # znów chwilę czekamy
# skoro wykonaliśmy mrugnięcie zwiększamy zmienną ilePowtorek o jeden
# w końcu osiągnie ona wartość 100, a wtedy warunek w pętli while ilePowtorek < 100 przestanie być spełniony
# i program się skończy
ilePowtorek = ilePowtorek + 1
# porządki, czyli przywracamy pierwotne ustawienia wyjść zanim skończymy program (dobry zwyczaj!)
gpio.cleanup()
Żeby powyższy kod wykonać na malinie trzeba go zapisać w pliku na jej karcie pamięci, albo będąc zdalnie połączonym (po ssh) wpisać go z klawiatury i zapisać.
Można również utworzyć zdalne połączenie z "dyskiem" maliny korzystając z protokołu sftp
(ang. safe file transfer protocol) po lokalnej sieci: wystarczy otworzyć przeglądarkę plików na laptopie, wybrać "Inne położenia" i tam wybrać łączenie ze zdalnym serwerem, gdzie jako adres wpisujemy sftp://192.168.1.177/
(oczywiście należy podać aktualny adres IP maliny); po połączeniu malina zażąda podania użytkownika (pi) i hasła (raspberry) i jeśli logowanie przebiegnie prawidłowo zostanie otwarte połączenie po którym będziemy mogli używać "dysku" maliny z laptopa tak, jakby był jednym z katalogów w laptopie. W szczególności mamy swobodny dostęp do katalogu domowego użytkownika pi czyli do /home/pi
. Jest to ten sam katalog, w którym domyślnie się znajdujemy po zdalnym logowaniu poleceniem ssh pi@192.168.1.177
.
Ponieważ program jest krótki, równie dobrze można go wykonać wpisując kolejne linijki we włączonym interpreterze pythona (patrz Wstęp do pythona). Przy wykonywaniu linijka po linijce w terminalu Maliny, warto pamiętać, że wielolinijkową pętlę while można skrócić do jednej linii tak jak poniżej.
while True: gpio.output(14, 0); time.sleep(0.5); gpio.output(14, 1); time.sleep(0.5);
Dla uproszczenia komentarze zostały usunięte, a testowanie wartości zmiennej ilePowtorek < 100
zastąpione zostało "zawsze prawdą" (True
), a więc pętla będzie się wykonywała w nieskończoność i kiedy już zobaczymy jej działanie i będziemy chcieli ją przerwać musimy to zrobić "ręcznie" wciskając klawisze Ctrl-C.