Radiocomando Long-Range: il trasmettitore palmare LoRa

Trasmettitore palmare da abbinare allo shield LoRa per Arduino per realizzare comandi via radio long-range.

Tra le tecnologie per la trasmissione via radio a grande distanza ma con basso consumo energetico, una su cui abbiamo focalizzato la nostra attenzione รจ quella chiamata LoRa (Long Range) proposta dalla Semtech con un prodotto basato su di essa.

In questo articolo, oltre a descrivere il trasmettitore per radiocomando LoRa, richiamiamo un poโ€™ di concetti della trasmissione โ€œSpread Spectrumโ€ ed in particolare della tecnica LoRa.

Infatti il trasmettitore che abbiamo realizzato, meglio descritto dallo schema elettrico, รจ pensato per integrarsi con lo shield LoRa per Arduino e utilizza le stesse caratteristiche di trasmissione; lo shield diventa lโ€™unitร  ricevente.

LoRa (Long Range) รจ una tecnologia candidata alla realizzazione dellโ€™IoT (Internet of Things, ossia Internet delle cose), laddove link radio esistenti come WiFi e Bluetooth risultano inadeguati.

Infatti per portare la comunicazione di dati a livello di mini/micro apparati a bassissimo consumo (per esempio autoalimentati con batterie o pannelli solari) รจ necessario utilizzare tecniche di trasmissioni radio diverse dal WiFi (che consuma molto) o dal Bluetooth (che ha una portata ridotta).

Le soluzioni long-range ad oggi proposte sono due:
โ€ข Ultra Narrow Band (UNB), ovvero trasmissione su banda strettissima in cui si puรฒ concentrare la piccola potenza del trasmettitore (SigFox);
โ€ข Wide Band con lo Spread Spectrum, ossia trasmissione dove lโ€™informazione รจ sparpagliata su unโ€™ampia banda di frequenze mediante appositi algoritmi; cosรฌ i dati possono essere ricostruiti anche se il segnale รจ bassissimo e addirittura sotto la soglia del rumore. Proposta LoRa.

In ambedue i casi il prezzo da pagare รจ la bassa velocitร  di trasmissione (qualche centinaio di bps ovvero decine di byte per secondo). Ma questa limitazione non ha molta importanza, visto che di norma per le applicazioni IoT come i sensori intelligenti occorre lo scambio di pochi dati periodici tra gli apparati periferici ed un centro di raccolta ed instradamento su rete Internet.

Quello che importa รจ che si possano contattare numerosi mini/micro apparati periferici sparpagliati su qualche chilometro di raggio; e che questi apparati siano a bassissimo consumo.

Schema elettrico del trasmettitore LoRa

Spread Spectrum e LoRa

Fig. 1 Modulazione dei singoli bit nella DSSS.

 

Distribuire il segnale dati su una banda larga della portante si puรฒ fare in due modi:
a) facendo saltare una portante su diversi canali adiacenti con un algoritmo prestabilito; cioรจ attuando il cosiddetto Frequency Hopping (FH);
b) facendo corrispondere ad ogni bit dei dati una stringa di molti bit modulanti in base ad uno schema prestabilito (per esempio pseudo-random); il ricevitore poi ricostruirร  i singoli bit applicando il processo inverso.

รˆ possibile applicare contemporaneamente le due tecniche, come รจ possibile farlo anche in LoRa. Ma in realtร  LoRa utilizza sostanzialmente la tecnica descritta al punto b.

Questa tecnica puรฒ essere implementata con una sovra-modulazione digitale, come nel caso della DSSS (Direct Sequence Spread Spectrum), oppure con altri metodi come quelli utilizzati in LoRa.

Per semplificare lโ€™hardware soprattutto in ricezione, LoRa non utilizza la DSSS ma una sequenza di โ€œchirpโ€; ovvero una oscillazione la cui frequenza varia linearmente nel tempo (Fig. 2).

Fig. 2 Modulazione LoRa.

 

Questo permette di sincronizzare piรน semplicemente il ricevitore con il trasmettitore, al contrario di quanto รจ nella DSSS, che necessita invece di timer precisi.

I byte di dati vengono suddivisi in nibble (4 bit) a cui sono aggiunti 1 o 2 o 3 o 4 bit per il controllo di paritร . Il parametro che definisce la robustezza della trasmissione รจ CR, che infatti puรฒ avere valore da 1 a 4.

Per cui se CR=4, vuol dire che la lunghezza dei dati del payload (dati da trasmettere) viene raddoppiata ma la sicurezza di integritร  รจ molto alta. Nellโ€™unitร  di tempo, dal modulatore, vengono prodotti tanti chip (unitร  di modulazione) quanti sono gli Hertz della larghezza di banda (BW) (dato di progetto di LoRa). Quindi il rateo dei chip รจ proprio Rc=BW. Ma su ogni chip possono essere modulati 2SF valori (simboli), dove SF รจ il parametro che definisce lo โ€œspread factorโ€ che puรฒ avere valori da 6 a 12.

Quindi il rateo dei simboli รจ Rs=Rc/2SF. Poichรฉ 2SF valori sono rappresentati da SF bit, possiamo dire che il rateo dei bit (bps) รจ Rb=SF * Rs. Ma non abbiamo considerato la maggiorazione dei bit dovuta alla ridondanza per il controllo di paritร  definito dal parametro CR. Questo produce un surplus pari alla frazione (4+CR)/4 dei bit da trasmettere. Quindi, in definitiva il rateo della trasmissione come bit per secondo (bps) รจ legato ai parametri BW, SF e CR dalla seguente formula:

 

Quindi la frequenza di bit al secondo รจ direttamente proporzionale alla BW ed in relazione inversa allo SF (Rb โˆ 1/2(SF-1)).

Oltre al rateo bps cโ€™รจ da considerare la sensibilitร  della ricezione che invece รจ in relazione diretta con SF mentre invece cala allโ€™aumentare della BW.

Quindi la massima sensibilitร  si ottiene con il massimo SF e la minima BW. Ma in questo caso si ha anche un bps troppo basso, per cui รจ il caso di trovare un compromesso utilizzando una BW piรน grande per aumentare il bit rate, soprattutto se ci sono dei vincoli di velocitร  di trasmissione da rispettare.

In Tabella 1 sono calcolati i valori bps per le diverse BW e i diversi SF nellโ€™ipotesi di utilizzare la massima ridondanza (CR=4). Mentre in Tabella 2 sono mostrate le sensibilitร  di ricezione stimate.

In sostanza i valori dei parametri piรน utili nelle situazioni tipiche sono: SF = 11/12 e BW = da 4 a 9. Corrispondenti a valori da 46 bps con -144 dBm di sensibilitร  a 1.343 bps con -129 dBm di sensibilitร .

Nel caso di bit-rate piuttosto bassi (<1.000 bps) , รจ necessario aggiornare un registro del modulo abilitando il flag che ottimizza la ricezione lenta.

Si tratta del bit 3 del registro 0x26 (che va posto ad 1); puรฒ essere fatto utilizzando la funzione di libreria โ€œSX.setLoraLowDataRateOptimize (boolean on)โ€; ma questo viene fatto automaticamente dalla libreria allโ€™inizializzazione.

 

Tabella 1 Bit per secondo (bps) con RC=4.

 

Tabella 2 Sensibilitร  espressa in dBm.

 

Il radiocomando LoRa

In questo post ci concentreremo sullโ€™utilizzo nellโ€™ambito del protocollo LoRa. Per LoRa รจ stato studiato, da parte della โ€œLoRa Allianceโ€, anche un complesso protocollo di rete chiamato LoRaWAN.

Lโ€™associazione si assume anche il compito di certificare i prodotti compatibili con questo protocollo.

Poichรฉ le caratteristiche di LoRaWAN sono complesse e non si sposano bene con una attivitร  hobbistica o anche semi artigianale, si รจ pensato di fornire una libreria per lโ€™uso del modulo radio e per lโ€™implementazione di una comunicazione LoRa bidirezionale e multi-punto.

Si รจ lasciato cosรฌ allโ€™utente il compito di costruire la propria rete secondo le sue necessitร , senza le rigiditร  legate ad un protocollo industriale certificato.

Con la libreria รจ possibile gestire facilmente due stazioni che si parlano, oppure un centro di raccolta e una moltitudine di sensori sparsi, o altri tipi di strutture di rete piรน complicate. La libreria รจ stata aggiornata (versione 1.2) aggiungendo qualche ulteriore funzione (vedere il file ReleaseNote).

La libreria puรฒ essere utilizzata con funzioni base senza nessun indirizzamento, spedendo via etere un payload giusto per verificare la copertura. Un esempio lo troviamo negli sketch โ€œLoRaTxEchoโ€ e โ€œLoRaRxEchoโ€ presenti negli esempi allegati. In questo caso vediamo le funzioni fondamentali:
โ€ข inclusione della libreria #include <LoRa.h>
โ€ข istanza della classe LORA LR;
โ€ข inizializzazione LR.begin();
โ€ข setting dei parametri principali LR.setConfig(SF,BW,CR); //tipicamente 12,7,4;
โ€ข spedisce messaggio LR.sendMess(tbuffer);
โ€ข si pone in ricezione LR.receiveMessMode();
โ€ข riceve messaggio (loop n volte) if (LR.dataRead(rbuffer,maxlength) >0 ) break;

Ma la libreria รจ organizzata con funzioni piรน sofisticate cosรฌ da definire ed utilizzare indirizzi di apparati. In particolare รจ possibile definire un indirizzo di un apparato nellโ€™ambito di una rete identificata da un indirizzo complessivo. Ovvero รจ possibile utilizzare un indirizzamento del tipo:

Indirizzo di rete โ€“ Indirizzo locale (di device)

La dimensione di indirizzamento della rete รจ legata alla dimensione dellโ€™indirizzamento locale. Infatti lโ€™indirizzo complessivo definito dalla libreria รจ sempre basato su 16 bit (unsigned integer per Arduino). Per cui se per esempio si decide di avere uno spazio indirizzabile di 28 =256 device, per la rete rimangono 2(16-8=16)=256 possibili valori.

In realtร  la dimensione dellโ€™indirizzo locale รจ minore di una unitร , perchรฉ lโ€™indirizzo 0 identifica una trasmissione broadcast (cioรจ a tutti i locali). Per definire questa suddivisione si utilizza la funzione:

LR.defDevRange(cod);

dove โ€œcodโ€ รจ uguale allโ€™esponente di 2; per esempio 3 per il range 1-7.

La funzione ritorna il numero massimo di indirizzo di rete per un eventuale controllo.
Ecco alcuni esempi:
Codice 3 : Indirizzo locale 1-7
indirizzi di rete da 0 a 8191;
Codice 4 : Indirizzo locale 1-15
indirizzi di rete da 0 a 4095;
Codice 5 : Indirizzo locale 1-31
indirizzi di rete da 0 a 2047;
Codice 6 : Indirizzo locale 1-63
indirizzi di rete da 0 a 1023;
Codice 7 : Indirizzo locale 1-127 ๏ƒ indirizzi di rete da 0 a 511;
Codice 13 : Indirizzo locale 1-8191
indirizzi di rete da 0 a 7.

A questo punto non rimane che decidere lโ€™indirizzo della rete che deve essere compreso entro il limite stabilito dalla precedente suddivisione.
Questo puรฒ essere fatto dalla funzione:

LR.defNetAddress(addr);

Ritorna errore se โ€œaddrโ€ non รจ dentro i limiti.

Poichรฉ le portate radio sono consistenti รจ necessario proteggere le informazioni; non a caso il protocollo LoRaWAN prevede una crittografia AES128.

Anche la libreria da noi proposta implementa una crittografia AES (ma AES256).

รˆ quindi necessario stabilire una identica chiave tra gli apparati.
Questo puรฒ essere fatto tramite la stessa funzione di inizializzazione, passandogli un intero come chiave:

LR.begin(key);

Poichรฉ la chiave AES รจ formata da 32 Byte, in realtร  il numero โ€œkeyโ€ serve come โ€œsemeโ€ per inizializzare il generatore di numeri random; la funzione stessa si occupa poi di generare la chiave di 32 Byte. In questo modo รจ possibile scambiare un semplice numero come chiave di comunicazione.

Ciรฒ si mantiene vero solo nel caso che si usi il compilatore di Arduino per tutti i device. Infatti a partire dal โ€œsemeโ€ la routine del compilatore produrrร  la stessa sequenza pseudo-randomica in tutti i device Arduino.

Le funzioni principali da utilizzare in una rete LoRa proprietaria possono allora essere elencate cosรฌ:
โ€ข inclusione della libreria:
#include <LoRa.h>
โ€ข istanza della classe:
LORA LR;
โ€ข inizializzazione:
LR.begin(key);
โ€ข setting dei parametri principali:
LR.setConfig(SF,BW,CR);
//tipicamente 12,7,4
โ€ข definisce il range di ind. locale:
LR.defDevRange(cod);
โ€ข definisce lโ€™indirizzo di rete:
LR.defNetAddress(address);
โ€ข spedisce il messaggio:
LR.sendNetMess(destinatario locale, mittente locale, mess, lung);
โ€ข si pone in ricezione:
LR.receiveMessMode();
โ€ข riceve messaggio
(loop n volte):
if (LR.receiveNetMess(dest. locale,mitt. locale, buffer, maxlung)>0) break;
โ€ข estrae e decodifica il testo:
LR.getMessage();
โ€ข estrae e dec. lโ€™indirizzo mittente:
LR.getSender();

La funzione di ricezione torna 0 se non sono arrivati messaggi o non sono arrivati messaggi inviati al destinatario. Inoltre ritorna -1 se il messaggio non รจ stato spedito dal mittente indicato. Se nel messaggio il destinatario ha valore 0 il messaggio รจ sempre accettato (broadcasting). Se il parametro mittente della funzione ha valore 0, vengono accettati i messaggi a prescindere dal mittente.

Negli esempi inclusi nella libreria potete trovare due sketch โ€œLoraTxAddressingโ€ e โ€œLoraRxAddressingโ€ che realizzano un server che dialoga con diversi moduli periferici.
Tenete comunque presente che la gestione diretta dei registri dello SX1278 puรฒ sempre essere fatta dalle funzioni base della classe SX della libreria.

Il telecomando LoRa e la libreria per Arduino

Come vedremo in dettaglio piรน avanti, il telecomando usa lo stesso modulo LoRa degli shield. Quindi le stesse funzioni si applicano allo sketch che agisce sul telecomando.

Il quale telecomando contiene un Arduino compatibile come processore e velocitร  di clock con la versione โ€œLilyPad con USBโ€. Il telecomando, perรฒ, invia un messaggio sempre uguale alla pressione del tasto. Ne risulta una trasmissione sempre identica (anche se criptata).

Chiunque, se dotato di opportuna apparecchiatura, potrebbe registrare e ripetere la trasmissione senza bisogno di decodificarla. รˆ il problema di tutti i telecomandi attuatori.

Problema che si cerca di risolvere, per esempio, rendendo la trasmissione sempre diversa con la tecnica del โ€œrolling codeโ€. Per risolvere questo problema nella libreria รจ stato predisposto un โ€œmarkerโ€, ovvero un byte con valore casuale. Il marker di un messaggio ricevuto, puรฒ essere letto e confrontato con gli ultimi marker arrivati. Nel caso fosse presente in questa lista, il messaggio sarebbe rigettato come sospetto.

La grandezza della lista sarร  decisa a piacere. Non troppo lunga per non avere troppe probabilitร  di trovare un marker giร  utilizzato.

Nรฉ troppo corta per avere un controllo su un sufficiente numero di trasmissioni giร  effettuate. Come vedremo piรน avanti, il telecomando si accende ogni qual volta viene pigiato il pulsante di comando.

In questa situazione non possiamo usare il generatore random di Arduino che sarebbe inizializzato ogni volta allo stesso valore.

Per avere un valore random ad ogni accensione, dobbiamo ricorrere al rumore elettronico. Infatti possiamo leggere il valore di una o piรน porte analogiche di Arduino, non utilizzate e lasciate ad alta impedenza. Questo valore puรฒ essere usato come โ€œsemeโ€ per inizializzare il generatore random (o meglio pseudo-random).

Per leggere il marker si usa la funzione:

LR.getMarker();

Si tenga presente che il messaggio risulta crittografato nel suo complesso, eccetto il destinatario. Quindi, anche a causa della modalitร  operativa della crittografia AES, il contenuto, compreso il marker, si trova distribuito come rumore su tutta la lunghezza del messaggio, rendendo la sicurezza molto efficace.

Test di portata radio

In rete sono diffusi dati di portata radio, alcuni un poโ€™ esagerati ed altri piรน realistici.

Molto dipende dal terreno, piรน o meno edificato, o piรน o meno accidentato, o dalla posizione e dalla bontร  dellโ€™antenna.
In ogni caso si tratta realisticamente di alcuni chilometri in cittร  e di una o piรน decine in campo aperto.

In ogni caso i dati fanno riferimento alle condizioni LoRaWAN dove le trasmissioni avvengono a 868 MHz. Abbiamo, allora, voluto fare qualche misura effettiva per riportare qualche dato reale con il nostro modulo a 433 MHz e con antenna a ยผ dโ€™onda.

Le misure sono state effettuate con lo shield LoRa per Arduino che ha lโ€™antenna su connettore SMA. Per il telecomando, che ha lโ€™antenna a filo interna, ovviamente le portate sono inferiori. In ogni caso non ha problemi a superare quattro solai e raggiungere un parcheggio interrato.

Tornando allo shield con antennina, abbiamo effettuato due serie di prove: una con il trasmettitore collocato allโ€™interno dellโ€™abitazione ed una con il trasmettitore posizionato allโ€™esterno, sulla terrazza condominiale.

I dati di trasmissione sono i seguenti: SF=12, BW=5, potenza 10 dBm e 20 dBm. Lโ€™altro shield ricevitore era allโ€™interno di una automobile.
Come si puรฒ vedere dalla Fig. 3, con lo shield allโ€™interno della abitazione la portata รจ asimmetrica perchรฉ la portata maggiore รจ in direzione della finestra dietro la quale si trova il trasmettitore. In ogni caso si raggiungono portate dellโ€™ordine del chilometro.

Fig. 3 Portata radio con trasmettitore interno allโ€™appartamento (linea piรน chiara: 10 dBm; linea esterna: 20 dBm).

 

Nella Fig.4, la portata risulta non solo simmetrica ma anche molto maggiore, attestandosi su alcuni chilometri.

Queste prove sono state effettuate, come detto, utilizzando una antennina da ยผ di onda; potendo contare su unโ€™antenna piรน efficiente, per esempio a lunghezza intera da 70 cm, e ponendola in posizione alta e libera, si presuppone che si possano raggiungere alcuni chilometri in cittร  e alcune decine in aperta campagna. Le misure riportate vanno intese come approssimative anche se pur sempre reali.

Fig. 4 Portata radio con trasmettitore sulla sommitร  dellโ€™edificio (10dBM e 20dBm).

Il telecomando LoRa

Il telecomando LoRa comprende sia il microprocessore Arduino che il modulo radio.

Il tutto รจ stato miniaturizzato per essere inseribile nel โ€œcaseโ€ di un classico telecomando tascabile/portachiavi.

A causa delle dimensioni e per uniformare le tensioni (infatti lo SX1278 funziona a 3,3 V), รจ stato scelto il processore Atmega32u4 con quarzo a 8 MHz, lo stesso della scheda LilyPad con USB. Il quarzo da 8 MHz al posto di quello a 16 MHz di Arduino standard, รจ necessario a causa dellโ€™alimentazione ridotta a 3,3V. In ogni caso, poichรฉ รจ la stessa configurazione di LilyPad con USB, รจ possibile (e necessario) selezionare questa piattaforma dallโ€™elenco dellโ€™IDE di programmazione.

Ovviamente, come sapranno giร  gli affezionati programmatori di Arduino, la programmazione ha sempre le stesse caratteristiche di quella destinata ad โ€œArduino Unoโ€, in quanto รจ lโ€™IDE che si preoccupa di tenere conto della diversa velocitร  di clock in fase di compilazione. Per la programmazione รจ stata prevista sul telecomando una presa micro USB.
In Fig. 5 รจ descritto lo schema a blocchi.

Come si puรฒ notare, il trasmettitore viene alimentato dalla pressione del pulsante di comando; questo significa che il processore deve essere veloce nellโ€™intervenire sullโ€™interruttore elettronico, in modo da mantenere lโ€™alimentazione al rilascio del pulsante. Infatti questa รจ la prima cosa che fa, senza problemi visti i tempi di intervento umano che hanno durate di alcune decine di millisecondi.

Il processore utilizza il pin D6 per portare a massa il gate del POWERMOS Q1 (a canale P) tramite il transistor T1.

Il transistor T1 agisce in parallelo al pulsante e quindi mantiene in conduzione il POWERMOS Q1 anche quando il pulsante viene rilasciato.

Una volta che ha provveduto a mantenere lโ€™alimentazione, il processore inizializza il modulo radio con le caratteristiche LoRa definite dallo sketch e con lโ€™indirizzo di rete e quelli locali. Inoltre inizializza il generatore di numeri pseudo-random, del compilatore C di Arduino, con un paio di valori letti dai pin analogici non utilizzati (A0 e A1) e moltiplicati fra loro. In questo modo utilizza un rumore elettronico variabile ad ogni accensione.

Questโ€™attivitร  รจ necessaria per produrre un marker casuale del messaggio. A questo punto spedisce il messaggio con il pattern stabilito ed attende la risposta. Quando riceve una risposta positiva, segnala lโ€™avvenuta esecuzione con un codice bip convenuto, tramite il cicalino.

Altrimenti dopo una certa attesa (qualche secondo), oppure dopo aver ricevuto una risposta negativa segnala con un diverso codice di bip. Quindi si spegne, ovvero pone basso il pin D6. Nel Listato 1 รจ mostrato lo sketch preparato come esempio per il telecomando LoRa.

Fig. 5 Schema a blocchi del telecomando LoRa.

 

In questo modo il processore ed il modulo radio sono alimentati solo per pochi secondi (con un consumo medio di circa 20 mA durante lโ€™attivitร ). Una semplice batteria del tipo A23 puรฒ quindi farlo funzionare per parecchio tempo.

Il server che riceve e gestisce il comando puรฒ essere implementato come riportato nello sketch di esempio presente nella libreria. Sostanzialmente non deve far altro che mettersi in ascolto della trasmissione da parte del telecomando, verificare il pattern concordato e verificare che il marker non sia presente nella lista di quelli giร  arrivati.

Nel caso sia un duplicato, scarta il messaggio e risponde negativamente. Nel caso, invece, sia originale, lo inserisce in una posizione casuale della lista e manda la conferma dopo aver eseguito lโ€™azione. Lโ€™inserimento del marker nella lista in una posizione casuale, sovrascrivendo quello eventualmente presente, serve a evitare una qualunque periodicitร .

Naturalmente รจ sempre presente la possibilitร  di ricevere un messaggio con un marker nella lista anche se originale. Ma poichรฉ la trasmissione รจ bidirezionale, il server avverte della mancata attivazione e si puรฒ semplicemente ripetere il comando.

Listato 1

LORA LR; //Istanza della classe (per gli altri parametri globali utilizzati vedere il codice completo)

void setup() {
  pinMode(pinon, OUTPUT); // attiva il MOS per mantenere lโ€™alimentazione 
  digitalWrite(pinon, 1);
  digitalWrite(pinf, 1); // predispone il cicalino 
  digitalWrite(psound, 1);

  if (!LR.begin(KEY)) {
    sketchend(1);
    return;
  } // inizializza il modulo radio e la chiave crittografica

  LR.defDevRange(RANGECODE); // inizializza i parametri di rete e di trasmissione
  LR.defNetAddress(NETADD);
  LR.setFrequency(FREQ);
  LR.setPower(PWR);
  LR.setConfig(SF, BW, CR);

  int seed = analogRead(0) * analogRead(1); // inizializza il generatore random con il rumore elettr.
  randomSeed(seed);

  sendCommand(); // spedisce il comando
  if (!getCommandReply()) {
    sketchend(2);
    return;
  } // se la risposta รจ OK avvisa con un segnale di beep
  // altrimenti avvisa con un diverso segnale di beep
  sketchend(0); // si auto spegne
}

void loop() // non utilizzata
{}

La rete LoraWAN

Da un paio di anni esiste un consorzio di nome LoRa Alliance, che riunisce gli operatori (tra cui IBM) che producono o usano la tecnologia LoRa per IoT brevettata da Semtech.

Lo scopo del consorzio รจ definire e aggiornare un protocollo di rete per gli scopi dellโ€™IoT. Inoltre ha il compito di certificare i prodotti che usano questo protocollo, che si chiama LoRaWAN.

Da un punto di vista elettrico (strato fisico di un modello teorico ISO/OSI), la trasmissione avviene sulla banda degli 868MHz (in Europa), potendo contare su 10 canali, con spread factor SF da 7 a 12, con band width BW di 125 o 250 kHz e con potenze di 14 dBm.

La struttura della rete รจ stellare, il che evita i processi periodici di sincronizzazione delle strutture a griglia. La LoRaWAN si compone delle parti seguenti.
1. Uno o piรน Concentratori/Gateway che comunicano con gli End-device ed instradano su protocollo TCP/IP il sub-protocollo LoRaWAN. Un Server LoRaWAN sulla rete Internet raccoglierร  e presenterร  i dati estratti dal protocollo LoRaWAN. Per questo motivo la struttura puรฒ essere considerata come una struttura a stella di stelle.
2. Piรน End-device; ovvero sensori e/o attuatori sul campo. Possono essere:
A) Classe A. Classe base standard. รˆ un apparato a bassissimo consumo che decide autonomamente quando collegarsi al Concentratore. Dopo aver spedito il messaggio si pone in ascolto per un tempo limitato (5 sec.) per due volte a distanza di un secondo, per dare al Concentratore lโ€™opportunitร  di spedire una conferma o un comando.
B) Classe B. รˆ lโ€™evoluzione della classe A. Oltre a poter funzionare come classe A permette di ricevere messaggi dal Concentratore ma solo con finestre temporali predefinite. Lโ€™End-device di tipo B si puรฒ sincronizzare con il Concentratore rilevando un messaggio particolare (beacon) periodicamente spedito ogni 120 secondi. In sostanza, puรฒ essere inattiva eccetto quando deve spedire qualcosa o quando si deve mettere periodicamente in attesa di comunicazioni da parte del concentratore per pochi secondi. Lโ€™End-device di tipo B รจ lโ€™End-device con implementazione piรน complessa, per questo, attualmente รจ poco realizzata.
C) Casse C. Classe senza particolari problemi di alimentazione. Questo tipo di End-device puรฒ ricevere sempre, eccetto ovviamente quando รจ in trasmissione (ricordiamo che LoRa รจ un sistema di trasmissione half-duplex). Non รจ lโ€™evoluzione della classe B, ma semmai della classe A senza limitazioni di finestre temporali per la ricezione. I pacchetti previsti dal protocollo hanno una struttura ben definita e complessa, e sono crittografati con tecnologia AES128.

Gli elementi della rete sono schematizzati in Fig. 6. La struttura dei pacchetti รจ definita dalle specifiche pubblicate dalla LoRa Alliance TM. Gli End-device si possono collegare con piรน concentratori per aumentare lโ€™affidabilitร  e la sicurezza. Lo spazio di indirizzamento in una rete LoRaWAN รจ il seguente:
โ€ข Identificatore di device (universalmente unico): 64 bit (standard EUI64) (definito dal costruttore)
โ€ข Indirizzo del device in rete: 32 bit (non universalmente unico)
โ€ข Identificatore di Applicazione LoRaWAN (unico): 64 bit (EUI64)
โ€ข Identificatore di gateway (unico): 64 bit (EUI64)

รˆ chiaro che questo tipo di tecnologia รจ indirizzato a soggetti pubblici o privati che operano il controllo del territorio. Infatti, oltre che ai sistemi di allarme, una LPWAN (Low Power Wide Area Network) รจ indirizzata al controllo dei rifiuti, dellโ€™illuminazione, della qualitร  dellโ€™aria o dellโ€™acqua, dei parcheggi, o, in campo agricolo, dei dati del terreno, dellโ€™irrigazione ecc.

Naturalmente questi servizi hanno un costo, ma ultimamente si sono mobilitate anche forze spontanee per lโ€™implementazione gratuita di reti cittadine, come lโ€™organizzazione โ€œTHE THINGS Networkโ€.

Fig. 6 – Rete con i diversi apparati.

 

Uso alternativo dellโ€™hardware del telecomando

Se in parallelo al pulsante colleghiamo un contatto pulito, come ad esempio un contatto reed di quelli per porte e finestre (quello degli antifurto, ndr), realizzeremo un efficiente sensore wireless di allarme anti-intrusione.

Per esempio collegandolo ad una porta potremo ricevere sul server, anche molto distante, la segnalazione dellโ€™apertura che potrร  essere utilizzata come allarme o come registrazione di evento. Infatti ricordiamo che lo shield LoRa puรฒ essere montato su RandA (la nostra shield per Raspberry Pi che integra il core di Arduino UNO) dove il processore Raspberry Pi puรฒ agire come un sofisticato server, eventualmente collegato in Internet.

La miniaturizzazione del telecomando e la sua auto-alimentazione lo predispongono ad essere posizionato ovunque sia necessario un sensore attivato meccanicamente. Se poi aggiungessimo un piccolo circuito che realizzi un timer a bassissimo consumo (di pochi nanoampere), potremmo azionare elettronicamente il pulsante per esempio tramite un transistor MOS che agisca come un interruttore. In questo caso potremmo periodicamente spedire al server un valore analogico letto sul pin A2 o un valore digitale sul pin D8.

Per questo utilizzo alternativo si potrebbe utilizzare un contenitore di dimensioni paragonabili a quello per telecomando come quello G1013 (con qualche adattamento), nel caso non si voglia la finestrella del pulsante.

Questi utilizzi alternativi del telecomando sono utilizzi che contano sullโ€™attivazione momentanea del circuito che ha una alimentazione fornita da una piccola batteria non ricaricabile. Ma รจ giร  allo studio una ulteriore elaborazione del circuito del telecomando.

In questa nuova schedina, di dimensioni non troppo distanti da quella del telecomando, sarร  aggiunto un carica batteria per batterie LiPo da 3,7 V. Il risultato sarร  quello di avere una scheda completa di processore e modulo radio con la possibilitร  di essere auto-alimentata e di restare sempre accesa.

In questo modo il sistema potrร  mettersi in ascolto di messaggi in arrivo o di originarne di suoi in base ad allarmi di varia natura. Infatti saranno aumentati i pin analogici e digitali disponibili sulla microscheda.

In sostanza รจ previsto un insieme di tre tipi di apparati (Fig. 6):
โ€ข shield per Arduino (e quindi anche per RandA) giร  presentato e destinato ad attivitร  di server o di stazioni piรน elaborate;
โ€ข microscheda con possibilitร  di auto-alimentazione tramite batteria ricaricabile, comprensiva di processore Arduino (del tipo LilyPad) e modulo radio; destinata a stazioni periferiche anche a pannelli solari.
โ€ข telecomando/allarme meccanico, presentato in questo articolo.

Conclusioni

Con il trasmettitore LoRa miniaturizzato e con il prossimo auto-alimentato si completa lโ€™offerta di sistemi programmabili che possono formare una rete proprietaria per una infinitร  di usi diversi.

Lโ€™utilizzo della libreria proposta in questo articolo rende queste reti molto flessibili e lontane dalla complessa rigiditร  della LoRaWAN. LoRaWAN nasce per standardizzare in senso industriale lโ€™IoT. Ed รจ pensata per instradare su Internet questi scambi di informazioni con numerosi satelliti di sensori ed attuatori in una logica molto codificata (vedere riquadro di approfondimento).

Non volendo entrare in questa realtร  piรน complessa, e per la quale sarebbe piรน opportuno un modulo operante a 868 MHz, sarebbe un peccato non utilizzare comunque le grandi potenzialitร  di questo splendido modulo radio.

Nota: nel pacchetto LoRa รจ presente un Byte chiamato Sync-Word che ha valore 0x12 come valore predefinito (registro 0x39 dello SX1278), ma che viene modificato con il valore 0x34 nel caso di trasmissioni LoRaWAN; ciรฒ per differenziare maggiormente le trasmissioni LoRaWAN da altre trasmissioni con protocolli proprietari come il nostro.

Con questi apparati e questa libreria รจ possibile realizzare diverse soluzioni personalizzate. Per esempio:
โ€ข un sofisticato sistema antifurto per auto con allarme sullo stesso telecomando;
โ€ข sistema di allarme sofisticato ed esteso per abitazioni o aziende;
โ€ข una gestione di sensori ed elettrovalvole in campo agricolo;
โ€ข una automazione di appartamenti e ville su grande scala;
โ€ข una sorveglianza di valori critici ambientali.

Esistono comunque altre applicazioni del sistema, che sarebbe lungo elencare e che preferiamo lasciare alla vostra inventiva.

Lascia un commento

Il tuo indirizzo email non sarร  pubblicato.

Menu