Display remoto via
radio.
|
Vediamo una semplice implementazione di quanto trattato qui.
Si tratta di un ricevitore sui 433MHz che presenta su un display a 7
segmenti il valore del dato ricevuto.
Questo può essere la base per realizzare una trasmissione da un
sensore remoto oppure un comando di più relè.
Il trasmettitore.
Utilizziamo lo schema già visto, estremamente semplice.
L' alimentazione è derivata da una batteria tra 3 e 5V, ad esempio una
Li-Ion oppure 3 pile da 1.5V. Maggiore è la tensione, maggiore sarà la
potenza radio emessa.
Siccome occorre tassativamente non superare i 5.5V, massimo sopportabile dal
PIC, usando batterie di
tensione maggiore si inserirà il solito regolatore a tre terminali (78L05)
oppure uno zener da 4.7-5.1V con relativa resistenza.
Dato che il trasmettitore può operare fino a 12V, complicando un poco il circuito
si potrà alimentare questo con una tensione maggiore del microcontroller.
C1 potrà essere un 4.7uF e C2 un 100nF. Un pulsante collega la batteria al
trasmettitore.
Tre jumper consentono di generare numeri da 0 a 7:
Volendo disporre di un maggior numero di valori occorrerà utilizzare un
chip con più pin; ad esempio, con un 12F a 8 pin si avranno a disposizione 4 I/O e quindi 16
selezioni.
|
Alla chiusura del pulsante, il circuito è alimentato e il microcontroller
genera un pacchetto di dati che invia al modulo di trasmissione, che è del
genere "verticale" a 4 pin, dotato di una breve antenna (nel
prototipo è un Quasar AM-TX2).
Va osservata la disposizione dei pin, indicati con una serigrafia
sul minuscolo stampato, dato che non è identica per tutti i modelli di
trasmettitore di questo tipo, anche se uguali ad una vista superficiale. |
Per realizzare il circuito si potrà utilizzare una qualsiasi millefori o
un c.s. dedicato.
L'antenna accorciata è quella descritta qui.
Potrà essere usato qualsiasi altro genere di antenna adeguata, tenendo
presente che essa è indispensabile.
Nello schema, i pin del chip sono relativi al package SMD; per il DIP a 8
pin la disposizione è diversa.
Ovviamente si potrà utilizzare un qualsiasi altro PIC, dato che non sono
utilizzate funzioni particolari e il set istruzioni è quello ridotto
dei Baseline.
Il ricevitore.
Il ricevitore è
stato un poco più complicato del trasmettitore:
Utilizziamo sempre un Baseline, questa volta a 14 pin per avere gli I/O
necessari al comando del display a 7 segmenti. Il sorgente è compilabile per
16F505/506/526, ma, come sopra, si potrà utilizzare un qualsiasi altro PIC.
Il circuito, così combinato, consente di rappresentare numeri da 0 a F.
Il ricevitore radio è un modello a 8 pin molto comune (quello qui usato è un
Quasar RX-2, ma vanno benissimo anche altri simili).
Anche qui sarà
necessaria una piccola antenna.
Non è stato realizzato uno stampato per questo circuito, ma è stata
utilizzata la scheda di sviluppo LPCuB:
Questo permette una realizzazione rapidissima del prototipo, con la
possibilità di studiarne ogni dettaglio.
Il ricevitore è collegato alla scheda con tre brevi cavetti terminati F/F.
Attenzione perchè in alcuni modelli i due gruppi di pin gnd possono non
essere collegati tra loro e necessitare quindi di un ponticello.
Va osservato che l'uscita del
ricevitore è collegata a RB3, che il pin MCLR/Vpp: durante la programmazione
in circuit attraverso la presa ICSP, il ricevitore va scollegato in quanto
viene applicata la tensione Vpp dal dispositivo di programmazione. In
alternativa si potrà inserire una resistenza da 1k tra RB3 e l'uscita del
ricevitore.
Ovviamente sarà possibile qualsiasi altra soluzione costruttiva, non
essendoci alcuna criticità nel circuito.
Il programma.
Il trasmettitore, non appena alimentato, genera un impulso di preambolo da
10ms, seguito da un pacchetto dati di 16 bit. Il preambolo ha lo scopo di
allertare il ricevitore, facendo cessare la ricezione dei disturbi casuali.
Il dato trasmesso è costituito da due bytes, il cui nibble alto contiene un
valore di riferimento
che funge da chiave della trasmissione; il ricevitore dovrà identificare
questo valore per attivare le uscite. La cosa consente di avere più trasmettitori
in una stessa area, ognuno col suo riferimento, che si accoppia solamente con
ricevitori aventi lo stesso codice.
Il nibble basso è costituito dall'indirizzo selezionato con i jumper: il
ricevitore presenterà sul display il numero corrispondente.
Il secondo byte trasmesso è il complemento del primo ed è
utilizzato dal ricevitore per verificare la correttezza di quanto ricevuto.
Questa situazione costituisce un sufficientemente elevato grado di sicurezza,
in ambiente non professionale, per evitare azionamenti non desiderati delle
uscite.
La trasmissione utilizza una variazione di lunghezza degli impulsi inviati: i
bit a 0 sono trasmessi come livello alto per 400us e livello basso per 400us.
I bit a 1 sono costituiti da un livello alto per 800us e un livello basso per
400us. Questo consente un accoppiamento tra trasmettitore e ricevitore anche
nel caso in cui i cui
microcontroller abbiano clock un poco diversi, dato che non è previsto un
oscillatore quarzato.
Ricordiamo che il clock interno dei PIC10F è calibrabile all'avvio del
programma e il costruttore garantisce una tolleranza dell'1% sul valore
nominale (in questo caso 4MHz), il che è più che adeguato per il nostro
scopo.
Ovviamente, è obbligo effettuare questa calibrazione perchè differenze
maggiori nei clock potrebbero impedire la corretta ricezione dei dati.
Da prove fatte è possibile ridurre i tempi di durata degli impulsi, anche
dimezzandoli, ma per l'applicazione prevista la cosa non riveste alcuna
importanza, per cui si è preferito restare su tempi "lunghi" per
maggiore sicurezza di ricezione.
Il sorgente per il trasmettitore è compilabile per
10F200/202/204/206/220/222.
Dato che non viene utilizzata la funziona
analogica, nè il comparatore, tutti questi chip sono equivalenti e, adeguando
le assegnazioni degli I/O sarà utilizzabile qualsiasi altro PIC.
Il ricevitore è sempre alimentato e il microcontroller riceve i disturbi
casuali captati dall' ambiente. Questi disturbi hanno probabilità assai remote di combinare col sistema di chiavi sopra visto.
Quando il trasmettitore si attiva, il ricevitore si adegua al segnale, escludendo i disturbi; il preambolo consente di stabilizzare
la ricezione e garantire che i pacchetti necessari a completare una trasmissione con successo
necessitino di essere ripetuti il meno possibile.
Il ricevitore riconosce il preambolo, quindi passa a campionare il segnale in
arrivo dopo 600us da ogni fronte di commutazione basso-alto.
Questo fa si che il campionamento cada con il segnale a livello alto per i
bit a 1 e a livello basso per quelli a zero.
Il fatto di risincronizzarsi sulla transizione in salita di ogni impulso permette una
discriminazione sicura dei bit in arrivo anche se i tempi non sono assolutamente
precisi a causa di una differenza di clock dei microcontroller.
Comunque, anche se sono accettate differenze di clock di oltre il 5%, risulta in ogni caso
indispensabile calibrare l'oscillatore interno, il che porta il clock generato
entro l'1% del valore nominale, assicurando una corretta ricezione.
Se i due byte ricevuti sono verificati, il valore del nibble basso è passato
al display, che è comandato attraverso la solita lookup table. Avendo un port
solo 6 pin, il segmento g è comandato da un pin dell' altro port.
Dato che il trasmettitore, fino a che è alimentato, continua ad inviare
pacchetti dati, il ricevitore, una volta azionata l'uscita, la mantiene per 2 secondi, in modo da evitare un indesiderabile sfarfallio
della cifra, dopo di che il display viene spento fino all'arrivo di un nuovo
dato valido.
Questo tempo può essere variato con una semplice modifica al sorgente.
Il sorgente del ricevitore è compilabile per 16F505/506/526, ma, come
accennato prima, nulla vieta di utilizzare a qualsiasi altro PIC. Il sorgente,
operando col set di istruzioni Baseline, richiede solamente le modifiche necessarie al config iniziale ed alla
assegnazione degli I/O, come ampiamente descritto nel corso di
programmazione.
Estensioni.
Utilizzando un driver (transitor open collector, MOSFET open drain,
integrati genere ULN2003, ecc) si potrà sostituire il display con carichi
differenti, come relays.
Occorrerà modificare il sorgente per adeguare la tabella in uscita da 7
segmenti al modo scelto.
Portata e sicurezza.
La portata, che potrebbe essere la massima preoccupazione dell'
utilizzatore, come abbiamo detto, dipende essenzialmente dalla presenza di una
antenna efficiente. Quanto migliore è l'antenna, tanto migliore sarà la
portata.
Va però tenuto conto che all'interno di un ambiente ci possono essere
ostacoli alla trasmissione delle onde radio, come pareti, elementi metallici,
solette in cemento armato, ecc. Quindi la posizione reciproca di TX e RX
all'interno di una casa (e ancor più di una officina o simili) potrà essere
determinante.
Inoltre, la presenza di disturbi elettromagnetici (motori, varialuce,
regolatori di tensione, elettrodomestici, macchine elettriche, ecc), può
essere di intralcio; abbiamo tratteggiato come opera il ricevitore e la sua
struttura non è il massimo per operare in ambienti molto
rumorosi.
Per ultimo, va considerato che non si tratta di una una comunicazione di sicurezza, come potrebbe
essere un Keeloq o rolling code. Quindi potrebbe essere non ideale per chiavi e simili.
Per trasmissioni a rate più elevati o dove è richiesta una diversa qualità o
sicurezza, esistono moduli con tecnologie differenti (con costi che
possono essere assai maggiori), sui quali implementare protocolli di
comunicazione di maggiore complessità.
|