RF433 – komunikacja

Mnożą nam się możliwości bezprzewodowej komunikacji między Arduino. Rozważaliśmy już ESP8266, mówiliśmy o nrf24l01. Jeszcze tańszą alternatywę stanowią moduły RF433.

RF433 - nadajniki i odbiorniki
RF433 – nadajniki i odbiorniki

Są to bardzo uniwersalne, proste, tanie i małe moduły, za pomocą których można transmitować niewielkie porcje danych. Świetnie nadadzą się np. do komunikacji między czujnikiem a Arduino. Z drugiej strony operują w dość ‚zaśmieconym’ paśmie. Ich aplikacja może więc wymagać dodatkowych zabiegów w celu uniknięcia zakłóceń.

Najpierw wady

Oczywistą wadą tych modułów jest ich jednokierunkowość. O ile w przypadku ESP8266 czy NRF odbiornik może za chwilę zamienić się w nadajnik – tutaj odbiornik i nadajnik to osobne moduły – jeden nie może pełnić obydwóch funkcji. Jeżeli więc chcecie, żeby jakiś moduł nadawał i odbierał – musicie podłączyć do niego dwa układy.

Niewielka jest też maksymalna szybkość transmisji, ok. 10KB/s. Ale te moduły nie są przeznaczone do przesyłania dźwięku czy wideo.

Kolejnym problemem jest samo pasmo. 433,05 – 434,90 MHz (razem 69 kanałów) w Polsce jest pasmem ISM (ang. Industrial, Scientific, Medical – „przemysłowe, naukowe, medyczne” [1]). Zgodnie z Rozporządzeniem Rady Ministrów w sprawie Krajowej Tablicy Przeznaczeń Częstotliwości przeznaczono je głównie dla radioamatorów, chociaż w tym paśmie dopuszcza się też inne transmisje z mocą maksymalną 10 mW (erp 10m od nadajnika, pasmo do 25kHz [3]). Na tych zasadach korzysta z niego wiele urządzeń ‚domowych’ – jak stacje pogodowe, bezprzewodowe wyłączniki lampek, systemy alarmowe, piloty samochodowe, słuchawki bezprzewodowe czy radiotelefony.

Ponieważ regulacje dla tego pasma mogą być różne w poszczególnych krajach a ilość dozwolonych typów transmisji jest znacząca, pasmo to jest dość zaśmiecone. Musicie więc liczyć się z dużymi zakłóceniami.

Parametry podawane przez producenta

Moduły RF433 nadają się do pracy z Arduino lub (pod pewnymi warunkami) z Raspberry Pi.

Parametr Wartość
Nadajnik
Napięcie zasilania 3,5 – 12V
Prąd 9mA (3V) – 40mA (12V)
Zasięg 200m w terenie otwartym, do 40m w terenie zabudowanym
Szybkość transferu do 10KB/s
Odbiornik
Napięcie zasilania 5v
Prąd 6mA

Zauważcie, że nadajnik wymaga zasilania co najmniej 3.5V.

W przypadku Raspberry musicie go więc podłączyć do pinu GPIO 2 lub 4, które dostarczają 5v. 3,3v może być niewystarczające do uruchomienia radia. Poziom logiki Raspberry powinien być wystarczający do wyzwolenia transmisji.

Odbiornik trzeba również podłączyć do zasilania 5v.

RF433 - odbiornik
RF433 – odbiornik

Ale:

Odpowiedź danych odbiornika RF433 będzie na poziomie logiki 5v. Jeżeli podłączycie tego rf bezpośrednio do pinów danych Raspberry, możecie doprowadzić do spalenia pinów GPIO i nieodwracalnego uszkodzenia Raspberry.

W przypadki Arduino nie powinno być takiego niebezpieczeństwa.

Pinologia

Pin Opis Podłączenie Arduino Podłączenie Raspberry
Nadajnik
GND Masa GND GND, np. pin 6
Data1 Dane, pierwsza linia danych Dowolny pin cyfrowy, np. D10 Dowolny pin uniwersalny GPIO
Vcc Zasilanie 5V 5V, pin 2 lub 4
Odbiornik
GND Masa GND GND, np. pin 6
Data1 Dane, pierwsza linia danych Dowolny pin cyfrowy, np. D2 Dzielnik napięcia lub konwerter stanów logicznych do dowolnego pinu uniwersalnego
Data2 Dane, druga linia danych – zawiera te same co piwersza Dowolny pin cyfrowy, może być również drugie Arduino (pamiętajcie o wspólnej masie) Dowolny pin uniwersalny GPIO
Vcc Zasilanie 5V 5V, pin 2 lub 4

Biblioteki

W Sieci znalazłem kilka bibliotek, które mogą posłużyć do uruchomienia RF433.

URL Opis Arduino Raspberry Przykład
https://github.com/sui77/rc-switch rc-switch Tak Tak tutaj
https://github.com/ninjablocks/433Utils Ninjablocks Tak Tak Ostatnie uzupełnienie 2 lata temu
http://www.airspayce.com/mikem/arduino/VirtualWire/ VirtualWire Koniec życia, teraz: Radiohead
http://www.airspayce.com/mikem/arduino/RadioHead/ RadioHead Tak ??? tutaj

Instalacja

Na pierwszy rzut wziąłem bibliotekę rc-switch – po prostu wydała mi się najłatwiejsza do opanowania. Po instalacji zmodyfikowałem przykłady Plik->Przykłady->rc-switch->SendDemo dla nadajnika (pin DATA nadajnika podłączony do pinu D10 Arduino):

/*
  Simple example for sending
  http://code.google.com/p/rc-switch/
*/

#include <RCSwitch.h>
uint8_t i = 0;
RCSwitch mySwitch = RCSwitch();
void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  //Transmisja na pinie D10
  mySwitch.enableTransmit( 10 );
}

void loop() {
  digitalWrite(13, HIGH);
  mySwitch.send(i++, 24);
  if(i>255)i=0;
  digitalWrite(13, LOW);
  delay(1000);
}

Poniżej kod dla nadajnika – zmodyfikowany Plik->Przykłady->rc-switch->ReceiveDemo_Simple (pin DATA odbiornika podłączony do D2 Arduino):

/*
  Simple example for receiving
  http://code.google.com/p/rc-switch/
*/
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Odbiornik na przerwaniu 0 => to jest pin D2
  pinMode(13, OUTPUT);
}
void loop() {
  if (mySwitch.available()) {
    digitalWrite(13, HIGH);
    int value = mySwitch.getReceivedValue();
    Serial.print("Received ");
    Serial.println( mySwitch.getReceivedValue() );
    mySwitch.resetAvailable();
    digitalWrite(13, LOW);
  }
  delay(500);
  Serial.print(".");
}

Na monitorze portu odbiornika powinniście zobaczyć coś w stylu:
.....Received 1
.Received 1
..Received 2
...Received 3
.Received 3
..Received 4
.Received 4
..Received 5

Przy pierwszym teście okaże się, że moduły rozmawiają ze sobą na odległości… dosłownie kilkunastu centymetrów. Ale wystarczy dołączyć antenkę – 20cm kawałku najzwyklejszego drucika, a zasięg wzrośnie do innego pokoju lub piętra.

RF433 - nadajnik
RF433 – nadajnik

Zasięg tych modułów będzie rozsądny dopiero gdy dodacie antenkę do nadajnika!

Podsumowanie

Z podobnymi modułami miałem do czynienia po raz pierwszy. Z zegarkiem w ręku, ich uruchomienie zajęło mi niecałe 2 godziny – włącznie z doczytaniem o nich w Sieci, przejrzeniem kilku bibliotek, napisaniem 2 fragmentów kodu i wpadnięciem na to, jak ważna jest antenka na nadajniku. Czas spędzony nad uruchomieniem ESP8266 czy nrf24l01 (kondensatory filtrujące między Vcc i GND!) – liczony był raczej w dniach:)

Nie prześlecie nimi za dużo danych, w tym paśmie jest wiele zakłóceń. Ale jeżeli potrzebujecie czegoś prostego, taniego i do jednokierunkowej komunikacji – to wydaje się świetny wybór.

Po podłączeniu prowizorycznej antenki do nadajnika, moduły wymieniały danych na odległość kilku metrów poprzez ścianę nośną. Oczywiście zasięg może zależeć od bardzo wielu zmiennych – w tym urządzeń, którymi posługują się Wasi sąsiedzi. Zwłaszcza, jeżeli są wśród nich amatorzy – krótkofalowcy.

Źródła

Analiza tendencji rozwoju technik RFID oraz
laboratorium badawcze technik RFID

Na elektrodzie o 433MHz
Radiowe urządzenia nadawcze bez zezwolenia
Wiki o ISM
Rozporządzenie Rady Ministrów w sprawie Krajowej Tablicy Przeznaczeń Częstotliwości

Dodaj komentarz

Proszę dodaj swój komentarz. Pamiętaj, żeby nie podawać żadnych danych osobowych.