Spisu treści:

Tania bezprzewodowa sieć czujników w paśmie 433 MHz: 5 kroków (ze zdjęciami)
Tania bezprzewodowa sieć czujników w paśmie 433 MHz: 5 kroków (ze zdjęciami)

Wideo: Tania bezprzewodowa sieć czujników w paśmie 433 MHz: 5 kroków (ze zdjęciami)

Wideo: Tania bezprzewodowa sieć czujników w paśmie 433 MHz: 5 kroków (ze zdjęciami)
Wideo: Zamontuj samodzielnie alarm we własnym domu! Zobacz jakie to łatwe. Bezprzewodowa Centrala Alarmowa. 2024, Listopad
Anonim
Niedroga bezprzewodowa sieć czujników w paśmie 433 MHz
Niedroga bezprzewodowa sieć czujników w paśmie 433 MHz

Wielkie podziękowania dla Teresy Rajby za uprzejme wyrażenie zgody na wykorzystanie danych z ich publikacji w tym artykule

* Na powyższym obrazku - pięć jednostek z czujnikami, których użyłem do testów

Co to są bezprzewodowe sieci czujników?

Prosta definicja brzmiałaby: sieci czujników bezprzewodowych odnoszą się do grupy urządzeń elektronicznych rozmieszczonych na określonym obszarze w celu monitorowania i rejestrowania danych środowiskowych, które są bezprzewodowo przesyłane do centralnej lokalizacji w celu ich przetworzenia i przechowywania.

Obecnie bezprzewodowe sieci czujników mogą być używane na kilka sposobów, poniżej przedstawiamy tylko kilka przykładów:

  • Obszary nadzoru ekologicznego lasów, rzek, jezior, mórz i oceanów;
  • Możliwość ostrzegania w przypadku ataków terrorystycznych, chemicznych, biologicznych, epidemicznych;
  • Systemy monitoringu dla dzieci, osób starszych, pacjentów lub osób o specjalnych potrzebach;
  • Systemy nadzoru w rolnictwie i szklarniach;
  • System monitorowania prognozy pogody;
  • Nadzór ruchu miejskiego, szkół, parkingów;

I wiele, wiele innych zastosowań.

W tym artykule chcę pokazać wyniki eksperymentu z bezprzewodowymi sieciami czujników, które były wykorzystywane do monitorowania danych dotyczących temperatury i wilgotności, z powolną i stosunkowo przewidywalną zmiennością. W tym eksperymencie wybrałem czujniki-nadajniki, które sam zbudowałem przy użyciu niedrogich modułów. Odbiornik jest również DIY, komunikacja jest jednokierunkowa (w paśmie radiowym 433 MHz), co oznacza, że czujniki tylko przesyłają dane, a centralna lokalizacja tylko odbiera. Brak komunikacji między czujnikami oraz od odbiornika do czujników.

Ale po co decydować się na korzystanie z wielu nadajników i tylko jednego odbiornika? Oczywiście pierwszym powodem byłoby „uproszczenie”. Im prostszy montaż, tym mniejsze prawdopodobieństwo awarii, a zdecydowanie łatwiej jest naprawić i wymienić poszczególne elementy w przypadku awarii. Zużycie energii jest również mniejsze, baterie będą działać dłużej (czujniki będą zużywać się tylko podczas monitorowania i odbierania, przez resztę czasu urządzenie będzie w trybie głębokiego uśpienia). To, że jest proste, sprawia, że urządzenie jest również tanie. Innym aspektem, o którym należy pamiętać, jest obszar zasięgu. Czemu? Dużo łatwiej jest zbudować i używać czułego odbiornika niż mieć czuły odbiornik i potężny nadajnik zarówno przy czujnikach, jak iw module centralnym (jest to niezbędne do dobrej komunikacji dwukierunkowej). Dzięki czułemu i dobrej jakości odbiornikowi możliwe jest odbieranie danych z dużej odległości, ale wysyłanie danych na tę samą odległość wymaga dużej mocy emisyjnej, a to wiąże się z wysokimi kosztami, zużyciem energii elektrycznej i (nie zapominajmy) możliwością przekroczenia legalna maksymalna moc nadajnika w paśmie 433 MHz. Używając odbiornika średniej jakości, taniego, ale z wysokiej jakości anteną (nawet DIY) i tanich nadajników z anteną dobrej jakości, możemy osiągnąć doskonałe wyniki za ułamek kosztów istniejących bezprzewodowych sieci sensorowych.

Krok 1: Rozważania teoretyczne

Pomysł zbudowania bezprzewodowej sieci czujników do monitorowania temperatury i wilgotności powietrza i gleby w różnych obszarach szklarni przyszedł mi do głowy dawno, prawie 10 lat. Chciałem zbudować sieć 1-wire i zastosować czujniki temperatury i wilgotności 1-wire. Niestety 10 lat temu czujniki wilgotności były rzadkie i drogie (choć czujniki temperatury były szeroko rozpowszechnione), a ponieważ rozprowadzenie przewodów po całej szklarni nie wydawało się opcją, dość szybko zrezygnowałem z tego pomysłu.

Jednak teraz sytuacja radykalnie się zmieniła. Jesteśmy w stanie znaleźć tanie i dobrej jakości czujniki (temperatury i wilgotności), a także mamy dostęp do tanich nadajników i odbiorników w paśmie 433 MHz. Jest tylko jeden problem: jeśli mamy więcej czujników (powiedzmy 20), jak rozwiązujemy kolizje (proszę pamiętać, że jest to komunikacja jednokierunkowa), czyli nakładanie się emisji 2 lub więcej czujników? Szukając możliwego rozwiązania natrafiłem na bardzo ciekawe artykuły:

Bezprzewodowy czujnik zbieżny obsada w oparciu o procedurę operacji losowych - autorstwa RAJBA, T. i RAJBA, S.

oraz

Prawdopodobieństwo kolizji w Wireless Sensor Network z losowym wysyłaniem - przez RAJBA S. i RAJBA. T

Zasadniczo autorzy pokazują nam, że prawdopodobieństwo kolizji w bezprzewodowej sieci czujników można obliczyć, jeśli pakiety są emitowane w określonych punktach czasowych zgodnie z rozkładem poissonowskim (wykładniczym).

Wyciąg z powyższego artykułu przedstawia charakterystykę badanej sieci.

  • dość duża liczba jednostek czujnik-nadajnik N;
  • jednostki czujnik-nadajnik pozostają całkowicie niezależne, a ich włączanie lub wyłączanie nie ma wpływu na działanie sieci;
  • wszystkie zespoły czujnik-nadajnik (lub ich część) mogą być ruchome pod warunkiem, że znajdują się w zasięgu radiowym stacji odbiorczej;
  • wolno zmieniające się parametry fizyczne poddawane są pomiarom, co oznacza brak konieczności przesyłania danych bardzo często (np. co kilka minut lub kilkadziesiąt minut);
  • transmisja jest jednokierunkowa, tj. od jednostki czujnik-nadajnik do punktu odbioru w T średnich odstępach czasu. Informacje są przesyłane w protokole w tP czas trwania;
  • dowolny wybrany czujnik rozpoczyna transmisję losowo w czasach Poissona. PASTA (Przyloty Poissona Zobacz średnie czasowe) będą wykorzystywane do uzasadnienia wysyłania sond w epokach Poissona;
  • wszystkie jednostki czujnik-nadajnik pozostają losowo niezależne i będą przesyłać informacje w losowo wybranym momencie tP czas trwania i T średni czas powtórzeń;
  • jeśli jeden lub więcej czujników rozpocznie transmisję, podczas gdy protokół tP czas trwania jest przesyłany z innego czujnika, taka sytuacja nazywana jest kolizją. Kolizja uniemożliwia centralnej stacji bazowej otrzymanie informacji w prawidłowy sposób.

Pasuje prawie idealnie z siecią czujników, którą chcę przetestować…

Prawie.

Nie twierdzę, że całkowicie zrozumiałem matematykę w artykule, ale na podstawie przedstawionych danych i wniosków udało mi się trochę zrozumieć, o co w tym chodzi. Tyle tylko, że wartość użyta w artykule trochę mnie zmartwiła:). Jest to zmienna tP - czas trwania transmisji danych zakładany jako 3,2x10-5 s. Czyli czas transmisji zebranych danych wyniósłby 3,2 nas! Nie da się tego zrobić na paśmie 433 MHz. Chcę użyć przełącznika rc lub głowicy radiowej do zaprogramowania czujników nadajnika. Studiując kody dwóch bibliotek doszedłem do wniosku, że najmniejszy czas transmisji to 20ms, znacznie powyżej wartości 3,2 us. Dzięki nadajnikom 2,4 GHz możliwe jest tP czas tak mały… ale to już inna historia.

Jeśli zastosujemy wzór zaproponowany przez autorów tego artykułu, wynik będzie następujący:

Dane początkowe (przykład):

  • Liczba czujników N=20;
  • Czas transmisji danych tP=20x10-3 s (0,020s)
  • Średni interwał transmisji T=180s

Formuła:

Prawdopodobieństwo kolizji w przedziale T wynosi

Obraz
Obraz

jeśli weźmiemy pod uwagę dane początkowe, prawdopodobieństwo kolizji w przedziale T wyniesie 0,043519

Ta wartość, która wskazuje na prawdopodobieństwo wystąpienia 4,35 kolizji na 100 pomiarów jest moim zdaniem całkiem niezła. Prawdopodobieństwo mogłoby się poprawić, jeśli zwiększymy średni czas transmisji, więc przy wartości 300s mielibyśmy prawdopodobieństwo 0,026332, czyli 2,6 kolizji na 100 pomiarów. Jeśli weźmiemy pod uwagę, że i tak możemy spodziewać się utraty danych pakietowych w trakcie działania systemu (w zależności np. od warunków pogodowych), to liczba ta jest naprawdę znakomita.

Chciałem zrobić symulację tego typu sieci, ale też coś w rodzaju asystenta projektowania, więc zrobiłem mały program w C, kod źródłowy można znaleźć na github (również skompilowany plik binarny, który działa w wierszu poleceń systemu Windows - uwolnienie).

Dane wejściowe:

  • numer_czujnika - liczba czujników w sieci;
  • liczba_pomiarów - liczba pomiarów do zasymulowania;
  • średni_interwał_transmisji - średni czas pomiędzy kolejnymi transmisjami danych;
  • czas_transmisji - efektywny czas trwania transmisji danych.

Wyjście:

  • obliczony maksymalny czas pomiaru;
  • lista kolizji między dwoma czujnikami;
  • liczba kolizji;
  • teoretyczne prawdopodobieństwo zderzeń.

Wyniki są całkiem ciekawe:)

Dość teorii, nie chciałbym się bardziej nalegać na część teoretyczną, artykuły i kod źródłowy są dość wymowne, więc lepiej przejdę do praktycznej, efektywnej implementacji bezprzewodowej sieci czujników i do wyników testów.

Krok 2: Praktyczne wdrożenie – sprzęt

Do przetworników-czujników będziemy potrzebować następujących elementów:

  • mikrokontroler ATtiny85 1,11 $;
  • Gniazdo układu scalonego 8DIP 0,046 $;
  • Czujnik temperatury/wilgotności DHT11 0,74 $;
  • Moduł nadajnika 433MHz H34A 0,73 $;
  • uchwyt baterii 4xAA z włącznikiem 1$;

Razem 3,63 $;

Odbiornik użyty do testów to Arduino UNO (tylko do testów) oraz moduł odbiorczy H3V4F (0,66$) z tanią anteną łukową (0,32$).

Schematy czujnik-nadajnik

Obraz
Obraz

Nadajnik-czujnik zasilany jest bateriami 3xAA 1,5V (w czwartej komorze uchwytu baterii znajduje się zespół elektroniczny). Jak widać zasilanie nadajnika oraz czujnik temperatury i wilgotności jest podpięty do pinu PB0 mikrokontrolera (nadajnik i czujnik są zasilane, gdy pin jest ustawiony na HIGH). Tak więc, gdy mikrokontroler jest w trybie głębokiego uśpienia, może osiągnąć pobór prądu 4,7uA. Biorąc pod uwagę, że czas wybudzenia nadajnika-czujnika wynosiłby około 3s (pomiar, transmisja itp.) a średni czas między transmisjami 180s (jak na przykładzie w poprzednim rozdziale), baterie powinny dość mocno wytrzymać. Przy dobrych bateriach alkalicznych (np. 2000 mAh) czas pracy może wynosić ponad 10 miesięcy, jak obliczono na omnicalculator.com (gdzie łączny pobór prądu to: czujnik - 1,5mA, moduł nadajnika - 3,5mA i mikrokontroler ATtiny85 - 5mA, łącznie 10mA).

Na poniższym zdjęciu widać prawie gotowy zespół czujnik-nadajnik.

Obraz
Obraz

Poniżej znajduje się zdjęcie odbiornika testowego.

Obraz
Obraz

Krok 3: Praktyczne wdrożenie – oprogramowanie

Oprogramowanie wgrane do mikrokontrolera attiny85, głównego komponentu jednostek czujnik-nadajnik, ma na celu odczytanie danych dostarczonych przez czujnik, przekształcenie ich w transmisję radiową i przesłanie ich w ramach czasowych Poissona (rozkład wykładniczy lub PASTA - Przyloty Poisson Zobacz średnie czasowe). Ponadto, korzystając z prostej funkcji, monitoruje stan baterii i ostrzega, jeśli wymagane napięcie dla czujnika nie jest już dostarczane. Kod źródłowy jest dostępny na githubie. Kod odbiornika testowego jest bardzo prosty, zamieszczam go poniżej.

//zmodyfikowana biblioteka rcswitch z https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// kod jest zmodyfikowaną wersją z przykładów oryginalnej biblioteki rcswitch #include RCSwitch mySwitch = RCSwitch(); długie dane bez znaku = 0; void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // Odbiorca na przerwaniu 0 => czyli pin #2 } void loop() { if (mySwitch.available()) { unsigned long data = mySwitch.getReceivedValue(); //wyjście(mojaPrzełącznik.getReceivedValue(), mojaPrzełącznik.getReceivedBitlength(),mojPrzełącznik.getReceivedDelay(), mojaPrzełącznik.getReceivedRawdata(), mójPrzełącznik.getReceivedProtocol()); int wilgotność = bitExtracted(dane, 7, 1); //mniej znaczących 7 bitów od pozycji 1 - pierwszy od prawej bit int temperature = bitExtracted(data, 7, 8); // kolejne 7 bitów od pozycji 8 w prawo itd. int v_min = bitExtracted(data, 1, 15); int id_pakietu = bitExtracted(dane, 3, 16); //3bits - 8 identyfikatorów pakietów od 0 do 7 int sensor_id = bitExtracted(data, 6, 19); //6bit dla identyfikatorów 64 czujników - łącznie 24 bity Serial.print(sensor_id);Serial.print(", ");Serial.print(packet_id);Serial.print(", ");Serial.print(temperatura); Serial.print(", ");Serial.print(wilgotność); Serial.println(); mójPrzełącznik.resetDostępny(); } } //kod z https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted(unsigned long number, int k, int p) { return (((1 (p - 1)));}

Starałem się zamieścić jak najwięcej komentarzy, aby ułatwić zrozumienie.

Do debugowania użyłem biblioteki softwareserial i płytki rozwojowej attiny85 z programatorem USBasp (zobacz także moje instrukcje na ten temat). Łącze szeregowe zostało wykonane za pomocą konwertera Serial na TTL (z układem PL2303) podłączonego do wygiętych pinów (3 i 4) płytki rozwojowej (patrz rysunek poniżej). Wszystko to było nieocenioną pomocą w uzupełnieniu kodu.

Obraz
Obraz

Krok 4: Wyniki testu

Wyniki testów
Wyniki testów
Wyniki testów
Wyniki testów

Stworzyłem 5 jednostek czujnik-nadajnik, które zbierają i wysyłają wartości zmierzone przez czujniki DHT11. Rejestrowałem i zapisywałem pomiary za pomocą odbiornika testowego i programu do emulacji terminala (foxterm) w ciągu trzech dni. Wybrałem 48-godzinną przerwę na naukę. Niekoniecznie interesowały mnie zmierzone wartości (np. czujnik 2 pokazuje mi błędne wartości), ale liczba kolizji. Dodatkowo czujniki zostały umieszczone bardzo blisko (w odległości 4-5 m) przy odbiorniku, aby wyeliminować inne przyczyny utraty pakietów. Wyniki testu zostały zapisane w pliku cvs i przesłane (patrz plik poniżej). Przesłałem również plik Excel oparty na tym pliku csv. Zrobiłem kilka zrzutów ekranu, aby pokazać, jak wygląda kolizja (oczywiście w moich testach), dodałem również komentarze do każdego zrzutu ekranu.

Możesz się zastanawiać, dlaczego nie korzystałem z usługi ładowania danych, na przykład ThingSpeak. Faktem jest, że mam wiele rekordów, wiele czujników i danych przychodzących często w nieregularnych odstępach czasu, a usługi IoT online pozwalają na dane tylko w określonej liczbie czujników i tylko w dość dużych odstępach czasu. Myślę w przyszłości o zainstalowaniu i skonfigurowaniu własnego serwera IoT.

Ostatecznie 4598 pomiarów na 5 jednostkach czujnik-nadajnik (około 920/czujnik) spowodowało w sumie 5 kolizji przez okres 48 godzin (0,5435 kolizji/100 pomiarów). Robiąc trochę matematyki (za pomocą programu wsn_test z danymi początkowymi: 5 czujników, średni czas 180s, czas transmisji 110 ms) prawdopodobieństwo kolizji wyniosłoby 0,015185 (1,52 kolizji/100 pomiarów). Praktyczne wyniki są jeszcze lepsze niż teoretyczne, prawda?:)

Obraz
Obraz

Zresztą w tym okresie utracono również 18 pakietów, więc kolizje nie mają większego znaczenia pod tym względem. Oczywiście test powinien trwać dłużej, aby uzyskać jak najbardziej jednoznaczne wyniki, ale moim zdaniem nawet w takich warunkach jest sukcesem iw pełni potwierdza założenia teoretyczne.

Krok 5: Końcowe myśli

Natychmiastowa aplikacja

W dużej szklarni uprawia się kilka roślin. Jeśli nawadnianie jest wykonywane ręcznie bez monitorowania klimatu, bez żadnej automatyzacji, bez zapisów danych, istnieje ryzyko nadmiernego lub niedostatecznego nawadniania, a także zużycie wody jest wysokie, nie ma dowodów na optymalizację zużycia wody, istnieje ryzyko dla upraw w ogólny. Aby tego uniknąć, możemy skorzystać z bezprzewodowej sieci czujników:)

Czujniki temperatury, czujniki wilgotności powietrza, czujniki wilgotności gleby można rozmieścić w całej szklarni, a za pomocą przesyłanych danych można wykonać kilka czynności: zawory elektryczne start-stop umożliwiające przepływ wody tam, gdzie jest to potrzebne, wentylatory elektryczne start-stop aby obniżyć temperaturę w różnych obszarach, należy w razie potrzeby zastosować nagrzewnice start-stop, a wszystkie dane można archiwizować do przyszłej analizy. Ponadto system może zapewnić interfejs sieciowy, który jest dostępny z dowolnego miejsca oraz alarmy e-mail lub SMS w przypadku nieprawidłowego stanu.

Co dalej?

  • Testowanie z większą liczbą czujników;
  • Testowanie w czasie rzeczywistym za pomocą zdalnych czujników w obszarze zasięgu;
  • Instalacja i konfiguracja lokalnego serwera IoT (na przykład na Raspberry Pi);
  • Testy również z nadajnikami (nadajnikami)-czujnikami na 2,4 Ghz.

więc… ciąg dalszy…:)

ZASTRZEŻENIE: Korzystanie z pasma częstotliwości 433 MHz w Twoim regionie może podlegać przepisom dotyczącym częstotliwości radiowych. Sprawdź legalność przed wypróbowaniem tego projektu

Konkurs czujników
Konkurs czujników
Konkurs czujników
Konkurs czujników

Drugie miejsce w konkursie czujników

Zalecana: