Związek na odległość, czyli komunikacja bezprzewodowa w Arduino

2020-01-07
Związek na odległość, czyli komunikacja bezprzewodowa w Arduino

Związek na odległość, czyli komunikacja bezprzewodowa w Arduino — czym tak naprawdę jest? Często połączenie przewodowe stwarza dosyć spore ograniczenia. Budując stację pogodową, której czujniki oddalone są o kilka metrów, nie chcemy ciągnąć okablowania, tylko zbudować dwie niezależne stacje, które będą wymieniały się danymi bezprzewodowo i to właśnie tymi kwestiami się dzisiaj zajmiemy.

Podczerwień, światło, które zrewolucjonizowało świat komunikacji bezprzewodowej.

Na co dzień korzystamy ze światła podczerwonego, diody IR umieszczone są w pilotach od sprzętu domowego, a kiedyś były wysokiej klasy nadajnikami w telefonach komórkowych. Światło podczerwone jest promieniowaniem elektromagnetycznym, którego długość fali mieści się pomiędzy światłem widzialnym a falami radiowymi. Komunikacja falami podczerwonymi jest jedną z łatwiejszych i tańszych, jeśli chodzi o zastosowanie w projektach Arduino. Do stworzenia działającego układu wystarczy nam pilot, który wykorzystuje promieniowanie IR, prosty odbiornik, kilka przewodów i Arduino. Na początku warto powiedzieć o wadach tej komunikacji, jest ich kilka i warto je uwzględnić podczas planowania projektu. Światło podczerwone nie „przebija się” przez ściany, więc nadajnik i odbiornik muszą znajdować się w jednym pomieszczeniu, w którym sygnał nie będzie odbijał się od przeszkód. Kolejną ważną kwestią jest fakt, że komunikacja wykorzystująca promieniowanie IR najlepiej działa przy minimalnym wpływie innych fal świetlnych, najprawdopodobniej urządzenia, które będą komunikować się w pełnym słońcu, zwyczajnie nie za działają, ponieważ fale światła słonecznego będą rozpraszać fale IR. Ostatnią ważną wadą jest odległość nadajnika od odbiornika, tutaj sporo zależy od samej diody nadawczej, urządzenia takie jak piloty od telewizorów potrafią nadawać sygnał do pięciu metrów. Jeśli znamy już podstawy funkcjonowania podczerwieni, możemy przejść do zastosowania jej w projektach opierających się o Arduino. Aby czujnik bez problemu komunikował się z płytką, warto zainstalować bibliotekę IRremote. Paczka dostępna jest pod tym linkiem https://bit.ly/2JTFxZo, warto pobrać najnowszą wersję. Będziemy korzystać z odbiornika VS1838B, jest to popularny i łatwy w obsłudze układ, kompatybilny z większością obecnych na rynku nadajników. Oprócz odbiornika przyda nam się płytka stykowa, kilka przewodów, Arduino oraz nadajnik, może być to pilot od telewizora. Układ powinien wyglądać tak:

Jako ciekawostkę dodam, że większość odbiorników podczerwieni ma taki sam pinout, więc w razie awarii modułu łatwo będzie go zamienić. Po zmontowaniu układu przejdźmy do programu, bazuje on na przykładzie dodanym do biblioteki, z tym że dodaliśmy informacje w języku polskim oraz ustawiliśmy pin na 2. Program wygląda w ten sposób, lepiej przepisać go do środowiska, niż wgrać gotowy program.

Gdy wgramy program do naszego Arduino, włączmy monitor portu szeregowego, a następnie skierujmy nasz nadajnik na odbiornik i naciśnijmy jeden przycisk. W monitorze powinien pokazać nam się unikatowy kod przycisku dla naszego nadajnika. Ciąg znaków może wydawać się dziwny, ponieważ zamiast nazwy przycisku pokazał nam się jego kod w systemie szesnastkowym, jest to całkowicie normalne. W moim wypadku po wciśnięciu przycisku „1” serial monitor wygląda w ten sposób.

E13DDA28, to numer dla przycisku „1”, jeśli mamy zamiar wykorzystać więcej niż jeden przycisk, warto każdy wybrać i zapisać jego identyfikator. Gdy wiemy już jak odczytać sygnał danego przycisku, możemy przejść do stworzenia układu, który po wciśnięciu danego przycisku załączy element zewnętrzny, my dla zobrazowania całości podłączymy do płytki diodę LED. Jeśli chodzi o kwestie programowe, to jedyną nowością dla nas jest porównanie kodu danego przycisku do kodu, który wysyłany jest aktualnie do czujnika. Program powinien wyglądać tak:

Komunikacja radiowa, czyli przesyłamy dane, tam, gdzie podczerwień nie dosięga.

Z komunikacji radiowej podobnie jak z fal podczerwonych korzystamy na co dzień, nie tylko, gdy chcemy posłuchać muzyki w samochodzie, ale także do bezprzewodowego otwierania bramy garażowej. Korzystanie z fal radiowych jest o tyle wygodne, że w dużo mniejszym stopniu niż w podczerwieni ograniczają nas przeszkody. Transmisja danych może też odbywać się na dużo dłuższe dystanse, niektóre z modułów mogą przesyłać dane do 2 km! Takie odległości są praktycznie nieosiągalne dla podczerwieni. Na nasze potrzeby użyjemy układów NRF24L01, są to dosyć tanie układy, które łatwo jest wysterować, komunikują się z  płytką za pomocą magistrali SPI. Co ciekawe w otwartym terenie moduły mogą komunikować się ze sobą, na odległość nawet 100 metrów, a w jednym miejscu możemy stworzyć do 125 osobnych sieci!

Naszą przygodę z modułami radiowymi zaczniemy od podłączenia ich do płytki Arduino, a właściwie do dwóch płytek. Ja skorzystam z dwóch płytek Arduino Uno, ale nic nie stoi na przeszkodzie, aby korzystać z płytek Pro Mini. Przez to, że moduły mają taki, a nie inny rozstaw pinów nie możemy korzystać z płytki stykowej. Tutaj przydadzą nam się przewody męsko-żeńskie. Urządzenie pracuje na logice 3.3 V, więc nie podłączamy pinu zasilania modułu do złącza 5 V Arduino, tylko 3.3 V. Połączenie z płytką powinno wyglądać tak.

Aby moduły prawidłowo współpracowały ze środowiskiem Arduino, warto pobrać bibliotekę, nazywa się RF24 i jest to pakiet plików specjalnie dla tych modułów i można pobrać ją pod tym linkiem https://bit.ly/2Okkp47. Gdy zaimplementowaliśmy już bibliotekę, możemy na obie płytki wgrać przykład pinkpair. Po wgraniu programów musimy wybrać która płytka jest nadajnikiem, a która odbiornikiem. Jeśli chodzi o wybór, jest tutaj całkowita dowolność. W płytce, która będzie nadajnikiem, musimy połączyć 7 pin z masą. Teraz musimy otworzyć monitor portu szeregowego dla płytki, która jest odbiornikiem, gdy to zrobimy, warto wcisnąć przycisk RESET na naszych płytkach. Gdy w Serial Monitorze pojawią nam się dane z nadajnika, znaczy to, że wszystko działa prawidłowo. Gdy sprawdziliśmy sprawność modułów, możemy przejść do praktycznego zastosowania, zbudujemy układ, za pomocą którego będziemy mogli sterować innym urządzeniem z odległości. W aktualnych połączeniach nie musimy za dużo zmieniać, jedynie do płytki, która będzie odbiornikiem podłączyć diodę LED do pinu 5, koniecznie przez rezystor 220 OHM, lub podobny. Do drugiej płytki musimy podłączyć przycisk, pod pin 7. Program, który będzie obsługiwać płytkę nadajnika, wygląda tak:

Jeśli chodzi o nowe polecenia, to jest ich kilka, ale wszystkie są z zakresu używanej przez nas biblioteki. Praktycznie każda nowa komenda została omówiona w komentarzu. Jedyna rzecz, na którą musimy zwracać uwagę, to fakt, że korzystając z tych modułów najlepiej każdą wartość przesyłać osobno, czyli obsługując kilka przycisków tworzyć osobne „radio.write();”. Kolejną kwestią, na którą warto zwrócić uwagę, jest definiowanie pinów CS i CNS, o ile sami piszemy programy, nie robi nam to zbyt dużej różnicy, bo połączenie zdefiniujemy sami, jednak gdy korzystamy z gotowego programu, czy też gotowy program chcemy zmodyfikować pod swój projekt, możemy natknąć się na różne sposoby podłączenia tych pinów do płytki. Kod odbiornika nie różni się dużo od kodu nadajnika, oczywiście, zamiast dane wysyłać, odbiera je. Program, który będzie sterował odbiornikiem, wygląda tak.

Tak jak wspomniałem wcześniej, kod różni się tylko w małym stopniu, ważną do zapamiętania komendą tej biblioteki jest „radio.read ();”. Polecenie to odpowiada za odczytanie wartości przesyłanych danych i bez niego ciężko będzie odczytać jakiekolwiek dane z modułu. Niektóre moduły NRF24L01 mogą mieć problemy z przesyłaniem danych, w 99% wynika to z nieprawidłowego zasilania, nie dzieje się to zawsze, ale musimy być przygotowani na taką ewentualność! Aby, zapobiec problemom często wystarczy pomiędzy linię 3.3 V a GND podłączyć kondensator 10uF, lub skorzystać z zewnętrznego źródła zasilania. Warto też pamiętać, że jeśli mamy zamiar użyć zewnętrznego zasilacza, musimy połączyć GND zasilacza z GND Arduino, zapewni nam to prawidłową pracę bez zakłóceń. Komunikacja bezprzewodowa jest tematem bardzo ciekawym, mającym wiele możliwości. Oprócz dwóch możliwości na przesył danych bezprzewodowo które omówiliśmy, jest jeszcze kilka, między innymi Bluetooth oraz WiFi, ale nimi zajmiemy się w innym artykule! Produkty użyte w poradniku:

Pokaż więcej wpisów z Styczeń 2020
pixelpixelpixelpixel