Ecco come evitare l'uso di scomodi cavi per il controllo remoto, sostituendoli con un collegamento radio ISM, senza la necessità di alcuna licenza o permessi. I moduli radio disponibili in commercio permettono di realizzare un sistema semplice a costi molto bassi.
Introduzione
Tanti dispositivi utilizzano dei cavi per effettuare il controllo da remoto. Purtroppo, il loro cablaggio non risulta, sempre, semplice e il risultato finale non è proprio esteticamente bello. L'autore dell'articolo doveva sostituire due ingombranti cavi di controllo a sei conduttori, disposti tra la sua stazione di radioamatore e l'unità di controllo del rotore sul tetto. L'articolo propone una soluzione generale utilizzabile in qualsiasi ambito e per tutti gli scopi, in quanto fornisce la disponibilità di quattro canali radio digitali e quattro canali analogici, in modalità half-duplex. Il progetto comprende due assemblaggi elettronici, un dispositivo di trasmissione nella stazione base e uno di ricezione sul rotore, collegati da un singolo canale radio. Dal momento che ciascuna unità può sia ricevere che trasmettere (anche se non simultaneamente ma solo uno alla volta), la trasmissione è di tipo half-duplex. La figura 1 mostra il concetto.
I moduli utilizzati nelle due unità
L'hardware utilizzato nei due punti estremi del sistema è costituito principalmente da moduli già pronti. E' anche utilizzato un controller Arduino Nano. Un modulo radio trasmettitore/ricevitore a 2,4 GHz ISM nRF24 si occupa di ciascun collegamento radio. I due dispositivi (front-end e back-end) differiscono tra loro solo per le interfacce utente.
Mentre il back-end (in figura 2) presenta un ingresso analogico e delle uscite digitali bufferate, insieme a quattro LED (per la fase di test), il front-end (in figura 3) è dotato di alcuni pulsanti e un display LCD. Per tale scopo è utilizzato un modulo pronto all'uso, ossia una shield tastiera LCD a basso costo.
Arduino Nano
Non c'è molto da dire su Arduino Nano [1] [2]. E' compatibile con il famoso modello standard Arduino Uno, ma è anche più piccolo ed economico. In questa applicazione entrambe le unità sono alimentate tramite adattatori CC. L'Arduino Nano può essere alimentato da una tensione di alimentazione compresa tra 6 V e 20 V ma, poiché la sua regolazione di tensione interna si basa su semplici regolatori lineari, questi diventano piuttosto caldi quando devono far fronte a tensioni d'ingresso relativamente elevate. Se la tensione d'ingresso è compresa tra 7 V e 9 V, la temperatura è molto più sopportabile. Se viene utilizzata una tensione più elevata, nella linea di alimentazione, bisognerebbe prevedere un resistore in serie da 47 ohm; insieme a questo è meglio aggiungere il diodo di protezione contro l'inversione di polarità.
Il modulo radio nRF24
Questi famosi moduli radio, che trasmettono e ricevono a 2,4 GHz, sono usati in molte applicazioni wireless. Non solo sono economici ma esistono anche tante librerie per l'IDE di Arduino. I moduli funzionano senza particolari accorgimenti; tutto ciò che serve è integrare la libreria nel programma, senza la necessità di occuparsi, più di tanto, sulla parte a radio frequenza. I moduli nRF24 sono controllati tramite il bus SPI di Arduino Nano. Sono disponibili all'uso fino a 128 canali, anche se i chip comunicanti devono utilizzare lo stesso canale. I moduli sono disponibili in un gran numero di versioni: con antenne SMA onboard o esterne, ad alta o bassissima potenza, con o senza regolatore di tensione a 3.3 V, con amplificatore di potenza integrato e amplificatore LNA e, soprattutto, con una serie di diverse configurazioni di connessione. Quale versione utilizzare dipende dallo spazio disponibile. Se si desidera trasmettere all'interno di una stanza, è adatto il modulo con antenna stampata [3]. D'altra parte, se i punti che devono comunicare sono separati da diversi piani di cemento armato, è necessario utilizzare una versione [4] che garantisca la massima potenza di trasmissione e di ricezione. Si noti che il raggio di azione di 1 km specificato dal produttore viene raggiunto solo in condizioni ideali e all'aperto. Nella situazione descritta qui, ci si può aspettare un raggio simile a quello che gestirà un router WLAN. Il modulo di trasmissione/ricezione non funziona a 5 V come Arduino, ma a 3.3 V. In linea di principio, il modulo del ricetrasmettitore potrebbe essere azionato direttamente, utilizzando l'uscita a 3,3 V di Arduino Nano, che eroga fino a 50 mA. Ciò potrebbe essere sufficiente per il semplice modulo radio con antenna PCB stampata (da 11 a 12 mA), ma non per la versione con amplificatori, in quanto assorbono fino a 115 mA in modalità di trasmissione. Per questo motivo, qui proponiamo il modulo radio utilizzando un regolatore di tensione aggiuntivo, che è collegato all'uscita di 5 V di Arduino. Esiste anche un modulo su misura per questo scopo, ma il sistema utilizza la disposizione classica di un regolatore di tensione (SMD o TO92), insieme ai normali condensatori di disaccoppiamento.
La shield LCD Keypad
La Shield LCD Keypad 1602 per Arduino, offerta come campione omaggio dalla società DFRobot di Shanghai [5] per l'articolo, è progettata per adattarsi meccanicamente all'Arduino Uno ma, naturalmente, può essere utilizzata anche con il Nano. Il display, con 2x16 caratteri, non viene pilotato in serie utilizzando SPI o I2C, ma attraverso il bus parallelo. I pin di visualizzazione da DB4 a DB7 sono collegati ai terminali da D4 a D7 del connettore, mentre i pin di controllo Reset e Enable vengono collegati, rispettivamente, a D8 e D9. Il display è dotato di un trimmer per la regolazione del contrasto dell'LCD. La circuiteria dei cinque pulsanti di selezione SELECT, LEFT, UP, DOWN e RIGHT non è convenzionale e non opera come ci si potrebbe aspettare. Essi non sono collegati in modo indipendente ai singoli ingressi digitali ma, al contrario, tutti e cinque hanno in comune un'unica connessione analogica (A0). Internamente, i pulsanti sono collegati a un partitore divisore resistivo per richiedere, da parte del controllore, la valutazione della tensione analogica su A0, per determinare quando e quale pulsante viene premuto. Ciò implica che solo un pulsante alla volta può essere premuto. La Shield ha un altro pulsante (RESET), che è collegato al pin RST di Arduino, ma non viene usato in quest'applicazione. Thomas Clausen ha approfondito la Shield con maggior dettaglio e la descrive in [6].
Come funziona la comunicazione half-duplex in pratica
Il processo di comunicazione tra le due parti è illustrato nei diagrammi di flusso di figura 4. In linea di principio, un tasto viene rilevato sul front-end e tale informazione viene passata al back-end, dove avviene l'elaborazione. I tasti SU, GIU', SINISTRA e DESTRA fanno sì che una delle uscite digitali sia commutata a livello logico basso; il tasto SELECT consente all'utente di scegliere uno dei quattro ingressi analogici disponibili, al fine d'inserire uno dei quattro valori misurati.
Nel programma per il front end (TX.ino) dopo l'inizializzazione, il controllore valuta lo stato dei tasti, nel loop principale, misurando la tensione analogica su A0 e determinando quale dei cinque tasti è stato premuto. Si noti che in commercio esistono diverse varianti della shield e a seconda della variante acquistata, i valori dei resistori del divisore possono differire. Di conseguenza, potrebbe essere necessario modificare i valori di soglia nel "listato 1", in maniera che i valori vengano rilevati in modo affidabile. Il programma passa quindi alla modalità di trasmissione, informa il back-end del tasto che viene premuto e passa alla modalità di ricezione. Il back-end, che all'avvio del programma (RX.ino) è in modalità di ricezione, imposta una delle quattro uscite su un altro ingresso analogico, in base alle informazioni ricevute. Il programma legge, quindi, lo stato delle quattro uscite digitali, il canale analogico impostato e la sua tensione analogica. La tensione misurata viene convertita in un valore digitale a 10 bit. Il back-end passa alla modalità di trasmissione e alla fine trasmette tutti questi dati (in forma codificata) al front-end in una sola volta. Dopo aver ricevuto tutte le informazioni, il front-end decodifica i dati e li visualizza sul display LCD (vedi figura 5). Durante questo processo di comunicazione bidirezionale, il chip di trasmissione/ricezione nRF24L01 verifica continuamente la corretta trasmissione. In caso di errore, sul display viene visualizzato il messaggio corrispondente.
Modifiche del software
I due programmi, che possono essere scaricati dalla pagina del progetto [7], includono degli script di esempio per varie applicazioni. Nell'applicazione originale, i pulsanti UP, DOWN, LEFT e RIGHT attivano il rotore dell'antenna, impostando le uscite al livello logico basso. Per mostrare le opzioni possibili, vi sono tre diverse funzioni nell'elenco: SINISTRA come pulsante, DESTRA come interruttore, e SU e GIU' come pulsanti di opzione. Il pulsante SELEZIONA sceglie tra i quattro ingressi analogici disponibili. Il display LCD visualizza il numero dell'ingresso analogico e il relativo valore misurato. Il codice del programma prevede anche l'implementazione di un display per un voltmetro o un termometro (vedi figura 6). L'autore ha utilizzato un generatore di caratteri [8] per creare i simboli speciali. I due programmi sono commentati e risultano molto semplici. Si possono modificare per adattarli alle proprie esigenze. Tutte le linee di codice e le funzioni relative al modulo nRF24 dovrebbero essere modificate solo se si ha la giusta esperienza con questo modulo radio.
Realizzazione pratica
I circuiti e il layout del PCB sono stati creati con il programma EAGLE e possono essere visualizzati sulla pagina del progetto [6]. Le grosse tracce permettono d'incidere facilmente il PCB usando semplici attrezzature. Dopo la costruzione dei circuiti, occorre caricare entrambi i programmi di controllo con l'IDE di Arduino. I programmi usano le seguenti librerie:
- LiquidCrystal.h
- SPI.h
- nRF24L01.h
- RF24.h
Alcune di queste librerie potrebbero essere già installata nel proprio IDE Arduino, ma in caso contrario, è possibile installarle scaricando da [9] [10] [11] [12] e integrandole con l'ambiente di sviluppo, accedendo alla opportuna voce. L'uso di moduli pronti permette il montaggio di un trasmettitore o di un ricevitore su metà di un solo lato di una scheda Eurocard (10 × 16 cm) [13], a patto di usare qualche connessione volante o dei ponticelli
Listato per l'analisi del tasto premuto
Qui sotto è proposta la funzione per la determinazione del tasto premuto. Si veda lo schema elettrico di cui alla figura 7 per il cablaggio dei pulsanti.
void get_key_pushed() { message_to_RX = analogRead(A0)/10; // values from 0 to 102 delay(100); // key debounce if (message_to_RX<5){while(analogRead(A0)<5); message_to_RX = 2;} // Right if (message_to_RX> 5 && message_to_RX<20 ) message_to_RX = 3; // Up if (message_to_RX>20 && message_to_RX<35 ) message_to_RX = 4; // Down if (message_to_RX>35 && message_to_RX<55 ) message_to_RX = 1; // Left if (message_to_RX>55 && message_to_RX<85 ) message_to_RX = 5; // Select }
Controllo del rotore
L'unità di controllo del rotore G-5600 YAESU dispone di quattro pulsanti per il controllo: SU' e GIU' per elevazione, SINISTRA e DESTRA per l'azimut. Premendo un pulsante la rispettiva linea viene posta a massa. Le linee di controllo sono anche collegate, in parallelo, a una presa DIN a 8 poli, che si trova sul retro dell'unità. Inoltre, essa visualizza l'azimut e l'elevazione utilizzando due grandi strumenti a lancetta (vedi figura 8) . Le due tensioni analogiche sono generate dal motore del rotore stesso. Sono comprese nell'intervallo da 0 V a 4,5 V, che indica un'elevazione da 0° a 180° e un azimut da 0° a 450°. Anche le due tensioni analogiche possono essere prelevate sulla presa DIN, permettendo il completo controllo del dispositivo. E' possibile disporre in posizione nascosta la centralina, per usare cavi più corti.
>>>Leggi anche: Le comunicazioni wireless per l’industry 4.0
Web Links
[1] Arduino Nano: www.elektor.com/arduino-nano-3
[2] JOY-iT Nano: www.elektor.com/joy-it-nano-v3
[3] Radio module nRF24L01: www.elektor.com/nrf24l01-2-4-ghz-wireless-module-8-pin-150499-91
[4] nRF2401 with amplifier and LNA : www.elecfreaks.com/wiki/index.php?title=2.4G_Wireless_nRF24L01p_with_PA_and_LNA
[5] 1602 LCD Keypad Shield: www.dfrobot.com/product-51.html
[6] LCD Keypad Shield in detail: www.thomasclausen.net/en/walking-through-the-1602-lcd-keypad-shield-for-arduino/
[7] Project page: www.elektormagazine.com/180280-01
[8] LCD custom character generator: https://omerk.github.io/lcdchargen/
[9] LCD Library: https://playground.arduino.cc/Main/LiquidCrystal
[10] SPI Library: https://github.com/PaulStoffregen/SPI
[11] RF24 Library (1): www.arduinolibraries.info/libraries/rf24
[12] RF24 Library (2): https://github.com/maniacbug/RF24