Kurs Arduino - cz.1
Jeśli zamierzasz rozpocząć przygodę z Arduino, sugerujemy, abyś wybrał model Uno, z jego doskonałym połączeniem USB i dobrej jakości stabilizatorami napięcia na płytce. Arduino Uno dostępne jest w ofercie wielu sprzedawców w Internecie. W Polsce są to np. Kamami (http://www.kamami.pl), Botland (http://www.botland.com.pl) czy Nettigo (http://www.nettigo.pl).
Gdy posiadasz już swoją wersję Arduino, możesz przejść do jego podłączania i konfigurowania swojego środowiska pracy.
Kurs Arduino - Przygotowywanie środowiska pracy
Gdy wreszcie otrzymasz swoje nowe i błyszczące Arduino, prawdopodobnie będziesz rwać się, aby rozpocząć z nim pracę. Ten fragment pomoże Ci w tym, gdyż powiemy tu, jak po raz pierwszy podłączyć Arduino do komputera; dowiesz się także, co jest potrzebne, aby przygotować swoje środowisko pracy.
Żeby zacząć, będziesz potrzebować Arduino. Jak wspomniano wcześniej, na początek dobre wydają się wersje Duemilanove czy Uno. Będziesz także potrzebować przewodu USB, aby podłączyć Arduino do komputera.
Oprogramowanie dla Arduino
W tej chwili Arduino to tylko płytka z paroma elementami elektronicznymi. Aby zaprząc ją do jakichś pożytecznych prac, musimy wydać jej instrukcje, a do tego potrzebujemy środowiska programistycznego Arduino (IDE). Środowisko zapewnia wszystko, co jest
potrzebne, aby zaprogramować Arduino, wliczając w to wiele przykładowych programów oraz szkiców pokazujących, jak podłączyć typowe urządzenia, takie jak diody świecące, wyświetlacze LCD czy niektóre rodzaje czujników, i komunikować się z nimi.
Z pewnością ucieszysz się, słysząc, iż podobnie jak sprzęt Arduino, także oprogramowanie jest wolne (otwarte) i możesz je za darmo pobrać pod adresem http://arduino.cc/en/Main/Software (strona w jęz. angielskim). Upewnij się jedynie, że pobierasz wersję
odpowiednią dla Twojego systemu operacyjnego. Dostępne są wersje dla systemów Windows, Mac OS X oraz Linux. W dodatku A znajdziesz szczegółową instrukcję instalacji środowiska w każdym z systemów. Ważne, abyś dokładnie zapoznał się ze środowiskiem zintegrowanym, ponieważ to tutaj będziesz pisać wszystkie swoje programy. W świecie Arduino fragment programu (kodu) zwany jest szkicem (ang. sketch). Szkic przekazuje Arduino listę instrukcji, a Arduino rusza i szkicuje Twój pomysł. Środowisko zintegrowane pomaga ukryć większość złożoności Arduino, pozwalając Ci znacznie łatwiej tworzyć projekty.
UWAGA: Pojęcie szkic (sketch) pochodzi z języka Processing, którego często uczą się studenci sztuki i projektowania i na którym opiera się Arduino. Osoby zaznajomione z programowaniem powinny traktować szkic jak coś na kształt programu.
Podstawowa konfiguracja sprzętu
Arduino podłączamy do komputera przez port USB. Z USB pobierane jest stabilizowane napięcie +5 V, wymagane do zasilania Arduino. Port USB dostarcza wystarczającą ilość energii, aby np. zaświecić kilka diod, co pozwala na pewne podstawowe testy.
Kurs Arduino - Twój niezbędnik Arduino
Oto lista zakupów rekomendowana przez nas osobom, które dopiero zaczynają przygodę z Arduino:
- Arduino (Uno albo Duemilanove);
- niewielka płytka stykowa i zwory (aby budować niewielkie obwody);
- zestaw diod świecących;
- zestaw rezystorów;
- bateria 9 V;
- złącze baterii (zacisk);
- fotorezystor;
- niewielki silniczek prądu stałego lub serwomechanizm;
- membrana piezoelektryczna (rodzaj malutkiego głośniczka; taki, jaki spotykamy np. w grających kartkach okolicznościowych);
- potencjometr (rodzaj rezystora o regulowanej rezystancji).
Typowe projekty, jakie możesz wykonać przy użyciu tych elementów, obejmują migające diody świecące, modele świateł (sygnalizatorów) ulicznych, elektroniczną pozytywkę czy wyłącznik aktywowany światłem. Jeśli odważysz się zapuścić krok dalej,
możesz dołożyć do zestawu następujące elementy:
- nakładkę Adafruit GPS umożliwiającą rejestrowanie odczytanego z czujnika GPS położenia wraz z datą i czasem;
- nakładkę Adafruit Wave umożliwiającą uzyskanie specjalnych efektów poprzez odgrywanie dźwięków zapisanych na karcie SD;
- nakładkę Motor umożliwiającą sterowanie parą silników, na przykład w napędzie mobilnego robota.
Wielu sprzedawców oferuje komplety składające się z płytki Arduino i zestawu dodatkowych części. Często możesz liczyć na zniżkę, kupując komplet zamiast pojedynczych części. Teraz, skoro Twoje środowisko pracy jest już gotowe, nadszedł czas, aby stworzyć swój pierwszy szkic i na swoim sprzęcie wykonać odpowiednik kultowego wśród programistów „Witaj, świecie!” (ang. „Hello world!”).
Niech coś się wydarzy!
Zanim popędzisz zgromadzić wszystkie te ekscytujące dodatki, zatrzymaj się, gdyż wszystko, czego potrzebujesz, aby uruchomić pierwszy przykład, to samo Arduino. Każda płytka posiada bowiem wbudowaną diodę świecącą podłączoną do pinu nr 13. W tym zaś przykładzie sprawisz, że dioda LED będzie na przemian zapalać się i gasnąć.
Twoja pierwsza migająca dioda świecąca
Diody świecące dostępne są w rozmaitych kolorach, jednak dioda dołączona do 13. pinu Arduino jest zazwyczaj zielona. Dioda świeci się, gdy przepływa przez nią prąd, zatem wyprowadzenia nr 13 możesz używać jako wyłącznika. Jeśli go włączysz, dioda zaświeci się, natomiast gdy go wyłączysz, dioda zgaśnie.
Zacznijmy od napisania odpowiedniego szkicu.
Szkic błyskający diodą świecącą
Uruchom środowisko programistyczne Arduino i wpisz do niego następujący kod. Na początku może to wyglądać przytłaczająco, ale nie przejmuj się.
Listing 1.1. Polecenia potrzebne, aby dioda zaczęła błyskać
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Przytoczony kod jest dość jednoznaczny. Określasz pin 13 jako wyjście, a następnie w pętli wykonujesz polecenia, które na przemian ustawiają port 13 w stan wysoki (ang. HIGH) i niski (ang. LOW) na okres 1 sekundy. Czas opóźnienia (ang. delay) podawany jest w milisekundach, zatem 1000 ms to 1 s.
UWAGA: Upewnij się, że dokładnie przekopiowałeś podany listing. Zwróć uwagę na obecność średnika (;) na końcu niektórych linii oraz na prawidłowe użycie wielkich liter. Z punktu widzenia Arduino digitalwrite to nie to samo co digitalWrite.
Łączymy wszystko razem
Gdy podłączysz Arduino do komputera przewodem USB, podany szkic będzie sterował wbudowaną diodą świecącą umieszczoną obok pinu nr 13. Możesz również dołączyć zewnętrzną diodę LED, wpinając ją pomiędzy pin 13 i masę. Takie połączenie pokazuje
rysunek 1.4. Zauważ, że dioda musi być podłączona w odpowiedni sposób — krótsze wyprowadzenie to katoda albo – (minus), natomiast dłuższe to anoda albo + (plus). Umieść zatem dłuższe wyprowadzenie w złączu nr 13, a krótsze w złączu masy.
Rysunek 1.4. Dioda świecąca podłączona pomiędzy złączem nr 13 a masą. Zwróć uwagę, iż krótsze wyprowadzenie podłączone jest do masy
UWAGA: W normalnych warunkach aby uchronić diodę LED przed przepaleniem, wymagany byłby jeszcze rezystor ograniczający prąd. Na tę chwilę korzystaj po prostu z diody LED umieszczonej na płytce Arduino.
Gdy dioda jest już na swoim miejscu, możesz przejść do kolejnego punktu, aby dowiedzieć się, jak przetestować szkic.
Ładowanie i testowanie programu
Nadszedł czas, aby sprawdzić, czy nasz szkic działa! Przede wszystkim podłącz Arduino do komputera przewodem USB. Musisz teraz dokonać paru ustawień, aby umożliwić współpracę oprogramowania z Twoim Arduino. Najpierw musisz wybrać typ posiadanej płytki. Wybierz Narzędzia/Płytka, a następnie wskaż swój model Arduino (patrz rysunek 1.5).
Rysunek 1.5. W tym przykładzie wybrano model Arduino Uno, choć — jak widać — lista możliwości jest całkiem spora
Następnie musisz wybrać port szeregowy, gdyż połączenie USB z Arduino widziane jest jako połączenie szeregowe. Wybierz Narzędzia/Port szeregowy, a następnie wybierz właściwy port (patrz rysunek 1.6). W systemie Mac OS X będzie to coś w stylu /dev/tty. usbmodem dla Arduino Uno albo coś w rodzaju /dev/tty.usbserial dla wcześniejszych modeli, takich jak Duemilanove czy Diecimila. W systemie Windows port będzie określony jako COMx (np. COM3).
Rysunek 1.6. Z listy wybierz odpowiedni numer portu szeregowego
UWAGA: Rysunek 1.6 przedstawia wybór portu w systemie Windows. W systemie Mac OS X nazwy portów będą inne, zgodnie z wcześniejszym opisem.
Następnie naciśnij przycisk Załaduj w oknie edytora. Patrz rysunek 1.7.
Rysunek 1.7. Naciśnij przycisk Załaduj, aby przesłać szkic do pamięci Arduino Poczekaj kilka sekund i dioda powinna zacząć błyskać, zapalając się i gasnąc co około 1 sekundę.
UWAGA: Program pozostaje w pamięci Arduino nawet po wyłączeniu zasilania, aż do momentu zastąpienia go innym szkicem.
Widok tej pierwszej migającej diody potwierdzający, że wszystko działa jak należy, zawsze jest ekscytujący, ale to nie wszystko, co możesz zrobić za pomocą Arduino. Teraz przyjrzymy się bardziej szczegółowo środowisku programistycznemu i zapoznamy się z głównym oknem edytora.
Kurs Arduino - Poznajemy zintegrowane środowisko programistyczne
Jak wcześniej wspomniano, środowisko Arduino oparte jest na środowisku języka Processing, który został zaprojektowany pod kątem łatwości jego nauki i użytkowania. Środowisko zawiera wszystkie narzędzia, jakie są niezbędne, aby napisać i przesłać szkic (program) do pamięci Arduino.
Edytor kodu
Gdy uruchamiasz środowisko, na początku otwiera się okno nowego (pustego) szkicu. Automatycznie zostaje mu nadana tymczasowa nazwa nawiązująca do aktualnej daty. Później, gdy będziesz zapisywać szkic, możesz zmienić tę nazwę na bardziej odpowiednią. Rysunek 1.8 przedstawia okno edytora z opisanymi jego różnymi częściami i przyciskami. Na pasku narzędziowym u góry okna dostępne są następujące funkcje:
- Weryfikuj — sprawdza poprawność szkicu. Błędy wyświetlane są u dołu okna.
- Nowy — otwiera nowy, pusty szkic.
- Otwórz — otwiera listę zawierającą wcześniej zapisane szkice i przykłady.
- Zapisz — zapisuje szkic, prosząc o nazwę, gdy jest to pierwszy zapis danego szkicu.
- Załaduj — sprawdza poprawność szkicu i przesyła program do pamięci Arduino.
- Monitor portu szeregowego — otwiera w nowym oknie monitor transmisji szeregowej
Na dole głównego ekranu znajdują się dwa okienka. Pierwsze wyświetla aktualny status i komentarz do wykonywanych operacji. Drugie prezentuje informacje związane z weryfikacją i ładowaniem szkicu do pamięci Arduino. Tu również sygnalizowane są wszystkie błędy w kodzie programu.
Dla poprawy czytelności edytor kodu automatycznie podświetla odpowiadające sobie pary nawiasów okrągłych i klamrowych oraz składnię programu, a także dodaje automatyczne wcięcia tekstu.
Monitor portu szeregowego
Wspomniany wcześniej monitor portu szeregowego przechwytuje i wyświetla dane przepływające przez połączenie USB pomiędzy Arduino a środowiskiem programistycznym uruchomionym na komputerze. Program uruchomiony na Arduino może zarówno odbierać, jak i wysyłać dane. Możesz to zobaczyć na rysunku 1.9. Górna część okna monitora umożliwia wysyłanie danych do Arduino. Możesz na przykład wysłać stąd polecenie do Arduino, aby ustawił serwomechanizm pod zadanym kątem albo załączył czy rozłączył przełącznik. W głównej części okna wyświetlane są dane odebrane z Arduino. Mogą to być np. dane odczytane z czujnika GPS czy podgląd innych sygnałów przetwarzanych przez Arduino. Monitor portu szeregowego oddaje nieocenione usługi przy uruchamianiu kodu, który wiąże się z komunikacją pomiędzy Arduino a jakimś oprogramowaniem działającym na komputerze. Możesz dzięki niemu upewnić się, że Arduino wysyła właściwe dane w odpowiednim formacie. W oknie monitora możesz także ustawić prędkość transmisji szeregowej, włączyć autoprzewijanie odbieranego teksu oraz wybrać rodzaj zakończenia linii dodawanego do poleceń wysyłanych do Arduino.
Rysunek 1.8. Typowy szkic z oznaczonymi przyciskami i obszarami okna edytora
Rysunek 1.9. Monitor portu szeregowego prezentujący transmisję z Arduino drukującego tabelę znaków ASCII
Wyłapywanie błędów
Powróćmy do głównego okna edytora. Główną część okna zajmuje edytor kodu, w którym zapisujesz swój kod programu. Gdy zakończysz jego wprowadzanie, możesz zweryfikować jego poprawność lub załadować swój szkic do pamięci Arduino.
Wszystkie błędy w kodzie programu wypisywane są w okienku na dole. Na rysunku 1.10 widać celowo wprowadzony przez nas błąd, gdy pominęliśmy średnik na końcu jednej z linii programu.
Rysunek 1.10. Edytor zgłasza błąd, który celowo popełniliśmy w kodzie. Narzędzie sprawdzania kodu pokazuje, w której linii
prawdopodobnie występuje błąd, a także jaki rezultat był oczekiwany
Prezentowana jest szczegółowa informacja o rodzaju błędu, jak również numer linii, w której błąd ten został wykryty. Na szczęście narzędzie sprawdzania kodu, nawet jeśli nie jest w stanie wskazać, na czym dokładnie polega problem, potrafi jednak wskazać
Ci, gdzie należy go szukać. Jak widzisz na rysunku 1.10, walidator kodu poprawnie zidentyfikował brak średnika, jak również wskazał miejsce, w którym błąd ten stwierdzono.
Kurs Arduino - Przetwarzanie kodu
Co właściwie środowisko robi z napisanym przez Ciebie kodem? Gdy naciskasz przycisk Załaduj, środowisko sprawdza poprawność kodu i nieznacznie go modyfikuje, aby przekształcić szkic w poprawny program w języku C++. Następnie program jest kompilowany, czyli przekształcany do postaci, która jest zrozumiała dla procesora Arduino. Następnie — przed przesłaniem do pamięci Arduino — wytworzony plik jest łączony ze standardowymi bibliotekami Arduino. Teraz, gdy zapoznałeś się już ze środowiskiem programistycznym, nadszedł czas, aby lepiej zrozumieć ideę szkiców Arduino.
Budowa szkicu
Typowy szkic składa się z dwóch części czy też procedur: pierwsza to procedura inicjalizacyjna nazwana setup (z ang. rozruch, przygotowanie), druga zaś, nazwana loop (z ang. pętla), zawiera zwykle główną treść programu. Teraz przyjrzymy się dokładniej
obu tym procedurom.
Procedura „setup”
Jeśli wybierasz się pobiegać, musisz najpierw wykonać parę czynności: założyć buty do biegania, zabrać butelkę wody i rozgrzać się. Tak samo jest z Arduino. Musi się przygotować, nim rozpocznie pracę. Przygotowanie zawiera się w procedurze (funkcji) nazwanej setup (patrz listing poniżej). W funkcji setup zwyczajowo konfigurujemy porty cyfrowe, ustawiając je jako wejścia (INPUT) lub wyjścia (OUTPUT), oraz wybieramy prędkość transmisji szeregowej.
Listing 1.2. Funkcja „setup”
pinMode(13, OUTPUT);
Serial.begin(9600);
}
Kod zawarty w funkcji setup pokazanej na listingu 1.2 konfiguruje tryb pracy wyprowadzenia mikrokontrolera nr 13 jako wyjścia oraz ustawia prędkość transmisji portu szeregowego na 9600 bodów.
Nawet jeśli nie potrzebujesz niczego konfigurować, ta procedura i tak jest wymagana. Inaczej otrzymasz komunikat o błędzie w czasie weryfikacji lub ładowania szkicu. Stwórz po prostu pustą funkcję i umieść w niej komentarz:
// nic nie trzeba konfigurować
}
Teraz przyjrzymy się drugiemu niezbędnemu elementowi szkicu — funkcji loop.
Nieskończona pętla
Gdy wybierzesz się pobiegać, biegniesz i biegniesz, aż skończysz (ty ustalasz, kiedy skończyłeś). Tak samo Arduino: wykonuje bez końca (w pętli) kod zawarty w funkcji loop aż do momentu spełnienia jakiegoś określonego warunku albo wyłączenia zasilania.
Na tym listingu widzisz pętlę z listingu 1.1 odpowiedzialną za błyskanie diodą świecącą.
Listing 1.3. Przykładowy kod funkcji loop odpowiedzialny za migotanie diodą świecącą
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
W tym przypadku Arduino wykonuje bez końca kod zawarty w pętli, migając diodą świecącą aż do wyłączenia zasilania.
Teraz, gdy poznałeś już podstawowe zasady tworzenia szkiców, czas na podsumowanie niniejszego rozdziału ważnym przypomnieniem.
Kurs Arduino - Komentowanie kodu
Napisałeś doskonały fragment kodu, z którego jesteś bardzo dumny. A teraz wyobraź sobie, że sześć miesięcy później ktoś inny przegląda Twoje wcześniejsze prace i natrafia na ten sam szkic, ale nie jest w stanie zorientować się, jak on działa i co robi. Prosty opis niezwykle by tu pomógł. Dlatego właśnie bezcenne jest umieszczanie komentarzy w kodzie.
Istnieją dwa główne sposoby umieszczania komentarzy w szkicu: jako krótki, jednoliniowy komentarz lub jako blok tekstu. Jednoliniowy komentarz rozpoczyna się dwoma prawymi ukośnikami // (ang. slash). Informują one kompilator, że wszystko za nimi,
aż do końca linii jest komentarzem i powinno zostać zignorowane przy kompilacji. Gdy zamierzasz dodać komentarz wieloliniowy (blok tekstu), otaczasz go parą znaczników /* (ukośnik, gwiazdka) i */ (gwiazdka, ukośnik). Obydwa sposoby zaprezentowane są poniżej:
/* A to jest blok tekstu (komentarza)
rozciągający się na wiele linii
*/
Gdzie należy umieszczać komentarze? Każdy szkic powinien zawierać na początku blok komentarza (nagłówek), który krótko opisuje, co dany szkic robi oraz kto i kiedy go napisał, a także zawiera numer wersji. Kolejny listing prezentuje przykładowy nagłówek szkicu.
Listing 1.4. Przykładowy nagłówek szkicu
Program błyskający diodą LED
Autor: Martin Evans
Data: 2009.09.01
Wersja: 1.0
*/
Jednoliniowe komentarze rozmieszczone w tekście programu pozwalają szybko zorientować się, co robi dany fragment kodu. Nie musisz komentować wszystkiego; umieść po prostu komentarze w miejscach, w których Twoim zdaniem pomogą w przyszłości
Tobie bądź innym osobom zrozumieć określony fragment kodu. Zwykle lepiej jest mieć za dużo komentarzy niż za mało. Kolejny listing pokazuje typowe komentarze występujące w kodzie.
Listing 1.5. Przykładowe komentarze do kodu
{
Serial.begin(9600);
// wypisuje tytuł wraz ze znakiem końca linii
Serial.println("Tabela kodów i znaków ASCII");
}
// pierwszym widocznym znakiem ASCII jest '!' o kodzie 33:
int thisByte = 33;
/* znaki ASCII możesz zapisywać także w apostrofach;
przykładowo '!' to to samo co 33, więc mógłbyś napisać:
int thisByte = '!'; */
Przyjrzeliśmy się edytorowi kodu i środowisku programistycznemu, poznaliśmy budowę szkicu z funkcjami setup i loop, a także omówiliśmy wagę komentowania kodu.