Uspołeczniamy Arduino, czyli o czujnikach i komunikacji słów kilka.

21 października 2018

Gdy wiemy już jak zasilić diody, oraz jak napisać program który będzie reagował na stan przycisków, warto teraz zainteresować się czujnikami. Dzięki wiedzy z tego artykułu będziemy w stanie podłączyć podstawowe sensory do Arduino, a wyniki wyświetlać na bieżąco na naszym monitorze.

Czym są czujniki?

Czujniki są to komponenty elektroniczne, które pozwalają na pobieranie danych z otoczenia. Temat sensorów jest na tyle ciekawy i rozległy, że bez problemu moglibyśmy napisać o nich sporych rozmiarów książkę. Rynek przepełniony jest różnego rodzaju modułami, dzięki którym możemy zbierać dane na wiele czynników, zaczynając od temperatury i wilgotności powietrza, przez rozpoznawanie gestów dłoni, na analizowaniu aktywności mięśni kończąc. Czujniki które podłączamy do Arduino zazwyczaj mają stworzone przez producentów biblioteki, które ułatwiają korzystanie z nich (jak wgrywać biblioteki do IDE dowiemy się później). Sensory które podłączamy do Arduino najczęściej komunikują się z płytką poprzez piny analogowe oraz interfejsy takie jak OneWire, I2C oraz SPI.

Działanie pinów analogowych oraz podłączenie fotorezystora.

Piny analogowe oznaczone są na płytce jako A0-A5, służą one do pomiaru napięć na wejściu analogowym. Pozwalają one na mierzenie napięć z zakresu od 0V do 5V oraz posiadają rozdzielczość dziesięciu bitów, dzięki czemu odczytujemy aż 1024 poziomy napięć, co daje nam dokładność do 0.005V. Podczas odczytu na zakresie 0V-5V 0V to poziom 0, a wartość 5V to zakres pełen, czyli 1023, analogicznie 2.5V to poziom 512.

Fotorezystor jest jednym z najprostszych czujników, wykorzystuje zjawisko fotoelektryczne. W zależności od natężenia światła fotorezystor zmienia swoją oporność, im słabsze światło, tym większa jest oporność fotorezystora. Czujniki te często możemy spotkać w naszym otoczeniu, na przykład w lampach ogrodowych.

Aby wygodnie odczytać natężenie światła wyniki wyświetlimy w monitorze portu szeregowego, ale co to tak właściwie jest? Jest to monitor w którym możemy wyświetlać dane wysyłane przez Arduino, poprzez wbudowany w płytkę interfejs UART. Serial Port możemy też wykorzystać do przesyłania danych bezpośrednio do płytki, a ona może reagować na polecenia z monitora portu szeregowego. Może wydawać się skomplikowane, ale jest niezwykle proste, jak i przyjemne, ponieważ aby wyświetlać wyniki na wyświetlaczu możemy robić to na ekranie naszego komputera.

Kod który wgramy powinien wyglądać tak:

Pojawiło się kilka nowych poleceń, więc warto je omówić. Zaczniemy od “Serial.begin(9600);”, jest to polecenie które wraz z włączeniem płytki uruchamia komunikację z monitorem portu szeregowego, w tym wypadku Arduino będzie przystosowane do wymiany danych z prędkością 9600 bodów, czyli 9600 bitów na sekundę. Jeśli potrzebujemy zastosować wyższą prędkość transmisji, to nic nie stoi na przeszkodzie, aby zmienić wartość tego parametru, ale tutaj skorzystaliśmy z prędkości domyślnej, więc nie będziemy musieli nic korygować w Arduino IDE. Następnym poleceniem dotyczącym Serial Portu jest “Serial.println();”, komenda wyświetla dane w monitorze portu szeregowego linia po linii. Możemy również skorzystać z polecenia “Serial.print();”, ale dane będą wyświetlane obok siebie tworząc nieczytelny ciąg cyfr.

Kolejnym nowym poleceniem jest “int swiatlo = analogRead(A0);”, polecenie int tworzy zmienną w której zapisywane są liczby całkowite, tutaj służy do przypisania wartości z pinu analogowego A0. Zmienne możemy tworzyć w sekcji “void setup()” lub “void loop()”, wtedy zmienna będzie działała tylko w danej sekcji, aby zmienna odwoływała się do całego programu musimy stworzyć ją przed sekcją “void setup()”. Jeśli chcemy stworzyć zmienną musimy skorzystać z takiej formy polecenia “int nazwa”, lub “int nazwa = wartość”, w pierwszym przypadku tworzymy zmienną do której z góry nie jest nic przypisane,a w drugim przypadku od razu przypisujemy daną wartość dla tej zmiennej. W miejsce “nazwa” wpisujemy nazwę zmiennej, oczywiście bez spacji, a w miejsce “wartość” wartość do której się odwołujemy, w naszym przypadku jest to wynik z pinu A0. Warto pamiętać, że tutaj stosujemy jeden znak równości, a nie dwa tak jak miało to miejsce w przypadku porównywania wartości w instrukcji warunkowej “if”

Jeżeli wiemy już co znaczą wszystkie linijki kodu możemy przejść do budowy układu, który jest bardzo prosty, ponieważ polega tylko na podłączeniu jednej nóżki fotorezystora do złącza 5V, a drugą do pinu A0. Po podłączeniu Arduino wgrywamy nasz program, i wchodzimy do Narzędzia>Monitor Portu Szeregowego, po chwili powinny ukazać nam się wyniki pomiaru światła, a na płytce co sekundę powinna migać dioda oznaczona jako TX. Układ powinien wyglądać w ten sposób:

Działanie interfejsu OneWire i podłączenie czujnika temperatury i wilgotności powietrza DHT11.

Kiedy potrafimy obsłużyć czujniki analogowe, warto uruchomić sensory cyfrowe. Pierwszym z nich będzie czujnik DHT11, służy on do pomiaru temperatury i wilgotności powietrza. Czujnik działa na magistrali OneWire, czyli aby go obsłużyć potrzebujemy tylko jednego pinu do transmisji danych, oczywiście musimy jeszcze go zasilić, więc łącznie użyjemy trzech przewodów.

OneWire, jest to interfejs który w Arduino posłuży nam najczęściej do łatwej komunikacji płytki z różnego rodzaju czujnikami. Dzięki specjalnej identyfikacji czujników obsługujących ten standard możemy do jednej linii danych podłączyć wiele urządzeń, a maksymalna długość przewodu dla tego interfejsu to aż 100 metrów.

Aby uruchomić czujnik DHT11 niezbędna będzie nam biblioteka, może teraz pojawić się pytanie, czym w ogóle jest ta biblioteka. Biblioteka jest to zestaw plików które ułatwiają nam korzystanie z danych urządzeń w środowisku Arduino. Zestawy te są ogromnym ułatwieniem, ponieważ nie musimy sami tworzyć plików konfiguracyjnych dla danych urządzeń, a po prostu wgrywamy je do środowiska i posługujemy się tylko kilkoma kilkoma dodatkowymi komendami stworzonymi dla danej biblioteki. Aby zainstalować bibliotekę w IDE wystarczy tylko kilka chwil. Aby zaimportować zestaw plików musimy pobrać bibliotekę w formacie zip, a następnie w IDE wybieramy Szkic > Dołącz bibliotekę > Dodaj bibliotekę .ZIP, dalej zostało nam tylko podanie lokalizacji naszej paczki i gotowe. Gdy chcemy dodać bibliotekę do naszego programu wybieramy Szkic > Dołącz bibliotekę i wybieramy z listy pakiet który nas interesuje. Do uruchomienia DHT11 potrzebujemy biblioteki która znajduje się pod tym adresem:

https://bit.ly/2wkBpvV

Jeśli mamy zaimplementowaną bibliotekę możemy przejść do napisania programu który w Serial Monitorze wyświetli nam dane z czujnika, program będzie wyglądał tak:

Teraz po kolei, pojawiło się kilka nowych poleceń, ale większość z nich jest przypisana bezpośrednio do biblioteki. Zacznijmy od “#include” jest to polecenie które dodaje bibliotekę do naszego projektu, z angielskiego include to “zawierać”, tak więc po dodaniu tej linijki nasz program będzie obsługiwał funkcje zawarte w tej bibliotece. Dodanie tego polecenia jest niezwykle ważne, ponieważ bez niego nie zadziała program jak i czujnik. Następna linijka zawiera “#define”, jest to instrukcja która definiuje podany pin dla podanej wartości, dzięki temu rozwiązaniu w razie chęci zmiany pinu do którego podłączony jest czujnik nie musimy zmieniać wartości kilka razy, a tylko raz. Kolejnym poleceniem jest “dht.setup”, tutaj tylko ustawiamy pin do którego podpięty jest czujnik. Ostatnimi nowymi poleceniami są “dht.getHumidity()” oraz “dht.getTemperature()”,służą one do pobierania danych z czujnika. Warto pamiętać o tym, że aby wyświetlić tekst w Monitorze Portu szeregowego należy wpisać go w cudzysłowie

Podłączenie czujnika do Arduino jest bardzo proste, mając go “kratką” do przodu pierwszy pin to 5V, drugi to złącze danych, w naszym wypadku podłączony do pinu 10, ostatni to GND. Dla prawidłowej pracy czujnika musimy do pinu danych podłączyć rezystor 4,7KOhm który z drugiej strony podłączony będzie do zasilania. Cały układ powinien wyglądać w ten sposób:

A tak powinny wyglądać wyniki w Serial Porcie:

Jeśli wszystko jest dobrze podłączone, a program wgrany na płytkę powinniśmy w Serial Porcie ujrzeć wyniki pomiarów naszego czujnika. Linijki w których wartości wynoszą 0 są linijkami błędnymi, które wynikają ze zbyt szybkiego pobierania danych z czujnika. Chcąc zniwelować błąd wystarczy zwiększyć czas podany w “delay” na chociażby 5 sekund.  Aby całość wyglądała jeszcze lepiej dane powinny się wyświetlać na zewnętrznym wyświetlaczu,  ale tym zajmiemy się w następnym artykule!

Produkty użyte w poradniku:

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *