Progetti - PIC

 

Telecomando 4 relays.


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à.



 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 09/06/16.