Kurs Intel Edison – #6 – programy w Arduino, LCD, czujniki

Kurs Intel Edison – #6 – programy w Arduino, LCD, czujniki

Tym razem zajmiemy się kontynuacją tematu programowania platformy Intel Edison z poziomu Arduino IDE. Ta szybka powtórka pozwoli nam od następnego odcinka zajmować się już znacznie ciekawszym tematem, czyli IoT.

Najpierw sprawdźmy jednak, jak szybko, dzięki Arduino można wykorzystać wyświetlacz LCD oraz różne czujniki (m.in. ciśnienia i temperatury).

Intel Edison - podłączenie wyświetlacza

Bardzo często wykorzystywanym przez hobbystów (i nie tylko) dodatkiem jest wyświetlacz LCD, który pozwala na łatwą komunikację z użytkownikiem budowanego urządzenia. W kursie Arduino Damian opisał, jak wykorzystać najzwyklejszy LCD tekstowy 2x16 znaków.

Przykład z kursu Arduino - wyświetlacz LCD.

Przykład z kursu Arduino - wyświetlacz LCD.

Teraz poznamy jak wykorzystać trochę inny LCD. W zestawie znajdziemy wyświetlacz 2x16 znaków z konwerterem I2C. Zastosowanie takiego dodatkowego sterownika pozwala na znaczną oszczędność pinów, ponieważ wyświetlacz możemy podłączyć przy użyciu 2 pinów, zamiast 7!

Zestaw elementów do kursu

 999+ pozytywnych opinii  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 »

Na płytce Arduino znajdziemy linie opisane jako SDA i SCL, to właśnie wyprowadzenia interfejsu I2C. Podłączenie wyświetlacza jest więc bardzo proste:

part4 - lcd_bb

Podłączenie wyświetlacza tekstowego do płytki Intel Edison.

Natomiast sam sterownik znajdujący się na spodzie wyświetlacza wygląda następująco:

Wyświetlacz tekstowy ze sterownikiem I2C.

Wyświetlacz tekstowy ze sterownikiem I2C.

Pora na uruchomienie całości. Najpierw tworzymy nowy szkic, następnie wybieramy opcję menu Szkic > Include Library > Manage Libraries. Dla Arduino dostępna jest imponująca liczba gotowych bibliotek. Nas interesuje jedna, konkretna - wyszukujemy LiquidCrystal_I2C i ją instalujemy:

lcd_01

Instalacja biblioteki odpowiedzialnej za obsługę wyświetlacza.

Zanim napiszemy własny program, możemy przetestować przykłady dla nowo zainstalowanej biblioteki. W menu Plik > Przykłady pojawiła się nowa opcja (na samym dole): LiquidCrystal_I2C. Jak łatwo się domyślić są tam przykłady do biblioteki wyświetlacza. Wybieramy któryś z nich, na przykład HelloWorld:

lcd_02

Pierwsze, testowe wykorzystanie LCD tekstowego z Edisonem.

Po jego uruchomieniu, na małym ekranie zobaczymy nieśmiertelny komunikat Hello world. Kod programu jest łatwy do prześledzenia, możemy z niego dowiedzieć się jak używać nowej biblioteki.

Sygnalizator zamkniętych drzwi

Teraz napiszemy własny program, który wykorzysta czujnik opisywany wcześniej i będzie sprawdzał, czy drzwi są poprawnie zamknięte. Zamiast sterowania buzzerem, jak w wcześniejszym przykładzie, wyświetlimy odpowiednie komunikaty na ekranie.

Jeśli odłączyliśmy czujnik otwarcia drzwi, musimy go ponownie podłączyć. Układ powinien być podłączony zgodnie z poniższym schematem montażowym:

part4 - lcd2_bb

Następnie możemy napisać i uruchomić program:

Jak widzimy, jest to połączenie programu napisanego poprzednio oraz przykładów dostarczonych wraz z biblioteką. Osoby chcące lepiej poznać możliwości biblioteki, zachęcamy do analizy jej kodu dostępnego poprzez github-a. Jest to jednak zadanie dla bardziej zaawansowanych czytelników!

Czujnik temperatury i wilgotności HDC1008

Tym razem zajmiemy się cyfrowym czujnikiem HDC1008. Ten jeden, mały układ pozwala na rozbudowę możliwości naszego systemu o pomiar temperatury oraz wilgotności. Czujnik HDC1008 do komunikacji wykorzystuje również interfejs I2C.

Moduł czujnika HDC1008. Źródło zdjęcia: strona producenta.

Moduł czujnika HDC1008. Źródło zdjęcia: strona producenta.

Dzięki temu schemat montażowy jest bardzo prosty, układ podłączamy podobnie jak poprzednio:

part4 - hdc_bb

Podłączenie układu HDC1008 do Intel Edisona.

Również w tym przypadku wykorzystamy gotową bibliotekę do obsługi modułu. Uruchamiamy menedżer bibliotek (menu Szkic > Include Library > Manage Libraries) i instalujemy pakiet hdc1008:

hdc_01

Instalacja biblioteki, do obsługi czujnika HDC1008.

Wraz z biblioteką otrzymaliśmy przykład jej użycia (tym razem tylko jeden). Przykład znajdziemy w menu: Plik > Przykłady > Adafruit HDC1000 library.

Program powinien działać bez problemu, wyniki wysyłane są przez port szeregowy (jak pamiętamy jest on dostępny w menu Narzędzia >Szeregowy monitor). Efekt działania programu:

hdc_02

Odczyt czujnika temperatury i ciśnienia, dzięki Intel Edison.

Jeśli czujnik nie działa...

Wykorzystywany czujnik może "nasłuchiwać" na różnych adresach. Wszystko zależy od firmy, która wyprodukowała dany moduł... Jeśli Twój czujnik nie działa, to spróbuj inne adresy. W tym celu wystarczy w powyższym demie zmienić linijkę:

Na:

W miejscu 0x41, możesz jeszcze wpisywać inne dostępne adresy, czyli 0x40, 0x42 oraz 0x43. Któryś z nich musi zadziałać

Prosta stacja pogodowa

Do interfejsu I2C można jednocześnie podłączyć zarówno wyświetlacz, jak i czujnik HDC1008. Wykorzystamy taką konfigurację do przygotowania prostej stacji pogodowej. Podłączamy układ zgodnie z rysunkiem:

part4 - hdc2_bb

Intel Edison - jednoczesne podłączenie czujnika i wyświetlacza.

Następnie uruchamiamy poniższy program:

Jak widzimy, raptem kilka linijek kodu pozwala na uzyskanie całkiem interesującego rezultatu. Wykorzystywanie gotowych bibliotek niewątpliwie bardzo ułatwia programowanie.

Klawiatura - wprowadzanie danych

Spróbujemy jeszcze podłączyć do naszego układu klawiaturę numeryczną. Za jej pomocą będziemy mogli w prosty sposób wprowadzać do układu liczby/komendy, które będą mogły zmieniać działanie układu.

Podłączenie klawiatury do modułu Intel Edison.

Podłączenie klawiatury do modułu Intel Edison.

Schemat podłączenia widoczny jest poniżej, tym razem potrzebujemy już więcej przewodów:

part4 - kbd_bb

Intel Edison - podłączenie klawiatury numerycznej.

Ponownie wykorzystamy gotową bibliotekę. Tym razem szukamy biblioteki Keypad:

key_01

Instalacja biblioteki KeyPad - obsługa klawiatury numerycznej.

Tak jak w poprzednio zaczniemy od wykorzystania przykładów. Program HelloKeypad będzie dobrym początkiem.

Wyprowadzenie z naszej klawiatury wyprowadzone są zgodnie z poniższym schematem. Jak widać odpowiednie poprowadzenie połączeń pozwala sprawdzać stany 12 przycisków za pomocą wyłącznie 7 linii!

Wyprowadzenia pinów klawiatury. Źródło: materiały producenta.

Wyprowadzenia pinów klawiatury. Źródło: materiały producenta.

Teraz musimy dostosować informacje na temat sposobu podłączenia klawiatury do naszego Edisona (patrz: wcześniejszy schemat montażowy). Chodzi o poniższy fragment:

Cały kod przykładowego programu ze zmianami wygląda następująco:

Jak widzimy, program wysyła kody naciskanych znaków przez łącze szeregowe:

key_02

Efekt działania programu testowego z klawiaturą.

Intel Edison - zamek elektroniczny

Na zakończenie tej części omówimy nieco dłuższy przykład. Załóżmy, że chcemy wykorzystać posiadane umiejętności oraz komponenty do zbudowania elektronicznego zamka do drzwi.

Oczywiście dodanie drzwi z zamkiem do naszych zestawów części byłoby, delikatnie mówiąc, trudne. Dlatego w tym ćwiczeniu zamknięcie będzie sygnalizowane stanem diody święcącej.

Jeśli uznasz, że chcesz zbudować prawdziwy zamek, to wystarczy dokupić do układu stosowny mechanizm zamka sterowanego elektromagnesem. W razie wątpliwości zachęcam do zadawania pytań w komentarzach

Wiemy już jakie komponenty ma mieć nasz projekt, czas je podłączyć:

part4 - doorlock_bb

Zamek elektroniczny sterowany przez Intel Edisona.

Wszystkie moduły są nam znane, używaliśmy je wcześniej w prostych programach. Teraz spróbujemy połączyć wszystko w całość. Najpierw musimy zdefiniować nasze tajne hasło - na początek zapiszemy je jako stałą w programie. Będziemy również potrzebowali ograniczenia na długość wprowadzanych danych.

Tworzymy więc pierwsze definicje:

Jak ustaliliśmy wcześniej, zamiast prawdziwego rygla podłączymy diodę LED. Podobnie jak wcześniej, zdefiniujemy stałą informującą, do którego pinu podłączony jest moduł:

Kody naciskanych przez użytkownika klawiszy będziemy przechowywać w tablicy, którą będziemy traktować jako napis. Zarezerwujemy więc miejsce na znak 0 kończący napisy w języku C.

Zaczniemy od napisania procedury pomocniczej, która będzie wypisywała wprowadzane dane na ekran. Oczywiście nie chcemy, żeby hasło było widoczne - więc dla bezpieczeństwa zamiast wprowadzanych znaków będziemy wyświetlać gwiazdki.

Przydatna będzie również procedura kasująca wprowadzone przez użytkownika hasło, tak aby mógł podać dane od początku:

Kolejna procedura pomocnicza posłuży nam do symulacji otwarcia drzwi. Będzie wywoływana po poprawnym podaniu hasła:

Teraz możemy napisać pętlę główną programu. Interesują nas trzy przypadki:

  • jeśli użytkownik naciśnie * będziemy kasować dane (aby mógł wprowadzić hasło jeszcze, raz od początku),
  • jeśli podane hasło jest poprawne, wywołamy funkcję open_door() w celu otwarcia drzwi,
  • w pozostałych przypadkach, po prostu dodajemy naciśnięty kod do tablicy pass. Jeśli bufor będzie pełny, będziemy odrzucać wprowadzane dane.

Kod, który realizuje powyższe działania, może wyglądać następująco:

Teraz już możemy już złożyć cały kod. Wygląda na długi i skomplikowany, ale wystarczy na spokojnie prześledzić wszystkie procedury, aby zrozumieć działanie układu.

Zadanie 6.1

W momencie otwarcia drzwi można wyłączyć elektromagnes odblokowujący rygiel zamka. Dodaj do układu czujnik otwarcia drzwi oraz zmień odpowiednio program.

Podsumowanie

Nauczyliśmy się już podstaw obsługi dołączonych do zestawu modułów. W kolejnych częściach kursu rozszerzymy nasze umiejętności o pracę przez sieć. Będziemy mogli tworzyć programy, z którymi możliwa będzie komunikacja przez przeglądarkę Internetową. Kolejnym etapem będzie wysyłanie zbieranych informacji do chmury.

Nawigacja kursu

Nie chcesz przeoczyć kolejnych części kursu? Skorzystaj z poniższego formularza i zapisz się na powiadomienia o nowych artykułach!

Autor kursu: Piotr (Elvis) Bugalski
Redakcja: Damian (Treker) Szymański

czujniki, Edison, HDC1008, Intel, kurs, kursEdison, lcd

Trwa ładowanie komentarzy...