Sygnały, czyli pogadajmy z Arduino Wejścia i wyjścia cyfrowe (zero-jedynkowe) Na samym początku zasialiśmy układ baterią, ale taka bateria szybko nam się rozładowuje i trzeba kupić nową. Zamiast tego możemy brać zasilanie z portu USB komputera i wykorzystywać już tylko samą płytkę Arduino. Zasilanie z USB, a zarazem to, które będziemy brać z Arduino ma napięcie równe 5V. Plusem naszego zasilania będzie właśnie znaleziony na Arduino pin 5V. Minusem zasilania będzie GND - czyli tak zwana MASA. a) Dioda LED jako przykład wyjścia cyfrowego Przypomnijmy o czym musimy pamiętać przy podpinaniu diody do Arduino? Która noga diody jest +plusem, a która -minusem. O użyciu rezystora. Bez niego możemy spalić diodę! Jeśli chcemy, żeby dioda po prostu świeciła możemy podłączyć ją do zasilania ( +5V i GND ), jak na Rysunku 1, ale co jeśli chcemy zaprogramować sposób w jaki się świeci? Musimy podłączyć ją trochę inaczej. Rysunek 1: Dioda podpięta do Arduino tak, że zaświeci się, ale nie będziemy mogli jej programować. strona 1
Rysunek 2: Przykładowe programy sterujące diodą. Poza korzystaniem z zasilania mamy na Arduino dodatkowo tak zwane WEJŚCIA i WYJŚCIA. O WEJŚCIACH mówimy wtedy, kiedy jakaś informacja wchodzi do Arduino (przykłady podamy sobie w kolejnej części), a o WYJŚCIACH mówimy kiedy informacja wychodzi z Arduino. Np. kiedy chcemy sterować Diodą LED tak, żeby nadawała sygnał S.O.S. to z Arduino wychodzi informacja o tym, czy dioda ma się zapalić, czy ma zostać zgaszona. Wykorzystujemy do tego bloczki "Digital [13/12/11/10] on" i "Digital [13/12/11/10] off" jak na Rysunku 2. Bloczek: " Digital13 on" ustawia port na +5V. Bloczek: " Digital13 off" z kolei ustawia go na GND (czyli 0V). Żeby dioda LED reagowała na nasz program musimy ją też odpowiednio podłączyć właśnie do wybranego wyjścia - DIGITAL13, DIGITAL12, DIGITAL11 lub DIGITAL10 jak na Rysunku 2. Z diodą w ten sposób możemy zrobić tylko dwie rzeczy: włączyć, albo wyłączyć. Albo na Digital13 będzie 5V, albo 0V. Dioda się zaświeci, albo nie. Nie mamy nic innego do wyboru. Nie możemy sterować jasnością diody. Nie możemy ustawić 2,5V, albo 3V. Takie wyjścia Arduino, którymi możemy sterować tylko na dwa sposoby nazywamy cyfrowymi. strona 2
Rysunek 2: Dioda podpięta tak, że możemy zaprogramować sposób w jaki się świeci. b) Przycisk jako przykład wejścia cyfrowego W pierwszej kolejności musimy wiedzieć, które nogi przycisku są ze sobą połączone. Na zajęciach mierzyliśmy to miernikiem ustawiając go w trybie, który pikaniem informuje nas, czy coś jest połączone. Efekt testów widzimy na Rysunku 4. Rysunek 4: Które nogi przycisku są ze sobą połączone jeśli go nie naciskamy. Żółty kolor pokazuje połączenia między nogami przycisku. Przy takim ułożeniu na płytce stykowej cały rząd 1 ( kolor niebieski ) jest ze sobą połączony zarówno po lewej jak i po prawej stronie. Tak samo sytuacja wygląda w rzędzie 3 ( kolor różowy ). strona 3
Rysunek 5: Które nogi przycisku są ze sobą połączone jeśli go naciskamy. Po naciśnięciu przycisku powtórzyliśmy testy i okazało się, że wszystkie nogi się łączą. W ten sposób łączą się ze sobą również całe rzędy nr 1 i 3 płytki stykowej ( kolor różowy ). Musimy o tym pamiętać, żeby nie zrobić niechcący zwarcia! Dla utrwalenia: WEJŚCIEM nazywamy piny Arduino do których informacja wchodzi. WEJŚCIAMI będą na przykład DIGITAL2 i DIGITAL3, bo za ich pomocą informacja wchodzi do Arduino. Przetestowaliśmy sobie jak zachowują się wejścia cyfrowe DIGITAL2 i DIGITAL3 jeśli podłączymy je do +5V, albo do GND i efekt można zobaczyć na Rysunku 6. strona 4
Rysunek 6 : Przykładowe podłączenie - DIGITAL2 do +5V, a DIGITAL3 do GND. Wnioski, które mieliśmy po eksperymentach z różnymi połączeniami: Jeśli do DIGITAL2 lub DIGITAL3 podłączyliśmy +5V Scratch oznacza to jako "True", czyli "Prawda". Jeśli DIGITAL2 lub DIGITAL3 podłączymy do GND Scratch oznacza to jako "False", czyli "Fałsz". Jeśli DIGITAL2 i DIGITAL3 nie są podłączone do niczego to Scratch czasami losowo pokazuje "True", a czasami "False". Pamiętajmy o tym! Zaraz zobaczymy jakie problemy to powoduje! DIGITAL2 i DIGITAL3 czytają tylko dwie informacje: albo odczytują napięcie jako TRUE, albo jako FALSE - dlatego są wejściami CYFROWYMI. Łącząc informacje o działaniu przycisku i zachowaniu DIGITAL2 oraz DIGITAL3 podłączyliśmy układ jak na Rysunku 7, ale niestety nie działało to poprawnie. Rysunek 7: Pierwsza próba podłączenia przycisku. Po naciśnięciu przycisku pin DIGITAL2 łączy się z +5V, a Scratch pokazuje "True". Niestety kiedy przycisk nie jest wciśnięty, DIGITAL2 nie jest podłączony do niczego i Scratch pokazuje czasami "True", a czasami "False" co zaburza poprawne działanie programu. Takie połączenie nie wystarczy! strona 5
Ostatecznie pokazaliśmy sobie, że żeby przycisk poprawnie działał musimy dodatkowo użyć rezystora podłączonego do GND - jak na Rysunku 8. Rysunek 8: Poprawne podłączenie przycisku do DIGITAL2 Jak to działa? Narysujmy sobie dodatkowo linie pokazujące co się z czym łączy - patrz Rysunek 9 i Rysunek 10. Rysunek 9: Poprawne połączenie przycisku: co się z czym łączy jeśli nie naciskamy przycisku. strona 6
Jeśli nie naciskamy przycisku to DIGITAL2 jest podłączone przez rezystor do GND. W ten sposób jedyne napięcie jakie widzi DIGITAL2 to właśnie GND. Z drugiej strony przycisk jest podłączony do +5V, ale tak długo jak nie naciśniemy przycisku +5V nie łączy się z niczym, a DIGITAL2 nie widzi tego +5V, W takiej sytuacji Scratch pokazuje nam "False". Sytuacja zmienia się dopiero po naciśnięciu przycisku, co możemy zaobserwować na Rysunku 10. Rysunek 10: Poprawne podłączenie przycisku: co się z czym łączy po wciśnięciu przycisku. Teraz DIGITAL2 z jednej strony łączy się bezpośrednio z +5V i jednocześnie z drugiej strony z rezystorem. Scratch pokazuje "True". Rezystor stawia opór i dzięki temu nie robimy zwarcia. Zauważ też, że rezystor, którego używamy przy przycisku ma na sobie zielony pasek, a ten którego używaliśmy przy diodzie miał pasek czerwony. Na razie będziemy mówić, że rezystor z czerwonym paskiem jest "mały" (stawia prądowi mniejszy opór), a ten z zielonym paskiem to rezystor "duży" (stawia większy opór). Jeśli to na ten moment wydaje ci się trudne, nie przejmuj się, w praktyce ważne dla naszej pracy jest to, żebyśmy przede wszystkim potrafili podłączyć poprawnie przycisk do Arduino tak jak na Rysunku 8. Możesz z tego rysunku zawsze korzystać jak ze ściągi! strona 7
Wejścia i wyjścia analogowe a) Potencjometr, jako przykład wejścia analogowego Zanim zajęliśmy się potencjometrem wykonaliśmy serię pomiarów: a) Jaki opór ma jeden rezystor, którego używaliśmy do podłączenia diody? Rysunek 11. Pomiar oporu pojedynczego rezystora ("małego" jak nazywam go na zajęciach). Żółty ekran na Rysunku 11 to wynik pomiaru miernikiem. Grecka litera Ω oznacza tutaj "Omy", które są jednostką miary oporu, tak jak wolty są jednostką miary napięcia, a metry są jednostką miary długości. Rezystor, którego używaliśmy do podłączenia diody ma 1.00 kω (jeden kiloom), czyli 1000Ω (tysiąc omów). b) Następnie sprawdziliśmy jaki opór mają w sumie dwa takie rezystory połączone ze sobą jedną nogą. Wynik widać na Rysunku 12. Rysunek 12: Dwa rezystory 1.00 kω połączone ze sobą jedną nogą. strona 8
Takie połączenie ze sobą rezystorów nazywamy połączeniem szeregowym. Jeden rezystor miał 1.00 kω, a dwa mają 2.00 kω. Domyślasz się już jak to działa? Dla pewności sprawdźmy jeszcze połączenie trzech rezystorów ( Rysunek 13 ). Rysunek 13 : Trzy rezystory 1.00 kω połączone ze sobą. Wniosek: rezystory połączone szeregowo sumują się i stawiają razem większy opór. strona 9
c) Następnie do szeregowo podpiętych rezystorów podłączyliśmy z Arduino napięcie i zmierzyliśmy jak się zmienia napięcie pomiędzy nimi (Rysunek 14). Rysunek 14: Pomiar napięcia pomiędzy rezystorami 1.00 kω. Widzimy, że napięcie 5V podzieliło się na pół. Sprawdźmy jak sytuacja zmieni się jeśli jeden rezystor będzie miał 1.00 kω, a drugi 2.00 kω jak na Rysunku 15. Rysunek 15: Rezystory R1=2.00 kω i R2=1.00 kω połączone ze sobą szeregowo. strona 10
Wiemy już, że w sumie te rezystory dają nam 3.00 kω. Jak będzie wyglądać sytuacja z napięciem jeśli podłączymy +5V z Arduino jak na Rysunku 16? Rysunek 16: Pomiar napięcia pomiędzy rezystorami R1=2.00 kω i R2=1.00 kω. Widzisz zależność? Mała podpowiedź: 5.00V = 1, 6 7V oraz 5.00V = 3, 3 3V 3 2 * 3 Napięcie nie dzieli się już po równo, bo rezystory nie są równe. Na tym rezystorze, który jest dwa razy większy odkłada się dwa razy większe napięcie. Wniosek: Napięcie pomiędzy rezystorami połączonymi szeregowo dzieli się proporcjonalnie w od tego jak duże są te rezystory. strona 11
Taki układ nazywamy DZIELNIKIEM NAPIĘCIA, ale nie będziemy się tym na razie dokładnie zajmować - kto chce, może spróbować doczytać w internecie! Wiesz już z zajęć, że potencjometr taki jak na Rysunku 17 to w uproszczeniu dwa rezystory, którymi możemy sterować za pomocą pokrętła. Rysunek 17: Potencjometr. Skrajne nogi potencjometru podłączamy do zasilania (czyli lewa do +5V, a prawa do GND, albo odwrotnie - prawa do +5V, a lewa do GND ). Środkową nogę łączymy przewodem do wybranego wejścia analogowego na Arduino: Analog0/Analog1/Analog2/.../Analog5. Po podłączeniu środkowej nogi potencjometru do odpowiedniego wejścia Arduino możemy odczytywać wartość napięcia zamienioną na liczbę od 0 do 1023 w tabeli, która wyświetla się na ekranie w Scratchu. W programie możemy odnosić się do tej wartości używając bloczka "value of sensor [Analog0]", który zobaczyć możesz na Rysunku 18. strona 12
Rysunek 18. Odczytywanie wartości z wejścia analogowego w Scratchu4Arduino. Na zajęciach korzystaliśmy z płytki nakładanej na Arduino, takiej jak na Rysunku 19. Powiedzieliśmy sobie, że Joystick to po prostu dwa potencjometry połączone ze sobą pod kątem prostym w taki sposób, że jeśli wychylamy kontroler w bok to obracamy jednym potencjometrem i drugim jeśli wychylamy kontroler w przód lub tył. Dzięki temu możemy sterować postacią dokładnie i poruszać się np. po skosie, a nie tylko lewo/prawo/góra/dół jak ma to miejsce w przypadku klawiszy i przycisków. RYSUNEK 19. Zdjęcie czerwonej płytki. strona 13
Jednak bloczek "value of sensor [Analog0]" działa poprawnie tylko dla duszka Arduino. Jeśli zechcemy wykorzystać np. potencjometr do sterowania innym duszkiem i stworzenia gry musimy stworzyć zmienną i przekazać wartość z wejścia analogowego do zmiennej. Przykład jak to zrobić można zobaczyć na Rysunku 20. Rysunek 20. Program przekazujący wartość z wejścia Analog0 do zmiennej o nazwie Analog. Dzięki temu będziemy mogli wykorzystać bloczek zmiennej i sterować ruchem dowolnego duszka w lewo i prawo na przykład tak jak na Rysunku 21. Rysunek 21. Dwa przykłady sterowania ruchem duszka w lewo i prawo za pomocą zmiennej, do której wkładamy odczyt z WEJŚCIA ANALOGOWEGO. No właśnie. WEJŚCIE, dlatego że informacja z potencjometru wchodzi do Arduino. Analogowe, to znaczy, że informacja mówi nam więcej niż dwie rzeczy (nie tylko włącz i wyłącz, albo 5V lub 0V). Tylko jak to dokładnie działa? strona 14
Na zajęciach ustawialiśmy różne napięcia na potencjometrze i sprawdzaliśmy co pokazuje nam wejście Analog0. Wyniki testów prezentuje Tabela 1. Napięcie ustawione na środkowej nodze potencjometru: 5V (potencjometr przekręcony maksymalnie w lewo) Liczba pokazana na Analog0: 1023 3V 613 2,5V (potencjometr na środku) 512 1V 204 0V (potencjometr przekręcony maksymalnie w prawo) Tabela 1. Wyniki testów tego co pokazuje wejście analogowe w zależności od podłączonego napięcia. Wejście analogowe bierze napięcie od 0V (GND) do +5V i zamienia je na liczbę od 0 do 1023. I liczy się dla niego tylko napięcie. Nie ma znaczenia jaki czujnik podepniemy do któregoś z WEJŚĆ ANALOGOWYCH (ANALOG0/ANALOG1/ANALOG2/ANALOG3/ ). Może to być np. czujnik odległości. Rysunek 22 przedstawia dokładnie taki z jakiego korzystaliśmy na zajęciach. Czerwony przewód czujnika podpinamy do +5V, czarny do GND, a biały do wybranego WEJŚCIA ANALOGOWEGO, bo ten czujnik został zaprojektowany tak, żeby wysyłać informacje o zmierzonej odległości w formie napięcia. Dzięki temu jesteśmy w stanie odczytać tę informację na Arduino i gdybyśmy chcieli, przeliczyć na centymetry, albo wykorzystując program taki jak na Rysunku 21 i sterować duszkiem. 0 strona 15
Rysunek 22. Czujnik odległości b) Dioda RGB jako przykład zastosowania wyjścia analogowego Wiemy już, że możemy czytać dokładne napięcie wejściami analogowymi. Ale czy możemy wysyłać różne napięcia i w ten sposób sterować różnymi elementami? Oczywiście, że tak! Możemy na przykład w ten sposób sterować jasnością diody, albo prędkością obracania się silnika (ale o tym później). Żeby nie zajmować się w kółko zwykłą diodą LED poznaliśmy diodę RGB, czyli taką, która ma cztery nogi, jak na Rysunku 23. Rysunek 23. Dioda RGB. W praktyce dioda RGB to trzy osobne diody wsadzone w jedno opakowanie. W sklepie możemy znaleźć diody RGB ze wspólną anodą, i takie ze wspólną katodą. Co to znaczy? strona 16
Anoda to +, a katoda -. Zwykła dioda LED miała dłuższą nogę (+plus) i krótszą (-minus). Właśnie tę dłuższą nogę nazywamy mądrze anodą, a krótszą katodą. Więc dla przykładu dioda RGB ze wspólną katodą (czyli -minusem ) to tak jakbyśmy wzięli trzy zwykłe diody LED i połączyli ich krótsze nogi w jedną, jak na Rysunku 24. Dioda RGB ze wspólną anodą (czyli +plusem ) miałaby połączone w jedną dłuższe nogi. Rysunek 24. Uproszczona prezentacja trzech LEDów, których krótsze nogi zostały połączone tak jak w diodzie RGB ze wspólną katodą. Co jeszcze warto wiedzieć o diodach RGB: Ta wspólna katoda lub anoda będzie zawsze najdłuższą nogą diody RGB. Jeśli nie macie pewności, czy kupiliście diodę RGB ze wspólną anodą, czy katodą możecie to zawsze sprawdzić miernikiem testując na różne sposoby tak jak testowaliśmy normalną diodę, żeby sprawdzić, czy nie jest spalona. Potem po prostu ta najdłuższa noga jeśli jest anodą ( +plusem ) musi zostać podpięta do +5V, jak na Rysunku 26, a jeśli jest katodą ( -minusem ) to musi zostać podpięta do GND jak na Rysunku 25. Jeśli w diodzie RGB są 3 samodzielne diody LED to musimy do każdej podpiąć rezystor tak jak na Rysunkach 25 i 26. Diodę RGB wykorzystuje się, żeby uzyskać "dowolny kolor". Jeśli zapalimy czerwoną diodę i diodę niebieską to otrzymamy fioletowy. Mieszając kolory i jasność tych kolorów możemy w teorii uzyskać prawie dowolny kolor! strona 17
Rysunek 25. Najprostszy sposób podpięcia diody RGB ze wspólną katodą (wspólnym -minusem ) Rysunek 26. Najprostszy sposób podpięcia diody RGB ze wspólną anodą (wspólnym +plusem ) strona 18
Być może już udało ci się zauważyć, że na rysunkach 25 i 26 nie podpiąłem diody do DIGITAL13, albo DIGITAL12, tak jak do tej pory, ale do DIGITAL9, DIGITAL6 i DIGITAL5. Już tłumaczę! Jeśli zajrzymy do Scratcha4Arduino znajdziemy niebieski bloczek: "Analog [9/6/5] value: [255]" Czyli po polsku "Analog [9/6/5] wartość: [255]". Jest to bloczek, którym możemy ustawiać wartość WYJŚĆ ANALOGOWYCH, o których już wspomnieliśmy. Jak to działa? Na zajęciach podpięliśmy miernik ustawiony na mierzenie napięcia stałego do 20V i mierzyliśmy napięcie na wyjściu analogowym DIGITAL9 podpinając miernik taki jak na Rysunku 27, czyli czerwony przewód do DIGITAL9, a czarny do GND. Wyniki naszych pomiarów można zobaczyć w Tabeli 2. Rysunek 27. Mierzenie napięcia na wyjściu analogowym DIGITAL9. strona 19
Ustawienia na bloczku Analog 9 value: Wartość napięcia odczytana z miernika: 0,00V 0.98V 2,49V 5,00V Tabela 2. Wyniki pomiarów napięcia przy zmianie ustawienia bloczka "analog [9] value". Możemy zaobserwować, że podobnie jak w przypadku WEJŚĆ ANALOGOWYCH, gdzie napięcie od 0V do 5V było zamieniane na liczbą od 0 do 1023, tak przy WYJŚCIACH ANALOGOWYCH liczba od 0 do 255 zostaje zamieniona na napięcie od 0V do 5V. I możemy to wykorzystać w programie, żeby np. powoli rozjaśniać diodę i powoli ją gasić zamiast po prostu zapalać i gasić jak w przypadku WYJŚĆ CYFROWYCH. Przykład programu sterującego diodą podłączoną do WYJŚCIA ANALOGOWEGO można zobaczyć na Rysunku 28. Rysunek 28. Przykład programu ze zmienną, który stopniowo zwiększa, a potem zmniejsza napięcie na WYJŚCIU ANALOGOWYM 9. strona 20
Podsumowując temat wejść i wyjść: Wejścia to te piny Arduino, którymi informacja WCHODZI do procesora. Np. przycisk, potencjometr, albo jakiś czujnik. Wyjścia to te piny Arduino, którymi informacja WYCHODZI na zewnątrz. Dzięki temu możemy czymś sterować. Np. diodą, silnikiem, sygnałem dźwiękowym. Sygnały cyfrowe to takie, których informacja ma tylko dwie możliwości - albo coś jest włączone, albo wyłączone. Przykładem może być przycisk. Sygnały analogowe to takie, których informacja jest zapisana dokładniej, bo liczbą w jakimś szerszym zakresie. Na przykład wejście analogowe to liczba od 0 do 1023, a wyjście analogowe to liczba od 0 do 255. W obu przypadkach te liczby zamieniane są na napięcie od 0 do 5V. strona 21