La libreria rc-switch permette di ricevere, analizzare e trasmettere i codici tipicamente usati per controllare tramite telecomando prese elettriche come quelle mostrate nella fotografia di apertura. Si tratta di un prodotto che utilizza tecnologie che, con un certo eufemismo, possono essere classificate come legacy, ma che hanno il vantaggio di non dipendere da servizi cloud, da internet o da smartphone e PC.
L'obbiettivo è quello di sostituire il telecomando della fotografia di apertura con Arduino al fine di poter programmare l'accensione e lo spegnimento degli utilizzatori collegati alle prese. Questa soluzione permette ad Arduino di controllare apparecchiature alimentate alla tensione di rete senza dover collegare nessun circuito auto-costruito a tensioni pericolose, aspetto critico per esempio in ambienti scolastici.
Il sistema utilizza una portante radio con frequenza 433.9 MHz con modulazione OOK (nota 1). Sono necessari i seguenti due moduli, o simili, disponibili per pochi euro presso tutti gli abituali fornitori di componenti elettronici:
I moduli possono essere usati anche senza antenna esterna, garantendo una copertura di qualche metro, più che adeguata per molte applicazioni.
Innanzitutto è necessario analizzare il segnale trasmesso. Collegando un oscilloscopio al pin RX del modulo ricevitore RXB6 è possibile osservare il segnale quando è premuto uno dei tasti del telecomando:
Le sequenze mostrate sono ritrasmesse continuamente fintanto che il tasto è premuto, separate da un intervallo di circa 11 ms.
I due grafici precedenti sono stati ottenuti con un Picoscope 3405A impostando il trigger avanzato come di seguito mostrato:
Quando non è premuto alcun tasto sul telecomando, l'uscita del demodulatore è un segnale casuale causato dal rumore:
La decodifica può essere fatta osservando la figura seguente:
La libreria per Arduino rc-switch permette la decodifica del segnale mostrato sopra. Queste librerie possono essere installare attraverso il gestore di librerie di Arduino oppure direttamente da GitHub, sito dove sono presenti gli esempi e la documentazione.
L'hardware da realizzare è semplice: si collega il pin RX del modulo ricevitore RXB6 ad uno dei pin di Arduino (D2 nell'esempio seguente).
Il codice seguente mostrerà sul monitor seriale alcune delle caratteristiche del frame ricevuto in corrispondenza della pressione dei vari pulsanti del telecomando:
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(9600);
mySwitch.enableReceive(0); // Uso dell'interrupt 0, pin 2
}
void loop() {
if (mySwitch.available()) {
Serial.print(mySwitch.getReceivedValue(), BIN);
Serial.print(" (0x");
Serial.print(mySwitch.getReceivedValue(), HEX);
Serial.println(")");
Serial.print (mySwitch.getReceivedBitlength());
Serial.println (" bit");
Serial.print ("Ritardo: ");
Serial.print (mySwitch.getReceivedDelay());
Serial.println (" us");
Serial.print ("Protocollo: ");
Serial.println (mySwitch.getReceivedProtocol());
Serial.println ("");
mySwitch.resetAvailable();
}
}
L'output mostra per ciascun frame corrispondente ad un determinato pulsante:
Decodificare il frame corrispondente alla pressione di ciascuno dei tasti del telecomando
I codici ricavati con l'attività 1 possono essere usati per attivare o disattivare le prese.
L'hardware da realizzare è semplice: si collega il pin TX del modulo FS1000A ad uno dei pin di Arduino (D10 nell'esempio seguente).
Il codice è intuitivo:
#include <RCSwitch.h>
#define SW1ON "000000010100010001010101"
#define SW1OFF "000000010100010001010100"
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(9600);
mySwitch.enableTransmit(10);
mySwitch.setProtocol(1);
mySwitch.setPulseLength(353);
mySwitch.setRepeatTransmit(15);
}
void loop() {
mySwitch.send(SW1ON);
delay(1000);
mySwitch.send(SW1OFF);
delay(1000);
}
In alternativa alla stringa binaria, invero piuttosto scomoda, è possibile usare il numero corrispondente in decimale o esadecimale, specificando la lunghezza in bit. Per esempio:
#define SW1ON 0x14455
...
mySwitch.send(SW1ON,24);
Pagina creata nel febbraio 2022
Ultima modifica: 23 febbraio 2022
Appunti scolastici - Versione 0.1026 - Agosto 2024
Copyright 2012-2024, Vincenzo Villa (https://www.vincenzov.net)
Creative Commons | Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)