Bądź: Wyszukaj na stronie z użyciem Google
reklama:

niedziela, 12 grudnia 2010

Budujemy robota Open Source. Część 2: Podstawy programowania mikrokontrolera

Autor: , 16:30, niedziela, 12 grudnia 2010


Najnowsza dostępna wersja Arduino Alpha (21)
Ostatnio przyjrzeliśmy się nieco stronie sprzętowej robota, teraz czas dowiedzieć się, jak możemy go czegoś nauczyć.

Niestety obecna elektronika choć momentami bardzo skomplikowana, jest jeszcze daleka od stworzenia mózgu na wzór tych biologicznych. Zamiast sieci neuronów mamy do dyspozycji tranzystory pod których bramkami możemy więzić elektrony. W ten sposób zapisujemy informacje, które są później przetwarzane przez inne układy, technicznie rzecz ujmując, również bazujące na tranzystorach.

Wspominam o tym na wstępie by zwrócić uwagę, jak cała elektronika którą mamy do dyspozycji bazuje na bardzo prostych elementach, które same z siebie nie potrafią się łączyć, jak to jest w przypadku komórek nerwowych. Braki sprzętowe musimy więc nadrabiać stosunkowo skomplikowanym kodem, który nada naszemu robotowi złudzenie inteligencji.

Sztuczna inteligencja?

Faktycznie jak wspomniałem w poprzedniej części jesteśmy ograniczeni długością kodu, więc do zastępczej "sztucznej inteligencji" sporo będzie brakowało. Są jednak sposoby na ominięcie tych przeszkód, o czym przeczytacie w kolejnych częściach.

Tymczasem proste roboty zwyczajnie interpretują zmieniające się informacje napływające z czujników we wskazany przez nas sposób. Przypuśćmy na przykład, że czujnik jasności zwraca wartości od 100 do 500, które następnie możemy z innym czujnikiem tego samego rodzaju. W tan sposób możemy łatwo określić z której strony urządzenia natężenie światła jest większe i stosując prostą konstrukcję "if" nakazać skręcić w jaśniejszy obszar. W podobny sposób obsługuje się większość czujników, nakazując wykonywać dane czynności zależnie od zwracanych przez nie informacji.

Oprogramowanie Arduino dla Linuksa, Mac OS i Windowsa

Dziś jednak nie będziemy się jeszcze tym zajmowali, a prześledzimy za to budowę prostych programów, które będzie wykorzystywał nasz robot. Środowisko Arduino wychodzi na przeciw prostym rozwiązaniom, więc głównym językiem jaki wypadałoby znać jest C/C++.

Arduino można zainstalować w Ubuntu z repozytorium, jednak jedynie w wersji 11.04 znajdziemy jego aktualne wydanie, które jest niezbędne by obsłużyć najnowsze płytki. W starszych wydaniach można się posłużyć edycją stworzoną w Javie, która działa także na Windowsie i Mac OS. Przed wysłaniem kodu do mikrrokontrolera należy się upewnić, że wybraliśmy do tego celu odpowiedni port (powinien zostać zidentyfikowany automatycznie) oraz aktualną wersję płytki z Arduino.

Warto też mieć na uwadze, że program jest we wczesnej wersji rozwojowej i błędy nie są w jego przypadku rzadkością. Zwykle jednak ponowne wykonanie danej czynności (kompilacji, czy wysyłania kodu) rozwiązuje problem.

Piszemy pierwszy program

Na początek posłużymy się prostym przykładem z Wikipedii. Na Arduino wbudowana jest dioda podłączona pod pin 13, zatem możemy stworzyć krótki kod, który sprawi, że całość będzie migała.

#define LED_PIN 13

void setup () {
pinMode (LED_PIN, OUTPUT); // ustawia pin 13 jako wyjście
}

void loop () {
digitalWrite (LED_PIN, HIGH); // włącza LED na pinie 13
delay (1000); // czeka 1000 milisekund (sekundę)
digitalWrite (LED_PIN, LOW); // wyłącza LED na pinie 13
delay (1000); // czeka 1000 milisekund (sekundę)
}

Dla osób znających C/C++ całość jest już praktycznie wyjaśniona, jednak jeszcze raz prześledźmy kod. Przede wszystkim należy zauważyć, że główna część programu jest nieskończoną pętlą, więc instrukcje znajdujące się w obszarze void loop () będą wykonywane cyklicznie aż do odłączenia zasilania.

Użycie #define, czyli zamiany w dalszym kodzie każdego wyrażenia LED_PIN na liczbę 13 nie było konieczne, jednak ułatwi dalszą interpretację. Idąc dalej, w sekcji void setup () musimy zawsze zdefiniować z których pinów korzystamy. Dopiero później możemy ich używać w programie, co również nie powinno szczególnie dziwić.

W sekcji, która jest nieskończoną pętlą korzystając z funkcji digitalWrite przypisujemy teraz pinowi 13 wartość wysoką, czyli przepływ prądu, co jest jednoznaczne z zasilaniem diody LED. Następnie odczekujemy 1000 milisekund w tym stanie, po czym zmieniamy stan pinu cyfrowego na niski, czyli brak przepływu prądu. Po tym również odczekujemy sekundę, a następnie sytuacja za sprawą nieskończonej pętli się powtarza.

Nasza płytka uruchomieniowa wykonała tym samym swój pierwszy program. W analogiczny sposób możemy zasilać także inne piny cyfrowe. W następnej części kursu poznamy tajniki odczytywania informacji z wejść analogowych.
blog comments powered by Disqus

Prześlij komentarz


Popularne posty

Etykiety