Certamente
questo modulo permette
di raggiungere distanze molto maggiori di quelle che può raggiungere il
modulo a 2.4 GHz presentato
qui, non tanto per la
differenza di potenza
(questo eroga 1W e l'altro eroga 0.5 W) ma per la differenza di
frequenza di
lavoro; il presente modulo lavora in una banda di frequenza compresa
tra
410MHz a 441MHz che permette al segnale di attraversare gli
ostacoli con maggior facilità, per la minore attenuazione, rispetto al
modulo funzionante a 2.4 GHz, inoltre a frequenze più basse aumenta
l'apertura efficace dell'antenne. Le prove effettuate da me in campo
aperto hanno riportato distanze
superiori ai 7Km. La prova è stata eseguita in questo modo:
ho
posizionato un modulo RTX (che da ora in poi chiamerò fisso) sul
terrazzo di casa al mare collegato ad un dipolo di 1/2 con balun onda attaccato
ad un asta in PVC a 2 metri dal pavimento del terrazzo, il
modulo trasmetteva ogni secondo un dato (valore 1). L'atro modulo (che
chiamerò RTX mobile) l'ho posizionato in auto collegato ad uno stilo di
1/4 di onda con base magnetica attaccata al tettino della macchina, ogni secondo, alla
ricezione del dato, si illuminava un led indicandomi l'avvenuta
ricezione.
Poi mi sono spostato e sono arrivato nei pressi della
Ladispoli e il led ha iniziato a lampeggiare con frequenza diversa da 1
secondo indicandomi che il ricevitore stava perdendo il segnale. Nel
punto dove non si è più illuminato mi sono fermato e ho trascritto su
un foglietto il nome della strada dove mi trovavo. A casa, con Google
maps, ho calcolato il percorso ed il risultato è visualizzato nella
seguente figura:
Un
altro vantaggio di
questo modulo è la semplicità con la quale si trasmettono e si ricevono i dati, la
comunicazione tra la CPU ed il modulo è infatti seriale (come quella
usata da Arduino per collegarsi al serial monitor) e quindi facilmente
implementabile tramite le funzioni già conosciute e usate un po' da
tutti.
Il
modulo ha diversi modi di funzionamento, il più semplice è il
"Trasparent Mode" (quello che ho usato io) che viene impostato mettendo
a GND due pin nominati MO e M1, in questa modalità i parametri di
default sono:
FREQUENZA: 433MHz
INDIRIZZO: 00H
BIT DI PARITA': 8N1
BOUD RATE SERIALE: 9600
AIR DATA RATE: 2.4Kbps
POTENZA: 30dBm (1W)
In
questo modo di funzionamento l'utente ha solo bisogno di inviare e
ricevere al/dal modulo il dato (fino a 58 byte) tramite
seriale, molto semplice direi.
Gli
unici problemi che ho
riscontrato in questo modulo sono due; il primo è che il modulo è il
particolarmente sensibile al disadattamento dell'antenna, basta un SWR
di tre per farlo comportare in maniera strana quando l'antenna è
vicina a oggetti metallici; smette di trasmettere e
inficia di radio frequenza a 433 MHz i segnali digitali di Arduino
tanto da sprogrammarlo, si scalda tanto e assorbe molto di più
di quando è adattato tanto da scaricare la batteria in pochi minuti di trasmissione. Ho
cercato sia in rete che sul data sheet
informazioni a tal riguardo ma non ho trovato nulla per renderlo meno sensibile all'SWR. Per renderlo meno
suscettibile ai disadattamenti di antenna le soluzioni migliori sono,
usare un ampio piano di massa, non far passare fili che trasportano
segnali veloci sotto al modulo (ovvero sotto il lato opposto allo chassis
metallico), non disporre la scheda Arduino sotto il modulo, mettere
condensatori ceramici da 100n all'ingresso e all'uscita del regolatore
a 5V, usare i fili della seriale, che collegano Arduino con il
modulo, il più possibile corti e portarli con la propria massa accostati
l'un l'altro (piattina). Meglio in assoluto usare una buona antenna.
Il secondo problema è che la seriale del
modulo fornisce e accetta solo 3.3V (si rischia di bruciarlo
inviandogli tensioni maggiori) mentre Arduino fornice e
accetta 5V, per ovviare a questo fastidioso problema basta interporre
delle resistenze ed un diodo sulla linea seriale, vedremo dopo come si
fa.
Per
chi si preoccupasse di non riuscire a discriminare
i diversi moduli ricevitori collegati ad un unico trasmettitore per
il fatto che nel "Trasparent Mode" l'indirizzo è fisso e
quindi uguale per tutti, dico che è sempre possibile farlo
inviando dei dati univoci ai ricevitori, tramite una semplice "if" il
programma del ricevitore è i grado di capire se il dato in arrivo
è di
appartenenza al ricevitore in oggetto oppure no, se affermativo esegue
le operazioni riguardanti quel ricevitore se no si rimette in ascolto
senza fare nulla.
Per
fare ulteriori prove, nella maniera più comoda e pratica
possibile, ho messo l'elettronica in piccole scatoline porta
oggetti. Qui sotto la foto del RTX mobile:
Per
l'RTX fisso ho utilizzato una antenna di 1/4 di onda con calamita
attaccata alla base in modo di fissarla su qualsiasi superficie
metallica che funga da piano di massa (porte in ferro, frigorifero,
lavatrice...), tenete conto che la calamita è collegata elettricamente
alla calza del cavo in modo di dare continuità (direttamente se la
superfice metallica non è isolata o tramite accoppiamento capacitivo se
il metallo è verniciato) tra la calza del cavo e il piano di massa, ad
esempio, nella foto, che segue l'ho attaccata sul trapano a colonna e
nella successiva su un pannello in ferro:
Sotto la foto del RTX fisso ancora non montato nella scatoletta ma collegato all'antenna suddetta:
Sotto ancora l'RTX fisso nella scatoletta cablato ma ancora non verniciato e successivamente l'antenna completata:
Dopo
le prove di collegamento a distanza per rendere il sistema più utile ho
dotato l'RTX fisso di pulsante, led e buzzer e l'RTX mobile di led e
buzzer. Quando si preme il pulsante l'RTX fisso (fintanto che non si
preme il pulsante l'RTX fisso è in ascolto e in attesa
della
pressione del tasto in void loop, quindi continuamente in RX)
commuta in TX e invia il dato (sempre di valore 1) al mobile e
subito dopo si rimette in ascolto in attesa di eventuali messaggi in
arrivo, l'RTX mobile ricevuto il dato e
assicuratosi che è di valore 1, trasmette (commuta in TX) un dato di
valore 1, subito dopo illumina il led e fa suonare il buzzer
per 500mS. Finito questo ciclo torna in ascolto (commuta in RX). L'RTX
fisso ricevuta la risposta controlla se il dato ricevuto è di valore 1
e se affermativo illumina il suo led e fa suonare il suo buzzer per
500mS e il ciclo si ripete premendo di nuovo il pulsante.
PROGRAMMA RTX FISSO
#include <SoftwareSerial.h>
SoftwareSerial loraSerial(3, 2);
int input;
void setup()
{
pinMode(6, INPUT_PULLUP);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
loraSerial.begin(9600);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
loraSerial.write(1);
}
void loop()
{
if(digitalRead(6) == 0)
{
loraSerial.write(1);
while(digitalRead(6) == 0);
delay(300);
}
if(loraSerial.available() > 1)
{
input = loraSerial.read();
if(input == 1)
{
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(100);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
loraSerial.flush();
}
}
#include <SoftwareSerial.h>Include la libreria
SoftwareSerial.h
SoftwareSerial loraSerial(3, 2);
Crea l'oggetto "lora" (potete mettere qualsiasi nome a vostro piacimento per l'oggetto).
Il
primo numero nella parentesi (3) indica il pin di Arduino che riceverà
i dati seriali (dal modulo), mentre il secondo numero (2) indica il
pin di Arduino che trasmetterà i dati seriali (verso il modulo)
int input;
Crea una variabile "input" di tipo intero
pinMode(6, INPUT_PULLUP);pinMode(4, OUTPUT);pinMode(5, OUTPUT);Imposta il pin 6 di Arduino come ingresso con pullup (pulsante)
Imposta il pin 4 di Arduino come uscita (led)
Imposta il pin 5 di Arduino come uscita (buzzer)
loraSerial.begin(9600);Imposta la comunicazione seriale a 9600 boud
digitalWrite(4, HIGH); digitalWrite(5, HIGH);delay(500); digitalWrite(4, LOW); digitalWrite(5, LOW); Sequenza per accendere e far suonare il buzzer per 500 mS
loraSerial.write(1);Invia
il primo dato (valore 1) al ricevitore. Se quest'ultimo è acceso suona
il suo buzzer e si illumina il suo led. E' un semplice controllo di funzionamento del
sistema all'accensione.
if(digitalRead(6) == 0) { loraSerial.write(1); while(digitalRead(6) == 0); delay(300); } Se
il pulsante viene premuto l'RTX fisso invia il dato di valore 1 tramite la funzione
loraSerial.write(1);.
Con
while(digitalRead(6) == 0); il programma
attende che il pulsante sia rilasciato.
Al
rilascio del pulsante il programma attende ancora 300 mS per proseguire
(questo tempo ha la funzione di anti rimbalzo del pulsante).
if(loraSerial.available() > 1) { input = loraSerial.read(); if(input == 1) { digitalWrite(4, HIGH); digitalWrite(5, HIGH); delay(100); digitalWrite(4, LOW); digitalWrite(5, LOW); } loraSerial.flush(); }Se è disponibile un dato (spedito in risposta dall'RTX mobile) viene eseguito il corpo della "if". L'istruzione
input = loraSerial.read(); salva nella variabile "input" il valore letto.
La
"if" successiva confronta il valore contenuto nella variabile "input",
se è 1 esegue il suo corpo dove ci sono le istruzioni per fare
illuminare il led e suonare il buzzer per 100 mS.
La funzione
loraSerial.flush(); serve per svuotare il buffer della ricezione (è opzionale).
PROGRAMMA RTX MOBILE
#include <SoftwareSerial.h>
SoftwareSerial loraSerial(3, 2);
int input;
void setup()
{
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
loraSerial.begin(9600);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
void loop()
{
if(loraSerial.available() > 1)
{
input = loraSerial.read();
if(input == 1)
{
loraSerial.write(1);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(4, LOW);
digitalWrite(5,
LOW);
}
loraSerial.flush();
}
}
Il programma dell'RTX MOBILE è simile a quello dell'RTX FISSO con le seguenti differenze:
non spedisce il dato all'accensione
non ha la parte delle istruzioni relative alla gestione del pulsante
il tempo ON del led e del buzzer dura un po' di più (500mS).
COLLEGAMENTI
NOTE SUL CABLAGGIO
Come
avevo anticipato all'inizio il modulo è molto sensibile al
disadattamente dell'antenna, quando l'SWR si avvicina a 3 il modulo
inizia a dare segni di
sofferenza e in certe situazioni può sprogrammare arduino o scaricare la
batteria in tempi record. Dato che, soprattutto per il mobile che si
tiene in mano, l'influenza degli oggetti vicini all'antenna
possono aumentare ulteriormente l'SWR conviene curare il cablaggio per rendere
meno suscettibile l'TRX all'SWR. Dopo diversi tentativi sono riuscito a
stilare una serie di accortezze da tenere in conto per la realizzazione del
ricetrasmettitore.
1)
La massa deve partire dalla batteria e collegare in ordine, il
regolatore 7805, il modulo e infine Arduino con un filo con diametro di
almeno 0.5 mm (non usare filo wire-rap).
2) I condensatori devono stare il più possibile vicino al regolatore, all'ingresso VIN di Arduino e all'ingresso VCC del modulo.
3)
le linee seriali devono collegare Arduino al modulo in piattina (non
mostrate nel disegno) ognuna con la propria massa che deve anche essere
collegata ai terminali M0 e M1 (non collegarla al terminale GND del
modulo).
4) Non fate correre i fili della seriale sotto il modulo.
5) Sull'RTX mobile la scheda di rame deve essere collegata solo al connettore sma dell'antenna.
6)
Dal terminate del deviatore debbono partire due fili (sempre di 0.5 mm
di diametro) uno per alimentare l'ingresso del regolatore,
l'altro per alimentare l'ingresso VIN di Arduino come rappresentato in
figura.
NOTE SULLE RESISTENZE E SUL DIODO
Le
linee di Arduino lavorano a 5V mentre quelle del modulo a 3.3V. Occorre
inserire dei componenti passivi per poter adattare il modulo con
Arduino. Sul pin 2 di Arduino esce il segnale seriale per inviare i
dati al pin RX del modulo, nella seguente figura è rappresentato lo
schema a blocchi:
Quando
il segnale seriale è a 5V dopo il partitore va a 3.3V, la
resistenza R di pullup interna al modulo è anch'essa collegata ai 3.3V
per cui è come se non ci fosse. Il diodo non ha effetto dato che è
inversamente
polarizzato quando il segnale seriale è alto.
Quando il segnale
seriale va basso si crea una partizione della 3.3V tra la resistenza R
interna al modulo e il parallelo della serie delle resistenze con
quella da 1K collegata al pin 2 di Arduino. Il risultato è che il
livello del segnale della seriale non va a zero ma si ferma a circa 1V
(linea rossa). Questo livello potrebbe essere eccessivo per essere
interpretato dal modulo come zero. Inserendo il diodo come in figura il
livello scende a 0.7V che è un livello molto vicino allo zero volt.
Nella seguente figura è rappresentato lo schema a blocchi relativo alla ricezione del dato da parte di Arduino:
Questa
volta i dati vengono inviati dal modulo ad Arduino, questi dati hanno
un livello di 3.3V e devono essere adattati al livello che accetta
Arduino ovvero 5V. Per ottenere questa traslazione basta una resistenza
di pullup esterna collegata ai 5V di Arduino. Più è bassa questa
resistenza e più il livello si avvicina ai 5V, un valore di 4K7 va bene
dato che lo fa arrivare a 4.9V.
ANTENNECome le casse acustiche sono il cuore degli amplificatori audio l'antenna lo è per i ricetrasmettitori.
Nel
complesso ho utilizzato più tempo a trovare un'antenna adatta per i due
moduli che a costruire l'insieme del sistema. Ho iniziato a
effettuare misurazioni per ottenere sia l'impedenza che l'S.W.R.
dell'antenna che avrei usato per l'RTX mobile.
Prima di fare misure
sulle antenne occorre isolare per la RF tutte le parti metalliche dello
strumento di misura (compreso il tratto di cavo coassiale collegato
all'antenna) facili "preda" delle linee di forza dei campi elettrici
generati dall'antenna, occorre quindi inserire un balun il più vicino
possibile al connettore dell'antenna in prova. Nella figura è
raffigurata la misura, tramite NanoVna, effettuata sul cavo per
determinare l'impedenza presentata dalla sua calza avvolta su un
tubetto di ferrite (di quelli che si trovano inseriti sui cavi RS232 o
su quelli delle vecchie scarter):
Con
sole tre spire il cavo ha presentato una impedenza di 158 + j 282 ohm (senza ferrite la impedenza era 50 + j 30 ohm),
non elevatissima ma sufficiente per isolare il cavo e il NanoVna
dall'antenna sotto misurazione.
La
seguente figura rappresenta la misura effettuata su antenna stilo
commerciale per 433 MHz e piano di massa limitato al solo modulo (ne
avevo uno guasto e l'ho usato per fare questa misurazione).
Con questa antenna e il modesto piano di massa offerto dal modulo ho misurato un S.W.R di 4.54, molto alto. Vedi foto sotto:
Allora
ho tagliato una basetta di rame grande come la scatoletta che avrebbe
dovuto contenente il modulo e l'elettronica e ho rieseguito le
misure, vedi foto sotto:
L'S.W.R si è abbassato 2.91, migliorato ma non di tantissimo, vedi foto sotto.
Non
soddisfatto del risultato ho sfilato il cappuccio dello stilo e al
posto della sua antenna ho messo un filo di rame lungo un po' più che
1/4 d'onda. Poi l'ho tagliato, tenendo sott'occhio in NanoVna, fino ad
ottenere un S.W.R. buono, ora è pari a 1.05. Vedi foto sotto:
Qui sotto la lettura:
Per l'RTX fisso ho pensato ad una antenna lunga 1/4 d'onda con piano di massa esteso. Il
piano di massa potrebbe essere la superficie di un frigo, di una
lavatrice, di una porta metallica e così via. Qui sotto è
raffiguratale l'antenna montata su un pannello con lunghezza dei lati maggiore di 1/4
d'onda e la piccola calamita:
Qui sotto ancora l'S.W.R. e il diagramma di smith, l'antenna è molto stabile anche toccando la piastra metallica:
S.W.R. 1.1 e impedenza quasi 50 ohm.
MISURE CON ANALIZZZATORE DI SPETTRO TINYSAPer
concludere lo studio di questo fantastico modulo ho voluto effettuare
misure di campo elettrico a distanza, tramite TinySa, emesso da tutte le antenne
analizzate. Le antenne sono state sistemate tutte alla stessa
altezza e sostituendole di volta in volta ho misurato il campo ad
una distanza di 10 metri. Qui sotto i risultati e le foto delle misure:
Antenna a stilo commerciale, -23.9 dBm:
Antenna a stilo fatta da me, -22.4 dBm:
Antenna 1/4 d'onda su pannello metallico di ampia superficie, -20.4 dBm:
Come potevamo aspetarci la migliore è l'ultima.
SoftwareCiao
Fabio