W poprzednim rozdziale opisałem jak zacząć z Arduino, przygotować płytkę prototypową, zmontowaćpierwszy układ ze świecącą diodą LED. Nie ma jednak żadnej filozofii podpiąć coś do zasilania i patrzeć jak świeci. Uzywamy Arduino aby wprowadzić nieco logiki w układ i nim sterować w reakcji na zdarzenia.
Podłączamy
Opisuję tutaj podstawy więc nie będziemy szaleć. Proponuję włączanie i wyłączanie diody w równych odstępach czasu. Do zmontowania uzyjemy poprzednio omówionych komponentów: Arduino, diodę, rezystor, kabelki i płytkę prototypową. Sposób podłączenia może być tak jak poniżej.
Pierwszy sketch/szkic
Oprócz hardware’u potrzebujemy software. Gdy mamy uruchomione środowisko Arduino IDE i załadowany pierwszy szkic możemy go podmienić kodem poniżej.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Pin 13 digital i/o ma podlaczony LED int led = 13; // inicjacja parametrow początkowych gdy wcisniesz reset lub zasilisz arduino: void setup() { // inicjalizacja cyfrowego pinu jako wyjście (OUTPUT) pinMode(led, OUTPUT); } // pętla główna programu wykonywana w nieskończoność: void loop() { digitalWrite(led, HIGH); // włącz LED na sygnał (HIGH stan wysoki napięcia) delay(1000); // czekaj sekundę digitalWrite(led, LOW); // wyłącz LED przez ustawienie stanu niskiego napięcia LOW delay(1000); // czekaj sekundę } |
setup() – funkcja setup() jest automatycznie wykonywana na początku programu Arduino. W tej funkcji inicjujemy zmienne, piny oraz inne biblioteki, które mogą być pomocne w naszym szkicu. Funkcja setup() jest uruchamiana tylko raz gdy płytka dostanie zasilanie lub naciśniemy przycisk reset.
loop() – funkcja loop() odpowiada za ciągłe wykonywanie twojego właściwego programu. Jest wykonywana po zakończonej funkcji setup(). Arduino wykonuje komendy wewnątrz pętli w nieskończoność dopóki płytka jest zasilana.
Tuaj przydatna może być oryginalna dokumentacja Arduino reference page.
Migająca dioda
W tym przykładzie opiszę za co odpowiedzialne są pozostałe funkcje.
pinMode(pinNumber, tryb) – pinMode jest ustawiany w trakcie wywołania części setup() aby zainicjalizować pin do użycia jako wejście lub wyjście. Robimy to jednorazowo wskazując numer pinu (te poprzedzone literą D) oraz tryb pracy (albo”INPUT” albo “OUTPUT”). Jeśli wskażemy,ze pin będzie działał jako wejście nie da się tego zmienić w trakcie działania programu. W naszym przypadku wysyłamy dane do pinu aby sterować stanem napięcia i zarazem diodą LED, więc ustawiamy jako OUTPUT.
digitalWrite(pinNumber, stan) – digitalWrite jest komendą, która umożliwia ustawienie napięcia 5V lub ground. Funkcja przyjmuje 2 argumenty: numer pinu oraz stan (LOW lub HIGH). Będziemy ustawiać na przemiennie w rezultacie podając napięcie 5V lub ustawiając 0V.
delay(timeInMs) – delay wstrzymuje program na zadany czas wyrażony w milisekundach. Na przykład delay(2000) zatrzyma program na 2s , delay(100) zatrzyma program 100 millisekund (1/10 sekundy), itd.
Po wgraniu programu na płytkę nasza dioda powinan zacząć migać.
Komunikaty portu szeregowego
dioda ładnie miga, ale co jeśli zczytywalibyśmy jakiś sygnał lub chcielibyśmy poinformować inny moduł używając połączenia szeregowego. Nie będziemy się tu rozwodzić na temat komunikacji. Postaram się to opisać przy okazji komunikacji Arduino-ESP8266. Zacznijmy od definicji.
Serial Communication – komunikacja szeregowa (Serial) pozwala Arduino przesłać komunikat do komputera podczas pracy programu. Jest to bardzo użyteczne podczas debugowania, gdy chcemy mieć pewność że nasze zmienne przyjmują odpowiednią wartość lub są odpowiednio inkrementowany w pętlach i warunkach. Aby włączyć komunikację szeregową w naszym szkicu należy ją zainicjalizować w sekcji setup() komendą Seial.begin(). Przyjmuje ona jeden argument. Szybkość transmisji (baud rate) domyślnie 9600 powinno być OK. Kolejną komendą jest Serial. println() do wysłania komunikatu w Arduino IDE (Tools>>Serial Monitor lub Narzędzia>>Szeregowy Monitor).
Poniżej kod po tych modyfikacjach
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Pin 13 digital i/o ma podlaczony LED int led = 13; // inicjacja parametrow początkowych gdy wcisniesz reset lub zasilisz arduino: void setup() { // inicjalizacja cyfrowego pinu jako wyjście (OUTPUT) pinMode(led, OUTPUT); Serial.begin(9600); //inicjalizacja połączenia Serial } // pętla główna programu wykonywana w nieskończoność: void loop() { digitalWrite(led, HIGH); // włącz LED na sygnał (HIGH stan wysoki napięcia) Serial.println("dioda ON"); // prześlij komunikat na Serial delay(1000); // czekaj sekundę digitalWrite(led, LOW); // wyłącz LED przez ustawienie stanu niskiego napięcia LOW Serial.println("dioda OFF"); // prześlij komunikat na Serial delay(1000); // czekaj sekundę } |
Pojawiły się 3 dodatkowe linie kodu. Po uruchomieniu programu raz jeszcze i wybraniu opcji Szeregowy Monitor w Arduino IDE powinno nam się pokazać coś takiego:
1 2 3 4 5 6 7 |
dioda ON dioda OFF dioda ON dioda OFF dioda ON dioda OFF ... |
Inne pomysły z Arduino
Umiemy sterować diodą. Widzimy co się dzieje w kodzie. A co jeśli chcemy podłączyć żarówkę albo sterować gniazdkiem? Zamiast diody musielibyśmy podłączyć przekaźnik zamiast diody. Urządzenie to z jednej strony ma 3 piny. Dwa z nich to zasilanie 5V i GND a środkowy IN1 to sterowanie. W momencie podania napięcia z naszego pinu Digital (sygnał HIGH) przekaźnik zamknie się. Po prawej stronie sa zaciski przykręcane na śruby do których wpinamy się w obwód zasilania żarówki (220V).
Obwód wyglądałby mniej więcej tak:
Na tym kończę wprowadzenie. Następne artykuły poświęcę dalszym wdrożeniom aby w efekcie uzyskać wiedzę do zbudowania podobnego systemu – namiastki inteligentnego domu.