Vediamo una ulteriore implementazione di quanto trattato qui.
Si tratta di un ricevitore sui 433MHz che comanda 4 relays. Con qualche
semplice modifica si potrà espandere il numero delle uscite a 16.
Il trasmettitore.
Utilizziamo lo schema già visto, estremamente semplice, estendendolo con 4
pulsanti separati, uno per ogni canale. Avendo a disposizione dei pulsanti
doppi (comunemente reperibili negli chassis dei PC, dove fungono da power on e
reset), è stato realizzato lo schema seguente:
La pressione di un pulsante fornisce alimentazione al circuito e nel
contempo porta a livello basso un pin del micro, identificando così l'
indirizzo da inviare.
E' stato usato un 12F509, in DIP a 8 pin, che sostituisce il 10F2xx usato
nelle precedenti realizzazioni. Il motivo è la necessità di avere 4 I/O per
i pulsanti, più l'uscita per il trasmettitore.
Volendo disporre di un maggior numero di canali occorrerà utilizzare un
chip con più pin; ad esempio, con un 16F a 14 pin si avranno a disposizione
11 selezioni. Certamente, usando maggiore sofisticazione, si potrà usare una
tastiera a matrice: con un DIP a 14 pin si potrà inserirne una 4x4, per un
massimo di 16 canali (il numero del canale è codificato su mezzo byte).
Da notare che, essendoci weak pull-up integrati solamente su GP0/1/3, è
stato necessario aggiungere la R2 come pull-up esterno per GP2 (valore 10-47k)
Il pin GP5 è collegato alla linea dati del trasmettitore, mentre il GP4
comanda un LED durante la trasmissione.
L' alimentazione va da 3 a 5.5V e qui è ricavata da 3 pile AAA in serie, che
assicurano una autonomia considerevole.
C1 potrà essere un 100nF.
|
Il trasmettitore è il solito modulo AM a 4 pin. E' richiesta la
presenza di una antenna accorciata come quella descritta qui.
Potrà essere usato qualsiasi altro genere di antenna adeguata, tenendo
presente che essa è indispensabile.
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.
Il c.s. consente di inserire entrambe le versioni più comuni. |
Una presa ICSP
consente di programmare il chip on board senza rimuoverlo. Dato che i pin
necessari sono comuni ai pulsanti, durante la programmazione sarà obbligo non
premerli; l'alimentazione sarà fornita dal Pickit.
|
Certamente lo schema è quanto mai banale, dato che si può risolvere molto
più elegantemente la cosa utilizzando la funzione di wake up ed un micro
della più attuale famiglia Enhanced Midrange, ma si è scelta questa
configurazione solo allo scopo di dimostrazione didattica.
Così, non si è cercata alcuna forma specifica per il trasmettitore, che è
stato realizzato su un c.s., ma si presta bene anche per una millefori. Volendo
realizzare un oggetto portabile, si potrà usare uno dei tanti
contenitori commerciali previsti per questo scopo, ridisegnando il
c.s. in funzione dello spazio disponibile. Da notare che, essendo il messaggio trasmesso identico per tutte le
realizzazioni fino ad ora viste, il trasmettitore può essere utilizzato così
come è anche negli altri progetti allo scopo di fornire una facile base di
sperimentazione. |
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 è un poco più complicato del trasmettitore:
Utilizziamo sempre un Baseline, questa volta a 14 pin per avere gli I/O
necessari al comando dei 4 relays.
Il sorgente è compilabile per
16F505/506/526, ma, come sopra, si potrà utilizzare un qualsiasi altro PIC.
Il ricevitore radio è il solito 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.
Il circuito stampato è, come solito, mono rame.
|
I relays utilizzati
sono modelli standard con buona capacità di commutazione, comandati
da un transistor NPN in TO92, genere PN2222, BC337 e simili. La
resistenza di base è dell'ordine dei 4k7.
Ovviamente, a seconda del carico previsto, si potranno utilizzare
altri relays, dai quali dipenderà la tensione di alimentazione (12 o
24V).
I contatti NO dei relays sono riportati su una morsettiera. Sul circuito stampato c'è lo spazio
per inserire condensatori spegni arco in parallelo ai contatti. Il valore preciso andrà
calcolato a seconda delle caratteristiche del carico commutato. Un
valore generico potrà esse 10nF con almeno 275Vl ca. I diodi D1-4
(1N4148 o simile) proteggono i transistor dagli impulsi negativi della
commutazione delle bobine.
Quattro LED con relativa resistenza serie indicano quale relè è
azionato. |
I 5V per il microcontroller sono ottenuti con un regolatore a
tre terminali (78L05 o simile). Due diodi (D5 e D6) separano le due
sezioni e proteggo da una inversione di polarità sull' alimentazione
principale, che sarà 12 o 24V a seconda dei relays impiegati. Un
fusibile di protezione potrà essere inserito per evitare danni in caso di
guasto.
Particolare cura deve essere utilizzata per ottenere un circuito stampato con un sicuro isolamento nel caso di commutazioni di
carichi sulla rete 230V.
In ogni caso sarà opportuna una mano di spray protettivo anti arco.
Un set di jumper SV1 consente di selezionare per ogni relay una diversa
modalità tra le due possibili: monostabile 1s (jumper aperto) o bistabile passo-passo
(jumper chiuso).
Una presa ICSP
consente di programmare il chip on board senza rimuoverlo. Dato che i pin
necessari sono comuni ai jumper del modo, durante la programmazione sarà
obbligo rimuovere tutti i ponticelli inseriti.
Ovviamente sarà possibile qualsiasi altra soluzione costruttiva, non
essendoci alcuna criticità nel circuito.
Il programma.
Il trasmettitore: il microcontroller viene
alimentato alla pressione di un qualsiasi pulsante e, dopo una breve attesa di
stabilizzazione, determina il pulsante premuto e invia un pacchetto di dati al trasmettitore.
Questo consiste in un impulso di preambolo da
10ms, seguito da 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 dal valore selezionato dal pulsante: il
ricevitore azionerà il relay 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.
Premendo più pulsanti contemporaneamente, il dato trasmesso conterrà un
indirizzo pari alla somma del valore dei pulsanti premuti.
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 12F508/509/510/519.
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 va a
comandare uno dei relay.
Dato che il trasmettitore, fino a che è alimentato, continua ad inviare
pacchetti dati, il ricevitore, una volta azionata l'uscita, la mantiene per 1
secondi nel modo monostabile e inserisce una penalità di 1 secondo oppure
commuta il relay ed aggiunge una penalità di 2s in modo bistabile. Durante questi tempi il ricevitore non analizza alcun
messaggio in arrivo. Questo evita un indesiderabile sfarfallio dei relays.
I tempi possono essere variati 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.
I sorgenti some, come solito, ampiamente commentati e sono di facile
modifica volendo variare microcontroller, tempi, canali, ecc.
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
o azionamenti di sicurezza.
Per trasmissioni a rate più elevati o dove è richiesta una diversa qualità, esistono moduli con tecnologie differenti (con costi che
possono essere assai maggiori), sui quali implementare protocolli di
comunicazione di maggiore complessità.
|