Kurs Arduino cz. 1 – Początki, czyli miganie diodą

Arduino, jak już pisałem w poprzednim artykule, jest bardzo ciekawą platformą, którą możemy wykorzystać do tworzenia własnych urządzeń. Praca z nią jest stosunkowo prosta – by zacząć nie trzeba mieć nawet lutownicy, ani wiedzy o programowaniu mikrokontrolerów. Wszystko jest przygotowane tak, że nawet początkujący mogą pisać naprawdę ciekawe programy. Poprzedni kurs elektroniki do dziś cieszy się zainteresowaniem, dlatego postanowiłem pisać nieformalną kontynuację w postaci kursu Arduino. Mikrokontrolery są coraz częściej spotykane i wiele ułatwiają, dlatego warto wiedzieć jak się je programuje.

Sprzęt i oprogramowanie

Kurs będzie oparty o płytkę Arduino Uno, ale inne kompatybilne z standardem Arduino również powinny się nadać, choć mogą być wtedy potrzebne drobne zmiany w kodzie. Więcej informacji możesz zdobyć w poprzednim wpisie opisującym platformę Arduino.

Do zaprogramowania Arduino będzie potrzebne specjalnie przygotowane oprogramowanie.  W zależności od używanego systemu instalacja i konfiguracja wygląda nieco inaczej. Ja sprawdziłem pod tym względem dwa systemy, ale Arduino IDE można uruchomić pod kontrolą praktycznie każdego liczącego się systemu.

Windows

W przypadku Windowsa trzeba się trochę napracować. Przede wszystkim musimy odwiedzić stronę projektu Arduino i pobrać archiwum z programem:

http://arduino.cc/en/Main/Software

Po wypakowaniu go i podłączeniu płytki trzeba dodatkowo zainstalować sterownik, co jest tutaj dosyć dokładnie wyjaśnione:

http://arduino.cc/en/Guide/UnoDriversWindowsXP

Ubuntu

Z tego systemu korzystam na co dzień i tutaj jest zdecydowanie mniej roboty – oprogramowanie dla Arduino można zainstalować z pomocą Centrum Oprogramowania za pomocą kilku kliknięć, a sterownika nie trzeba instalować osobno.

Po zainstalowaniu oprogramowania

Gdy już mamy Arduino IDE, należy go uruchomić. Przy pierwszym włączeniu lub próbie zaprogramowania mikrokontrolera, pokaże się pewnie okno, w którym możemy wybrać typ posiadanej płytki i zmieć parametry komunikacji z nią. Jeśli takie okienko nie pokazałoby się, potrzebne opcje możemy zmienić z pomocą menu Tools.

Pierwszy program, pierwszy układ

Programy dla Arduino piszemy z użyciem języka bardzo przypominającego C++ – dokładniej jest to C++, ale nieco okrojony z funkcjonalności i podlegający kilku przekształceniom przed kompilacją. To w sumie nieważne, choć jako ciekawostka pewnie zainteresuje osoby mające już coś wspólnego z programowaniem. Postaram się wszystko tłumaczyć tak, aby każdy zrozumiał, nawet jeśli nie miał styczności z mikrokontrolerami i programowaniem.

Zadaniem naszego pierwszego programu będzie coś prostego – miganie diodą LED podłączoną do Arduino. Oto on:


Można go skopiować, wkleić w Arduino IDE i wysłać do mikrokontrolera, ale jeszcze nie zobaczysz żadnych efektów, poza migotaniem diód sygnalizujących przesył danych podczas programowania. Najpierw podłączmy niezbędne elementy, potrzebne będą:

  • Arduino,
  • Płytka stykowa,
  • Dwa przewody połączeniowe,
  • Dioda LED,
  • Rezystor (w zakresie ok. 100-500 omów)

Jeśli masz już Arduino, to znalezienie pozostałych elementów nie powinno Ci sprawić żadnego problemu. Z płytki prototypowej nie musisz korzystać, choć jest to wygodne i będziemy jej używać w następnych częściach kursu, więc warto się w nią zaopatrzyć. Jak to wszystko połączyć pokazuje poniższy obrazek:

Po podłączeniu diody i wgraniu programu (ikona ze strzałką), dioda powinna zacząć zapalać się i gasnąć w półsekundowych odstępach. Jeśli masz problem z zaprogramowaniem, zadaj pytanie w komentarzu lub załóż nowy temat na forum, a postaramy się pomóc – początki bywają najtrudniejsze, a  nie wszystko da się wytłumaczyć w kursie.

Struktura programu

Wklejenie gotowego programu i zaprogramowanie nim mikroprocesora to nie problem, trochę trudniejsze może być zrozumienie jego działania, szczególnie jeśli ktoś nie miał jeszcze do czynienia z programowaniem.

Programy dla Arduino składają się z dwóch bloków – setup i loop. Są to funkcje, które muszą się znaleźć w kodzie programu. Funkcja setup jest wywoływana na samy początku, zaraz po uruchomieniu programu, a kod zawarty w funkcji loop jest wywoływany po niej i powtarzany tak długo, jak to jest możliwe (aż do wyłączenia zasilania).

Czym jest funkcja?

Funkcja to zdefiniowany wcześniej fragment programu, który możemy później wywoływać w różnych miejscach programu. W przypadku Arduino wiele funkcji znajduje się w bibliotece standardowej i są od razu dostępne do użycia. W naszym programie użyliśmy kilku takich funkcji oraz utworzyliśmy dwie wcześniej wspomniane – setup i loop.

Sposobu tworzenia funkcji można się łatwo domyślić, ale tutaj podaje ogólny przepis:


Weźmy za przykład funkcję setup. TYP_ZWRACANY nas póki co nie interesuje, zajmiemy się tym w jednej z następnych lekcji, dzisiaj chcę tylko podać informacje niezbędne do zrozumienia tego jak działa język programowania. Nazwą funkcji jest oczywiście setup. Następnie w nawiasach znajduje się lista przyjmowanych przez funkcję parametrów – w naszym przykładzie nie ma ich wcale, ale występują w standardowych funkcjach, których używamy w programie. Kolejnym elementem jest blok kodu ograniczony nawiasami klamrowymi – polecenia zawarte wewnątrz niego są po kolei wykonywane w momencie wywołania funkcji.

Jak wygląda takie wywołanie? Kontynuujmy na przykładzie funkcji setup, w której znajdują się dwie linie. Pierwsza z nich, rozpoczynająca się od dwóch ukośników “//” to komentarz, nie jest on brany pod uwagę przy przetwarzaniu programu, służy do zapisywania informacji dla człowieka, programisty. Druga linijka to właśnie wywołanie funkcji. Najpierw podajemy jej nazwę – pinMode, a następnie w nawiasie listę wartości parametrów przyjmowanych przez funkcję. Na końcu instrukcji znajduje się średnik. Jeśli średnika nie będzie, program się nie skompiluje i nie pomigamy sobie diodą.

Funkcje użyte w programie

W programie użyliśmy trzech funkcji standardowych, dostępnych od razu w bibliotekach Arduino:


Mikrokontrolery AVR do poprawnej pracy wymagają podania sposobu wykorzystywania wyprowadzenia. Funkcja pinMode służy do informowania o tym, w jaki sposób będziemy używać danego wyprowadzenia i wymaga podania dwóch parametrów. Pierwszy z nich to liczba, która mówi którego pinu ma dotyczyć konfiguracja, a drugi to jeden z trybów pracy:

  • INPUT – wyprowadzenie pracuje jako wejście (INPUT_PULLUP dodaje rezystory podciągające – to informacja dla bardziej zaawansowanych),
  • OUTPUT – wyprowadzenie pracuje jako wyjście.


Aby zapalić lub zgasić diodę użyliśmy funkcji digitalWrite. Podobnie jak w poprzedniej funkcji, pierwszym parametrem jest numer wyprowadzenia. Drugi to natomiast stan do ustawienia:

  • HIGH – stan wysoki, ok 5V,
  • LOW – stan niski, ok 0V.


Mikrokontrolery AVR, choć nie są demonami prędkości, potrafią wykonywać kilkanaście milionów operacji na sekundę. To bardzo dużo, choć w porównaniu do komputerów, czy nawet nowoczesnych komórek żałośnie mało. Nasz prosty programik wykorzystuje naprawdę drobną część możliwości procesora. Co więcej, musimy go nieco zwolnić. I własnie do tego służy funkcja delay. Zajmuje ona procesor na podany czas. Warto zaznaczyć, że czas podajemy w milisekundach, tysięcznych częściach sekundy.

Na koniec

Przede wszystkim zachęcam do eksperymentowania! Przy pomocy tych trzech funkcji można wykonać naprawdę wiele ciekawych urządzeń. Na początek polecam podłączyć kilka diod LED i zapalać je w różnej kolejności. Możesz też podłączyć buzzer z generatorem i powydawać nieco głośnych dźwięków. To będą proste programiki, ale wiem, że mogą sprawić sporo radości, a przy okazji czegoś nauczyć.

Zapraszam do czytania następnych części i mam nadzieję, że znajdę trochę czasu i pojawią się one szybciej niż ta :). Żeby nie przegapić nowości, możecie skorzystać  z kanału RSS i powiadomień e-mail (szczegóły na panelu z prawej strony) lub Facebooka – box na górze strony głównej.

  • Pawel

    A co jeśli chcąc załadować nowy program wyskakuje mi komenda: “Port szeregowy ‘COM6′ jest obecnie w użyciu. Spróbuj zamknąć programy, które mogą go używać”… co mam zrobić, żeby wykasować ciągle aktywny program ?

  • Michał Żurawski

    Przełącz na inny wolny port.
    Mając otwarte Arduino IDE w górnym menu :
    Narzędzia ->Port szeregowy->
    tu powinny się wyświetlić więcej niż 1 port i wybierz inny niż COM6
    Powinno działać :-)

  • Dawid

    Witam,

    Pytanko odnośnie schematu: dlaczego rezystor podłączony jest pod minus (-), a nie pod plus (+)?
    Pozdrawiam,

  • Bartek

    nie ma to zadnego znaczenia w obwodach elektrycznych
    pozdrawiam

  • wqrw

    szeregowych