Arduino e radio comandi RC wireless

Come usare Arduino e i radio comandi RC wireless a 315-433 Mhz

Quando ti serve trasmettere dei dati o accendere e spegnere degli apparati elettrici (apri cancelli, prese elettriche radio comandate, radio comandi RC, stazioni meteo, sonde di temperatura/umidità) puoi utilizzare Arduino abbinato a dei trasmettitori wireless. I trasmettitori Wireless utilizzano una frequenza portante, che può essere a 315-433 Mhz per modulare un segnale ad onda quadra.

Nel segnale ad onda quadra viene “scritto” il dato da trasmettere. Questi trasmettitori e ricevitori hanno un prezzo basso, ma per essere utilizzati necessitano di una interpretazione dei bit/dati trasmessi.Gli apparati a basso costo utilizzano dei chip integrati che servono a trasmettere un dato (Encoder) o a ricevere un dato (Decoder) quali per esempio: SC5262 / SC5272, HX2262 / HX2272, PT2262 / PT2272, EV1527, RT1527, FP1527 or HS1527 chipset.

Interpretare questi dati non è semplice e si devono utilizzare dei microprocessori. E’ per questo che vanno abbinati, per esempio, ad una scheda a microprocessore come quella della famiglia Arduino.

Ho parlato di famiglia perchè Arduino è il nome generico dato ad una serie di schede a microprocessore quali la UNO, la MEGA2560, la DUE e altre. Le schede hanno tutte un grado di compatibilità perchè utilizzano la stessa IDE (il software dove si scrive il programma di Arduino), e lo stesso linguaggio di programmazione semplificato per Arduino (linguaggio C++). Per il resto hanno forme, dimensioni e microprocessore diversi e partono dalla piccola e meno potente Arduino UNO, alla MEGA che ha molti più connessioni/pin della UNO e la DUE che è dotata di un microprocessore ARM a 32 bit.

Trasmettitori e Ricevitori wireless 315-433Mhz

Arduino e radio comandi RC wireless - trasmettitore e ricevitore
Arduino e radio comandi RC wireless – trasmettitore (in alto) e ricevitore (in basso)

Il trasmettitore di radio frequenza (onde radio) è dotato di almeno 3 pin/connessioni elettriche. Due servono ad alimentare la trasmittente radio. Il terzo è l’ingresso dei dati. Ogni trasmettitore deve avere un’antenna che propaga il segnale radio per le trasmissioni a distanza. La portata di un trasmettitore è la distanza massima raggiunta dal segnale radio e ricevuto correttamente dal ricevitore.

L’antenna ANT è un semplice filo elettrico con una lunghezza proporzionale alla frequenza di trasmissione. Un trasmettitore a 315 Mhz ha un antenna più lunga di un trasmettitore a 433 Mhz. Nel trasmettitore della immagine sopra deve essere collegata ancora l’antenna che va saldata nel foro vicino alla scritta ANT. Una semplice antenna per un trasmettitore a 433 Mhz (stessa cosa vale per il ricevitore) è un filo in rame diametro 1mm e lungo 16,5 cm.

Puoi trovare un interessante trattato sulle antenne qui. Ricordati che l’antenna del trasmettitore e del ricevitore devono essere inclinate nello stesso identico modo. La cosa migliore è posizionarle in verticale.

Il ricevitore è un modulo più complesso/ingombrante e di solito ha almeno 4 pin di collegamento elettrico. 2 per l’alimentazione, 1 per l’antenna ricevente e uno per l’uscita dei dati. Nell’immagine sotto un ricevitore della ditta Aurel con le funzioni dei pin spiegate in dettaglio. Questo ricevitore è dotato di un uscita che misura la intensità del segnale radio ricevuto (Pin 13 Test Point).

Arduino wireless - ricevitore aurel
Ricevitore radio Aurel

Collegare Arduino al ricevitore/trasmettitore radio

Prima di collegare i moduli radio alla tensione di uscita 5V della scheda Arduino verificare/essere sicuri che i moduli hanno una tensione di alimentazione di 5V (e non di 3,3V o altra tensione). La libreria che decodifica i dati trasmessi/ricevuti funziona con uno speciale pin di Arduino chiamato “interrupt”. Per cui il segnale dei dati va collegato solo ad alcuni pin chiamati INT  seguiti da un numero, che per le schede Arduino UNO può essere INT0 e INT1.

I pin della alimentazione positiva dei moduli radio vengono chiamati Vcc/V+ e vanno collegati al pin della scheda Arduino chiamato 5V. I pin Ground/GND vanno collegati al pin GND (polo negativo di alimentazione). Il pin DATA/Data OUT va collegato ad un pin della scheda Arduino avente la funzione interrupt (DIGITAL Pin) per il ricevitore radio e ad un qualunque Digital Pin per il trasmettitore.

Arduino wireless - collegamenti elettrici
Collegamenti elettrici per Arduino e radio comandi RC wireless
Arduino wireless - interrupt pin
Pin collegati agli ingressi con funzione di interrupt

Libreria Arduino RC Switch

Questa libreria non è standard, per cui dovrete installarla nella directory della IDE di Arduino. Con questa libreria puoi inviare un dato codificato al modulo radio trasmettitore, o ricevere un dato e decodificarlo. Può gestire più protocolli di comunicazione/codifica dei dati in modo automatico. In basso vedi la forma d’onda (come varia la tensione sul pin della scheda Arduino) del segnale/dato codificato. Dopo un segnale di sincronismo (dopo un impulso positivo la tensione rimane a zero Volt per un certo tempo) il segnale diventa positivo 5V per un lasso di tempo e negativo 0 Volt per altro tempo.

Nel caso di questa libreria il segnale di sincronismo appare alla fine della trasmissione dei dati. Il rapporto che esiste tra il tempo del segnale positivo e quello negativo determina se è stato inviato un dato/bit a livello logico 1 oppure 0. La libreria misura la durata dei segnali e stabilisce se sono bit 1 oppure 0 ed impacchetta tutta la sequenza in modo da formare un numero per noi comprensibile. Qui il link al blog dell’autore di questa libreria SUI77.

Questa libreria è stata creata per accendere o spegnere a piacere delle prese elettriche radio comandate. Con un pò di prove si può adattare ad altri utilizzi, ad esempio per ricevere dati da una stazione meteo. Si usa con protocolli dei chip set SC5262 / SC5272, HX2262 / HX2272, PT2262 / PT2272, EV1527, RT1527, FP1527 or HS1527, e le prese radio comandate “Intertechno”.

Questa libreria può essere utilizzata in modo generico per trasmettere e ricevere dati per un massimo di 24 bit.

Ho provato la libreria, ma a me non funzionava la ricezione dei dati. Dopo aver “letto” tutto il codice che forma la libreria ho apportato alcune piccole modifiche e sono riuscito a vedere funzionare correttamente il mio progetto.

Arduino - forma d'onda segnale elettrico wireless
Sequenza dei bit trasmessi per formare un dato

Programma per inviare un dato

/*
 Esempio di trasmissione dati (accende e spegne una presa comandata)
 
 http://code.google.com/p/rc-switch/
 
 www.sciamannalucio.it 

*/

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {

 Serial.begin(115200);
 
 // Il trasmettitore radio è connesso al DIGITAL Pin #13
 // il Pin è a tua scelta dal 4 al 13 
 mySwitch.enableTransmit(13);

 // Optional set pulse length.
 // mySwitch.setPulseLength(320);
 
 // Optional set protocol (default is 1, will work for most outlets)
 // mySwitch.setProtocol(2);
 
 // Numero di ripetizioni del dato trasmesso (minimo 4).
 mySwitch.setRepeatTransmit(4);
 
}

void loop() {

 // Per le prese radio comandate il primo numero
 // individua il gruppo di prese, mentre il secondo
 // individua la presa. Si possono avere da 1 a 4 gruppi
 // per un massimo di 4 prese radio comandate per gruppo
 /* See Example: TypeA_WithDIPSwitches */
 mySwitch.switchOn(1, 1);
 delay(1000);
 mySwitch.switchOff(1, 1);

 delay(5000);
}

Programma per ricevere un dato

/*
 Semplice esempio di ricezione dei dati
 
 http://code.google.com/p/rc-switch/
 
 www.sciamannalucio.it

*/

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

int RX_Pin = 2; // DIGITAL Pin 2 da collegare alla ricevente radio

void setup() {
 Serial.begin(115200); // imposta il baud del monitor seriale a 115200
 // Il ricevitore radio è connesso al DIGITAL Pin #2
 // il Pin è a tua scelta tra 2 e 3 
 mySwitch.enableReceive(RX_Pin); // collega il Pin con funzione interrupt
}

void loop() {
 // Se è arrivato un dato
 if (mySwitch.available()) {
 // memorizza il dato
 int value = mySwitch.getReceivedValue();
 // Se il dato vale zero
 if (value == 0) {
 Serial.print("Unknown encoding");
 // altrimenti
 } else {
 Serial.print("Received ");
 Serial.print( mySwitch.getReceivedValue() ); // stampa il dato ricevuto
 Serial.print(" / ");
 Serial.print( mySwitch.getReceivedBitlength() ); // stampa il numero di bit 
 Serial.print("bit ");
 Serial.print("Protocol: ");
 Serial.println( mySwitch.getReceivedProtocol() ); // stampa il protocollo
 }
 // ri-arma la ricezione dei dati
 mySwitch.resetAvailable();
 }
}

Per verificare  sia la trasmissione che la ricezione dei dati ho utilizzato due schede Arduino UNO. Una scheda è programmata per la trasmissione, mentre la seconda per la ricezione. Ho collegato il DIGITAL Pin 13 della scheda programmata per la trasmissione, al DIGITAL Pin 2 della scheda programmata per la ricezione. Quando tutto funziona vedrai il dato trasmesso nel riquadro del monitor seriale. Il numero ricevuto a destra della scritta “Received” è quello che è stato trasmesso.

Per conoscere questi comandi, sotto forma di numero, devi mettere in ricezione una scheda e accendere/spegnere le prese comandate (la scheda deve essere collegata alla ricevente radio via il DIGITAL Pin 2). Così facendo “sniffi” il comando e lo memorizzi nel tuo programma.

Ho provato ad utilizzare una sola scheda che fungeva sia da trasmissione che di ricezione, ma non ha funzionato. Probabilmente, per come è costruita la routine di trasmissione (con l’uso di delay), si allungano i tempi del bit trasmesso e questo non permette il corretto riconoscimento dei bit.

Arduino wireless - videata programmi e monitor seriale
Arduino wireless – videata programmi e monitor seriale

Impostazioni delle prese radiocomandate

Alcune prese radio comandate offrono la possibilità di impostare sia il gruppo che il numero a cui sono assegnate. In basso un esempio. A sinistra il telecomando ha la possibilità di impostare il gruppo (attraverso il dip switch) tra 1 e 5. A destra la presa comandata ha la possibilità di essere inserita nel gruppo 1 fino al 6. Poi va abbinato il tasto A, B, C, D. Il tutto viene impostato spostando i piccoli interruttori bianchi del dip switch.

Arduino wireless - impostazioni presa comandata
Arduino wireless – impostazioni presa comandata

Link utili, informazioni e crediti

Autore dell'articolo: Lucio Sciamanna