Serwisy partnerskie:
Close icon
Serwisy partnerskie

Bezprzewodowa sieć czujnikowa i zdalny odbiornik danych z użyciem Arduino

Bezprzewodowy węzeł czujnikowy jest to węzeł wyposażony w czujnik z nadajnikiem bezprzewodowym. Posiada jeden lub więcej elementów czujnikowych ze wzmacniaczem i układem kondycjonowania sygnału lub czujnikiem cyfrowym, jednostkę mikrokontrolera, modulator i nadajnik z anteną oraz baterię.
Article Image

Zasilany z baterii lub energii słonecznej, wykrywa temperaturę, nasłonecznienie, wilgotność gleby lub wstrząsy itp. i przekazuje sygnał do zdalnego odbiornika.

Wiele takich węzłów czujnikowych umieszcza się w regularnych odstępach na dużym obszarze geograficznym, aby pokryć cały obszar. Wszystkie z nich wysyłają swoje dane do odbiornika, który jest umieszczony w centralnym systemie monitorowania i przechowywania danych. Wszystkie węzły czujników okresowo przesyłają dane (wartości). Odbiornik odbiera dane ze wszystkich takich węzłów, przechowuje je i wyświetla w celu monitorowania i kontroli.

Przyjrzyjmy się kilku przykładom.

Na polu rolnym, automatyczny system nawadniania ma wiele węzłów czujników wilgotności gleby, które są rozmieszczone w całym gospodarstwie. Te okresowo przekazują dane o wilgotności gleby do jednego centralnego odbiornika, który jest podłączony do systemu monitorowania i sterowania. Jeśli poziom wilgotności gleby w danym obszarze spadnie poniżej wartości progowej, automatycznie włącza się pompa wodna, zawór elektromagnetyczny itp. w tym obszarze. W ten sposób utrzymywany jest wymagany poziom wilgotności gleby w całym gospodarstwie.

Na granicy między dwoma państwami, w regularnej odległości mogą być umieszczone węzły czujników z czujnikami zbliżeniowymi PIR, które wykrywają każdy ruch na granicy i wysyłają ostrzeżenie/alarm do stacji kontrolnej.

W szklarni musi być utrzymywana odpowiednia temperatura, wilgotność i nasłonecznienie. Dlatego jest ona wyposażony w wiele węzłów czujnikowych, które wykrywają temperaturę, wilgotność i nasłonecznienie w różnych miejscach i okresowo wysyłają dane do centralnej sterowni. Centralna sterownia zwiększa/zmniejsza chłodzenie, wilgotność lub natężenie światła zgodnie z zebranymi danymi z czujników.

W opisywanym projekcie zastosowano wiele czujników: cyfrowy czujnik wilgotności i temperatury, rezystor zależny od światła (LDR), który wykrywa światło otoczenia, oraz czujnik wilgotności gleby, który wykrywa wilgotność gleby. Projekt wykorzystuje również Arduino Nano jako mikrokontroler (MCU) oraz moduł nadajnika 433 MHz ASK RF. Takich węzłów czujnikowych może być wiele, ale tutaj wykorzystano tylko dwa takie węzły.

Odbiornik zawiera moduł odbiornika 433 MHz ASK RF, moduł zegara czasu rzeczywistego (RTC) oraz Arduino Nano. Oba węzły czujników przesyłają dane o mierzonych wartościach temperatury, wilgotności, oświetlenia otoczenia i wilgotności gleby. Odbiornik odbiera wartości z obu czujników (łącznie osiem wartości) i przekazuje je do komputera, który wyświetla te wartości i przechowuje do przyszłego wykorzystania.

Jak pokazano na schemacie blokowym projektu na rysunku 1, istnieją dwie odrębne części - nadajnik (węzeł czujnika) i zdalny odbiornik danych. Węzeł czujnikowy składa się z różnych czujników, mikrokontrolera, nadajnika RF oraz baterii.

Rysunek 1. Schemat blokowy projektu

Czujniki

DHT11 jest inteligentnym czujnikiem, który wykrywa temperaturę i wilgotność otoczenia i wysyła te dane do mikrokontrolera. LDR wykrywa światło otoczenia, a czujnik wilgotności gleby wykrywa wilgotność gleby.

Mikrokontroler

Płytka Arduino Nano jest używana jako mikrokontroler do odczytywania danych z wszystkich czterech czujników (temperatura, wilgotność powietrza, oświetlenie, wilgotność gleby) i przesyłania ich za pomocą nadajnika RF.

Nadajnik RF

Moduł nadajnika RF oparty na ASK z częstotliwością nośną 433 MHz jest używany do modulowania i przesyłania danych z czujników do odbiornika.

Bateria

Bateria 6 V lub 9 V jest używana do zapewnienia zasilania całego węzła czujnika.

Miganie diody LED sygnalizuje, że węzeł czujnika jest aktywny i transmituje dane.

Zdalny odbiornik danych posiada jedynie moduł odbiornika RF oraz mikrokontroler.

Odbiornik RF

Moduł odbiornika RF oparty na ASK o częstotliwości nośnej 433 MHz jest używany do demodulacji i odbioru danych transmitowanych przez moduł nadawczy RF węzła czujnika.

Mikrokontroler. Płytka Arduino Nano jest używana jako mikrokontroler, który pobiera dane z modułu odbiornika RF i przekazuje je do komputera, który przechowuje je do późniejszego wykorzystania.

Miganie diody LED w odbiorniku oznacza, że odbiornik jest aktywny i odbiera dane.

Węzeł czujnikowy (nadajnik)

Jak widać na schemacie węzła czujnikowego na rysunku 2, w obwodzie nadajnika znajduje się tylko pięć głównych elementów:

  1. Czujnik DHT11, który posiada trzy piny interfejsu: Vcc, Gnd, oraz Data Out. Pin Vcc jest zasilany napięciem 5 V z płytki Arduino, a pin Gnd jest podłączony do masy. Pin Data Out jest podłączony do cyfrowego pinu D10 płytki Arduino Nano. Jest on podciągnięty do poziomu wysokiego przez rezystor podciągający R3, jak pokazano na rysunku 2.
  2. Czujnik wilgotności gleby SS1, który posiada trzy piny do podłączenia: Vcc, Gnd, oraz A0. Na pin Vcc podawane jest napięcie 5 V z płytki Arduino Nano, natomiast pin Gnd podłączony jest do masy. SIG/A0 to wyjście analogowe czujnika, które jest podłączone do wejścia analogowego A1 płytki Arduino Nano.
  3. LDR1, który jest połączony w konfiguracji pull-down z 10-kiloomowym rezystorem (R2). Jego wyjście jest podłączone do wejścia analogowego A0 płytki Arduino Nano.
  4. Moduł nadajnika RF 433 MHz (TX1), który posiada cztery piny interfejsowe: Vcc, Gnd, Data oraz Antenna. Pin Vcc jest podłączony do wyjścia 5 V płytki Arduino, a Gnd jest podłączony do masy. Pin Data jest połączony z pinem cyfrowym D11 płytki Arduino. Antena (ANT.1) jest utworzona przez skręcenie miedzianego drutu o średnicy 1 mm i długości 35 cm, który jest podłączony do pinu anteny.
  5. Dioda LED (LED1), która jest podłączona do pinu cyfrowego D12 poprzez rezystor ograniczający prąd R1.
Rysunek 2. Schemat ideowy bezprzewodowego węzła czujnikowego

Do zasilania płytki Arduino użyta jest bateria 9 V lub zasilacz regulowany. Pin Vin płytki Arduino jest podłączony do baterii, więc płytka generuje napięcie 5 V z wbudowanego układu stabilizatora napięcia 7805, które jest podawane na DHT11 i moduł nadajnika RF 433 MHz (TX1).

Węzeł czujników okresowo mierzy temperaturę, wilgotność, wilgotność gleby oraz światło otoczenia i przesyła te wartości. Ale, jak pokazano na schemacie blokowym, może istnieć dowolna liczba węzłów czujników. Wszystkie one będą transmitować swoje wartości. Może się zdarzyć, że więcej niż jeden węzeł będzie transmitował dane w tym samym czasie. Ponadto, skąd odbiornik będzie wiedział, które dane pochodzą z którego węzła?

Aby przezwyciężyć te problemy wszystkie węzły czujników są zsynchronizowane w czasie tak, że dwa węzły nie nadają jednocześnie. Jeśli jednak tak się stanie, odbiornik przyjmie dane z dowolnego czujnika. Ponadto wszystkie węzły mają przypisane numery (powiedzmy od 1 do N). Zanim przekażą swoje dane, przesyłają swój numer węzła. Dzięki temu odbiornik zna dokładny węzeł czujnika, z którego pochodzą dane.

Czujnik DHT11 zapewnia dokładne i skalibrowane pomiary temperatury i wilgotności. Podaje on bezpośrednie wartości cyfrowe dla obu pomiarów. Mikrokontroler Arduino odczytuje te wartości i konwertuje je na postać znaków (ASCII).

Wraz ze wzrostem natężenia światła padającego na LDR1, jego rezystancja maleje i wzrasta analogowe napięcie wyjściowe. Tak więc, analogowe napięcie wyjściowe z LDR1 jest wprost proporcjonalne do światła otoczenia. Arduino konwertuje to napięcie analogowe na wartość cyfrową (pomiędzy 0 a 1023) i odwzorowuje ją pomiędzy 0 a 99%. Na koniec konwertuje tę wartość procentową na znaki ASCII.

Czujnik wilgotności gleby (SS1) wytwarza analogowe napięcie wyjściowe odwrotnie proporcjonalne do zawartości wilgoci w glebie. Oznacza to, że jego napięcie wyjściowe maleje wraz ze wzrostem wilgotności gleby. Arduino konwertuje to napięcie analogowe na wartość cyfrową (w zakresie od 0 do 1023) i odwzorowuje ją w zakresie od 0 do 99%. Na koniec konwertuje tę wartość procentową na znaki ASCII.

Następnie dane te są wysyłane do modułu nadajnika RF (TX1) poprzez pin D11 Arduino.

TX1 pobiera ten ciąg dziesięciu znaków (możemy go nazwać pakietem), moduluje go za pomocą częstotliwości nośnej 433 MHz i transmituje przez antenę ANT1. Za każdym razem, gdy pakiet jest transmitowany, mikrokontroler mruga diodą LED1, aby wskazać, że dane są przesyłane. Cykl ten powtarza się w sposób ciągły po każdym ustalonym okresie czasu (powiedzmy 10 sekund).

Zdalny odbiornik danych

Jak pokazano na schemacie układu zdalnego odbiornika danych na rysunku 3, w układzie odbiornika występują tylko trzy główne elementy:

  1. Moduł odbiornika RF 433 MHz RX1, który posiada cztery piny interfejsowe: Vcc, Gnd, Data Out oraz Antenna. Pin Vcc jest podłączony do wyjścia 5 V płytki Arduino, a Gnd jest podłączony do wspólnej masy. Piny danych są podłączone do cyfrowego pinu D12 płytki Arduino. Antena (ANT.2), taka sama jak po stronie nadajnika, jest podłączona do pinu anteny.
  2. Moduł RTC Zastosowano układ RTC DS1307 posiadający cztery piny interfejsu: Vcc, Gnd, SDA, oraz SCL. Pin Vcc jest podłączony do wyjścia 5 V płytki Arduino, natomiast Gnd jest podłączony do masy. Piny SDA i SCL służą do transmisji danych w trybie bajtowym TWI (IIC). Są one podłączone odpowiednio do pinów A4 (SDA) i A5 (SCL) płytki Arduino Nano.
  3. Dioda LED (LED2), która jest podłączona do pinu cyfrowego D10 Arduino poprzez rezystor ograniczający prąd R4.
Rysunek 3. Schemat ideowy zdalnego odbiornika danych

Płytka Arduino Nano oraz moduł RF RX1 są zasilane z komputera centralnego poprzez kabel USB. Płytka Arduino Nano również rejestruje dane i komunikuje się z komputerem za pomocą tego samego kabla USB.

Działanie i obsługę zdalnego odbiornika danych można zrozumieć na podstawie poniższych kroków:

  • Odbiornik najpierw sprawdza, czy RTC jest uruchomiony i podaje poprawną datę i czas, czy nie. Jeśli RTC jest uruchomiony, Arduino wyświetla aktualny czas na monitorze szeregowym.
  • Moduł RF RX1 odbiera pakiety z każdego węzła. Następnie demoduluje je i przekazuje do mikrokontrolera Arduino.
  • Mikrokontroler odbiera pakiety i wyodrębnia z nich wszystkie cztery wartości: światło otoczenia, wilgotność gleby, temperaturę i wilgotność wraz z numerem węzła.
  • Następnie szeregowo wysyła następujące dane do komputera przez USB jako węzeł x:
    • Wilgotność gleby: XX%
    • Światło: ŚWIATŁO: XX%
    • Wilgotność: XX%
    • Temperatura: XX°C
  • Mikrokontroler mruga diodą LED2, sygnalizując odbiór danych.
  • Ponadto za każdym razem, gdy Arduino otrzymuje dane z dowolnego węzła czujnika, odczytuje czas i datę z modułu RTC i szeregowo wysyła je do komputera. Tak więc wartości danych z węzła czujnika są drukowane wraz z czasem i datą.
  • Wszystkie cztery wartości danych z czujników wraz z czasem i datą są kolejno wyświetlane na monitorze szeregowym.
  • Proces ten powtarza się dla każdego pakietu otrzymanego od dowolnego węzła w dowolnym czasie. Ponieważ wszystkie węzły są zsynchronizowane w czasie, przesyłają one dane sekwencyjnie jeden po drugim.
  • Odbiornik otrzymuje dane ze wszystkich węzłów po kolei i aktualizuje odczyty dowolnego węzła po upływie zadanego czasu.

Kiedy RTC jest włączany po raz pierwszy, jego aktualna data i czas muszą być ustawione za pomocą funkcji rtc.adjust() (podanej w programie z komentarzem). Po ustawieniu daty i czasu dla RTC, musimy ponownie wykomentować funkcję rtc.adjust() z programu i wgrać program ponownie. Tak więc program odbiornika musi być wgrany dwa razy do płytki Arduino Nano.


Istnieją dwa kody źródłowe: Labtesttxnode.ino dla węzła czujnika oraz LabtestRx.ino dla odbiornika. Kod Labtesttxnode.ino w Board1 służy do zbierania danych z czujników i ich przetwarzania. Kod LabtestRx.ino w Board2 jest używany do wyświetlania czasu, daty i statusu transmisji węzłów na monitorze szeregowym. Przed załadowaniem kodów źródłowych należy dołączyć powiązane biblioteki DHT.zip, RTClib.zip i VirtualWire.zip.

Budowa i testowanie

Schemat PCB nadajnika (węzła czujnikowego) o rzeczywistych wymiarach pokazano na rysunku 4, a rozmieszczenie jego elementów na rysunku 5. Po zmontowaniu układu na płytce drukowanej należy podłączyć napięcie 9 V DC do złącza CON1.

Rysunek 4. Układ płytki drukowanej dla węzła czujnikowego
Rysunek 5. Rozmieszczenie elementów na płytce PCB z rysunku 4

Schemat PCB odbiornika w rzeczywistych wymiarach pokazano na rysunku 6, a rozmieszczenie jego elementów na rysunku 7. Po zmontowaniu układu na płytce drukowanej, należy podłączyć płytkę do laptopa lub komputera stacjonarnego w celu monitorowania danych wysyłanych z poszczególnych węzłów na monitorze szeregowym w Arduino IDE.

Rysunek 6. Układ płytki drukowanej dla odbiornika
Rysunek 7. Rozmieszczenie elementów na płytce PCB z rysunku 6
Wykaz elementów
Ilość
Symbol
Nazwa/opis/gdzie kupić
Do pobrania
Download icon Źródła Download icon Schemat montażowy
AUTOR
Źródło
www.electronicsforu.com
Udostępnij
UK Logo