Kursy • Poradniki • Inspirujące DIY • Forum
Na początek zapoznamy się szybko z modułami dołączonymi do zestawu. Dlaczego szybko? Ponieważ głównym celem kursu jest przejście do tematów IoT, których nie poruszaliśmy jeszcze na Forbocie. Dlatego tutaj nie zajmiemy się dokładnym omawianiem składniki języka - nie było sensu pisać jeszcze raz tego samego, co jest bardzo dokładnie wytłumaczone w kursie Arduino.
Jeśli będziesz miał problem ze zrozumieniem tworzonych tutaj programów, to zajrzyj koniecznie do kursu Arduino. Zdecydowaną większość ćwiczeń tam opisanych możesz wykonać posiadając zestaw z tego kursu!
Następne lekcje, które zajmują się nowymi tematami (komunikacja z Internetem oraz chmurą) będą opisane znacznie dokładniej!
Gotowe zestawy do kursów Forbota
Komplet elementów Gwarancja pomocy Wysyłka w 24h
Elementy konieczne do wykonania ćwiczeń zebrane zostały w gotowe zestawy, które można nabyć w Botlandzie. W kuferku znajdziecie ponad 180 elementów w tym moduł Intel Edison!
Zamów w Botland.com.pl »Środowisko programistyczne Arduino IDE
Podczas instalacji oprogramowania dla płytki Intel Edison zainstalowaliśmy pakiet do obsługi Arduino. Teraz możemy uruchomić środowisko programistyczne (Arduino IDE):
Jak widać, na pierwszy rzut oka wygląda ono podobnie do oryginalnej wersji przeznaczonej dla mikrokontrolerów AVR. Różnicę zobaczymy dopiero rozwijając menu Narzędzia. W podmenu Płyta wybieramy ostatnią opcję: Intel Edison, której nie znajdziemy w oryginalnej wersji środowiska.
Warto również upewnić się, czy wybrany został odpowiedni port szeregowy do komunikacji. Jak pamiętamy, powinien on odpowiadać urządzeniu Intel Edison Virtual Com Port - do sprawdzenia w menedżerze urządzeń systemu Windows.
To już cała niezbędna konfiguracja, możemy przejść do uruchomienia pierwszego przykładu. Przetestujemy nieśmiertelny przykład migającej diody. Z menu plik wybieramy podmenu przykłady, a następnie "01. Basics" i klikamy na program "Blink". Otrzymamy bardzo prosty program przykładowy migający zieloną diodą wbudowaną w Arduino Kit.
Dwie ikonki widoczne w lewym górnym rogu Arduino IDE pozwalają na kompilację oraz wgrywanie programu. Nie pozostaje nam nic innego, jak sprawdzić czy program działa.
Oczywiście program powinien działać bez problemu. Sama praca z Edisonem przebiega podobnie jak z Arduino dla innych układów, różnicę możemy zobaczyć na obrazku powyżej - program jest krótki, ale zajmuje aż 76kB.
Jednak nie powinniśmy się tym przejmować,
maksymalny rozmiar programu, to aż 10MB.
Efekt działania programu w praktyce (migająca dioda):
Intel Edison - pierwszy własny program
Uruchomiliśmy już przykładowy program. Czas napisać własny, chociaż bardzo podobny. Tym razem podłączymy diodę na płytce stykowej według schematu:
Na początku musimy wybrać pin, którym będziemy sterować diodą - niech będzie to PIN nr 2 (można wybrać praktycznie dowolny). Czas napisać program sterujący podłączoną diodą:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const int LED_PIN = 2; void setup() { pinMode(LED_PIN, OUTPUT); // Ustaw pin nr 2 jako wejście } void loop() { // włącz diode digitalWrite(LED_PIN, HIGH); delay(500); // wyłącz diode digitalWrite(LED_PIN, LOW); delay(500); } |
Uruchamiamy program i możemy się cieszyć własną migającą diodą. Bardzo dokładny opis obsługi wejść oraz wyjść znajdziesz w 2 części kursu Arduino. Jeśli nie wiesz jak poprawnie podłączyć diodę świecącą (LED) i chcesz wrócić do podstaw, to sprawdź 6 część kursu elektroniki.
Zadanie domowe 5.1
Podłącz 3 różnokolorowe diody i napisz program, który będzie świecił kolejno każdą z nich (od lewej do prawej).
Intel Edison - linie wejściowe
Poprzednio linie Edisona pracowały jako wyjścia (output). Teraz spróbujemy odczytać informację o otaczającym nas świecie. Napiszemy program, który będzie sprawdzał stan czujnika zamknięcia drzwi. Gdy wykryje, że drzwi są otwarte, uruchomi alarm, czyli brzęczyk.
- Buzzer (brzęczyk)
- Czujnik otwarcia drzwi.
Podłączamy układ zgodnie z rysunkiem:
Jak działa czujnik otwarcia okien/drzwi oraz brzęczyk?
Sprawdź » Kurs elektroniki II – #3 – przyciski, diody RGB, kontaktron, buzzer
Następnie piszemy program, który będzie wykrywał otwarcie drzwi. Tym razem używamy dwóch pinów, definiujemy więc odpowiednie stałe:
1 2 |
const int ALARM_PIN = 3; const int DOOR_PIN = 12; |
Linia alarmowa jest wyjściem, działa więc tak jak w poprzednim przykładzie. Czujnik drzwi natomiast jest wejściem. Zamknięte drzwi zwierają kontakton, czyli wejście PIN12 do masy.
Aby skonfigurować oba piny piszemy procedurę:
1 2 3 4 |
void setup() { pinMode(ALARM_PIN, OUTPUT); // konfiguracja jako wyjście pinMode(DOOR_PIN, INPUT_PULLUP); // konfiguracja jako wejście } |
Pozostaje napisać program główny. Będziemy w nim sprawdzać stan czujnika otwarcia drzwi i uruchamiać alarm w odpowiednim momencie. Najpierw sprawdzamy, czy drzwi są otwarte:
1 2 |
// sprawdz, czy drzwi sa otwarte if (digitalRead(DOOR_PIN)) { |
Zamknięte drzwi oznaczają zwarcie PIN12 do masy, funkcja digitalRead() zwraca wówczas wartość 0. Po otwarciu drzwi, PIN12 nie będzie już zwierany do masy, a rezystor podciągający (pullup) zmieni stan wejścia na 1. Będziemy wtedy uruchamiać alarm:
1 2 |
// jesli tak, uruchom alarm digitalWrite(ALARM_PIN, LOW); |
Moduł buzzera, który otrzymaliśmy w zestawie działa w "odwrotnej logice". Stan niski uruchamia buzzer, a wysoki wyłącza. Wynika to ze schematu modułu, który zawiera tranzystor odwracający działanie układu. Jeśli drzwi są zamknięte musimy czujnik wyłączyć poprzez ustawienie stanu wysokiego na wyjściu:
1 |
digitalWrite(ALARM_PIN, HIGH); |
Jak dokładnie działają warunki (if)?
Sprawdź w 2 części kursu Arduino!
Programując na AVR byłby to już właściwie kompletny program. Jednak ponieważ Intel Edison pracuje w oparciu o prawdziwy system operacyjny, warto pamiętać o jeszcze jednej rzeczy.
Oprócz naszego programu na płytce działa jeszcze wiele innych. Powinniśmy więc dać im możliwość działania, zamiast zajmować 100% czasu procesora na sprawdzanie stanu linii. Otwieranie drzwi zajmuje trochę czasu (a dla procesora, to całe wieki), więc wystarczy, że będziemy sprawdzać stan czujnika co pewien czas, powiedzmy co 100 ms.
Dodajemy na końcu pętli głównej małe opóźnienie - nie zmieni ono działania naszego programu, ale pozwoli na sprawniejsze działanie pozostałych programów oraz zaoszczędzi sporo prądu.
Cały program do tego mini alarmu wygląda następująco:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
const int ALARM_PIN = 3; const int DOOR_PIN = 12; void setup() { pinMode(ALARM_PIN, OUTPUT); pinMode(DOOR_PIN, INPUT_PULLUP); } void loop() { // sprawdz, czy drzwi sa otwarte if (digitalRead(DOOR_PIN)) { // jesli tak, uruchom alarm digitalWrite(ALARM_PIN, LOW); } else { // jesli nie, wyłącz alarm digitalWrite(ALARM_PIN, HIGH); } delay(100); } |
Jeśli buzzer piszczy bardzo cicho nie musi to oznaczać, że jest uszkodzony. Znajduje się na nim naklejka zabezpieczająca - po jej usunięciu powinien piszczeć znacznie głośniej.
W praktyce czujniki użyty w tym przykładzie można zamontować na drzwiach lub oknie, np.:
Zadanie domowe 5.2
W zestawie elementów znajduje się czujnik ruchu typu PIR. Posiada on cyfrowe wyjście, działa więc podobnie jak czujnik otwarcia drzwi omówiony powyżej. Napisz program, który będzie sygnalizował alarmem wykrycie ruchu. Jeśli nie jesteś pewien, jak podłączyć czujnik do Edisona, to zapytaj w komentarzu!
Intel Edison - wejście analogowe
Poprzednio poznaliśmy wyjścia i wejścia cyfrowe, jednak wiele czujników daje możliwość nie tylko wykrycia obecności sygnału, ale również pomiar pewnej wielkości fizycznej np. temperatury.
W zestawie znajdziemy dwa fotorezystory, które możemy wykorzystać do pomiaru poziomu oświetlenia. Taki układ czujników jest bardzo popularny w prostych robotach typu światłolub (jeżdżącego za najsilniejszym źródłem światła), ale może być wykorzystany na wiele innych sposobów, chociażby do wykrywania zapalenia światła w pomieszczeniu.
Na początek podłączymy jeden czujnik zgodnie z rysunkiem:
Teraz będziemy chcieli mierzyć poziom sygnału i przesyłać do komputera poprzez złącze szeregowe (właściwie to przez USB, które działa jako wirtualny port COM).
Tym razem nie musimy konfigurować wyprowadzeń układu, wystarczy uruchomić komunikację przez port szeregowy:
1 2 3 |
void setup() { Serial.begin(9600); } |
W programie głównym, będziemy odczytywać wynik pomiaru z czujnika:
1 |
int val = analogRead(A0); |
A następnie przesyłać rezultat do komputera:
1 2 |
Serial.print("adc = " ); Serial.println(val); |
Instrukcja print wysyła wartość otrzymaną jako parametr (napis "adc = "). Natomiast println, wysyła zaraz po niej liczbę (val) oraz znak końca linii (stąd ln w nazwie).
Kompletny program:
1 2 3 4 5 6 7 8 9 10 11 12 |
void setup() { Serial.begin(9600); } void loop() { int val = analogRead(A0); Serial.print("adc = " ); Serial.println(val); delay(100); } |
Po uruchomieniu z menu narzędzia wybieramy opcję "Szeregowy monitor":
To co widzimy to wartości odczytane z przetwornika analogowo-cyfrowego. Spróbujmy zmienić oświetlenie czujnika, zasłaniając go lub zbliżając do źródła światła. Wyniki ulegną wtedy zmianie, proporcjonalnie do poziomu oświetlenia.
Za pomocą takiego czujnika moglibyśmy badać nasłonecznienie, sprawdzać, czy nie zostawiliśmy zapalonego światła w mieszkaniu, albo zbudować robota-światłoluba. Napisany przez nas program jest pierwszym, ale bardzo ważnym etapem podczas tworzenia takiego projektu.
Pozwala na sprawdzenie poprawności działania czujnika oraz zapoznanie się z jego charakterystyką. Oczywiście ostateczny program powinien wykorzystywać otrzymane dane, a nie tylko wysyłać wyniki przez złącze szeregowe. Jednak odczytanie wartości jest bardzo dobrym ćwiczeniem, pozwala zapoznać się z działaniem czujnika oraz pokazuje nam pierwszą możliwość komunikacji płytki Edison z komputerem - poprzez złącze szeregowe.
Zadanie domowe 5.4
Podłącz buzzer jak w poprzednim przykładzie i napisz program, który będzie alarmował w momencie zapalenia światła. Aby ustalić próg zadziałania alarmu, możesz wykorzystać dane odebrane przez port szeregowy.
Podsumowanie
Ta część kursu programowania Intel Edisona jest swego rodzaju rozgrzewką przed zdecydowanie bardziej zaawansowanymi projektami. Zanim przejdziesz dalej upewnij się, że pisanie programów podobnych do omówionych tutaj nie stanowi dla Ciebie żadnego problemu.
W każdej chwili możesz wspomóc się naszym, opublikowanym już w całości, kursem Arduino oraz kursem zupełnych podstaw elektroniki. W kolejnym artykule omawiającym platformę Intel Edison zajmiemy się wyświetlaczem, klawiaturą numeryczną oraz czujnikiem temperatury. Dzięki temu będziemy mogli zbudować prosty symulator zamka elektronicznego!
Nawigacja kursu
Jeśli nie chcesz przeoczyć kolejnego odcinka, to skorzystaj z poniższego formularza i zapisz się na powiadomienia o nowych publikacjach!
Autor kursu: Piotr (Elvis) Bugalski
Redakcja: Damian (Treker) Szymański
Powiązane wpisy
arduino, Edison, Intel, kursEdison
Trwa ładowanie komentarzy...