Progetti - PIC

 

Interruttore remoto via radio.


Telecomandi via radio.

Capita che tra il segnale da valutare, o il dispositivo da comandare, ed il microcontroller non sia possibile stendere dei cavi. In questi casi occorre provvedere con una comunicazione IR o radio.

Da un certo tempo sono disponibili numerosi moduli trasmettitore-ricevitore sulle gamme dedicate ai dispositivi LPD (Low Power Device, ovvero dispositivi di piccola potenza) che, grazie alla produzione orientale, hanno raggiunto dei costi veramente bassi.
Questi dispositivi sono principalmente nella banda dei 315 o 433MHz e le piccole dimensioni e il basso costo ne invogliano l'impiego in parecchie ambiti.

Vediamo qui come utilizzare questi moduli in una semplice applicazione.


Trasmissioni a 433MHz.

La gamma dei 433MHz è dedicata essenzialmente a telecontrolli (stazioni meteo con sensore esterno, sistemi di allarme, ecc.) e a telecomandi (cancelli, serrande, campanelli wireless,ecc.); ufficialmente, va da 433.000 a 434.800MHz.  

Per i dispositivi più economici, si tratta di realizzazioni fin troppo semplici, ma adeguate a comunicazioni su brevi distanze (decine di metri). 
I trasmettitori sono di piccola potenza (max. 10mW), realizzati solitamente come oscillatori a uno o due transistor, stabilizzati da un cristallo o da un risonatore a onde superficiali (SAW) e previsti per una modulazione modulazione OOK.

Il funzionamento è il seguente: quando l'ingresso dati del trasmettitore è a livello basso, l'oscillatore è bloccato e il consumo è ridotto (anche meno di 1uA). Quando l'ingresso dati è a livello alto, l'oscillatore è attivato e genera una portante alla frequenza stabilita dal risonatore o cristallo. Il consumo sale a una decina di milliampere. 

Il circuito è alimentabile generalmente tra 3 e 12V: maggiore è la tensione di alimentazione e maggiore sarà la potenza generata in RF. Con il classico 5V di alimentazione dei microcontroller la portata, con una antenna minimale, supera generalmente i 20-30m.

I moduli sono realizzati  su  piccoli circuiti stampati (10x14mm circa), accessibili con 3 o 4 pin.

I ricevitori sono del genere eterodina, anch'essi estremamente semplificati.
Quelli più semplici utilizzano pochi componenti, mentre quelli più complessi sono basati su circuiti integrati specifici.
Eccone un esempio che utilizza un doppio opamp come elementi di uscita e controllo.

Nella pratica, si tratta anche qui di moduli realizzati in SMD, accessibili con pin che variano tra 4 e 8 o più. L'alimentazione è prevista a 5V.

Il ricevitore, appena acceso, si adegua ai segnali presenti nell'ambiente: se nessun trasmettitore è attivo a breve distanza, esso lavora ad alto guadagno, raccogliendo una ampia fascia di disturbi e di statica.

A lato, l'immagine dell' oscillogramma tipico ottenuto all' uscita di un modulo ricevente in assenza di portante trasmessa.

Sono presenti impulsi casuali derivati dai disturbi elettromagnetici emessi da apparecchi presenti nelle vicinanze, oltre al rumore di fondo generale. 

Il ricevitore si sintonizza con il massimo guadagno su questi segnali di bassa intensità e li rende in uscita come variazioni di livello tra 0 e 5V.

Quando si riceve una portante di valore sufficiente, il ricevitore adegua il suo guadagno per escludere segnali di minore ampiezza e rendere in uscita gli impulsi ricevuti come dati digitali. 

A lato, l'immagine della ricezione di un segnale inviato dal trasmettitore e costituito da 18 bit complessivi.

La frequenza di trasmissione supportata è al massimo un paio di kHz; utilizzando questi moduli per una trasmissione seriale, solitamente non si superano i 1200 baud.

E' importante sapere che il ricevitore richiede un minimo tempo per agganciare il trasmettitore; peraltro, una volta agganciato, mantiene la situazione del guadagno anche in mancanza di portante per un certo tempo.

Osserviamo nell'immagine a lato come, tra un pacchetto di bit e il successivo, distanti circa 50ms, non siano presenti disturbi, dato che il ricevitore si è adattato al segnale più forte.

E' necessario, quindi, che una trasmissione dati inizi con un "preambolo",  prima di inviare il pacchetto dei dati, per permettere al ricevitore di aggiustare la ricezione e per agganciarsi al segnale escludendo i disturbi. 

Da notare che questi moduli richiedono la presenza obbligatoria di una antenna, anche minima, senza la quale la portata è ridotta in modo drammatico. Ovviamente, una antenna adeguatamente calcolata influirà in modo sensibile sulla portata.
Nella forma più semplice potrà essere un tratto di filo qualunque lungo un quarto d'onda, ovvero 17.3mm circa.
Volendo realizzare qualcosa di meglio si potrà costruire una semplice antenna accorciata come descritto qui.
Oggetti analoghi si possono trovare facilmente sul WEB a costi irrisori, ma, seguendo le istruzioni indicate, una discreta antenna si può auto costruire a costo zero.

Certamente antenne di qualità maggiore aumentano la portata, ma non sono certo proporzionali alla semplicità del circuito descritto. 


Un interruttore radiocomandato.

Abitando in una vecchia casa costruita in mattoni (tra cui primeggiano quelli definiti nel dialetto locale "brusadin", incredibilmente duri, e con la possibilità di trovarsi anche qualche sasso di fiume, l'operazione di ricavare nei muri le scanalature per inserire corrugati per l' impianto elettrico è quanto mai sgradevole. No problem in fase di ristrutturazione, ma aggiungere i conduttori per un punto luce in un secondo tempo non è il massimo.
Da questa considerazione è nata l'idea di remotare il pulsante di accensione del carico via radio, inserendo nelle placche a muro un piccolo trasmettitore e collegando il carico ad un ricevitore adeguato.

Il trasmettitore.

Le dimensioni del trasmettitore posso preoccupare, dato che nelle scatole a muro lo spazio non abbonda, ma, utilizzando uno dei moduli visti prima e un microcontroller SMD, la cosa è fattibile senza problemi.

L' alimentazione è derivata direttamente dalla rete 230V, attraverso un alimentatore senza trasformatore. Questo riduce alquanto le dimensioni, in quanto è sufficiente un condensatore da 0.22uF (C1). Ovviamente sarà il caso di utilizzare un elemento X2.

La semionda, raddrizzata dl diodo D1 sarà limitata in ampiezza dallo zener D2 e alimenterà un microcontroller minimale (PIC10F200/202, SMD in SOT23-5).

Tre jumper consentono di associare il trasmettitore ad un numero identificativo, in modo da poter disporre di 8 diversi riferimenti che permetteranno di attivare un uguale numero di ricevitori, quantità più che sufficiente per un uso domestico.

La presenza dei pin dei jumper, più un ulteriore pin JP2 collegato alla Vdd, consente di programmare il microcontroller direttamente sulla schedina (come descritto più avanti). Non è quindi necessario programmarlo prima della saldatura, cosa che richiede un adattatore specifico, ed è possibile aggiornare il firmware senza dissaldare nulla.

Alla chiusura del pulsante, il circuito è alimentato e il microcontroller genera un pacchetto di dati che invia al modulo di trasmissione. Questo è del genere "verticale" a 4 pin, dotato di una breve antenna.

Avvertenza: 

  1. il pinout del PIC nello schema è relativo alle versione SOT23-6 SMD; i pin della versione DIP8 sono disposti in modo differente.
  2. il trasmettitore a 433MHz può avere un pinout diverso da quello del modello qui usato
    Attenzione perchè possono venir scambiati i pin Vcc e GND
    . Normalmente le funzioni sono è indicate con una serigrafia sul circuito stampato.

Ad esempio, la sequenza dei pin del modulo JMR-TX-1, usato nei prototipi, è Vcc-In-Gnd-ant, mentre quella di modelli come Velleman TWS-A53 o Quasar AM-TX2 è Gnd-In-Vcc-ant, per cui il c.s. va modificato.

Lista componenti

R1 100 ohm R2 1M 1/2W
D1 1N4007 D2 4.7/5.1V 1/2W
C1 0.22uF 275Vl X2 C2 100nF 50V
C3 100uF 16V U1 PIC10F2xx (vedi testo)
JP1 2x3pin jumper JP2 1 pin
CN1 connettore 5.08 2 poli TX modulo 433MHz JMR-TX-1

 

Il tutto è realizzato su un circuito stampato di dimensioni minime, tale da poter essere inserito in un modulo "tappo" (falso polo 1 modulo, L4950) della serie Living BTicino. Questo consente di inserirlo in una scatola standard incassata a muro assieme al pulsante di azionamento.

Il circuito stampato è fissato nel modulo Ticino con una goccia di silicone.

Il condensatore (giallo) è l'elemento più voluminoso ed è di classe X2. Il microcontroller SMD è saldato sul lato rame.

Il modulo trasmettitore installato è il modello JMR-TX-1.

L'antenna accorciata è quella descritta qui. Potrà essere piegata per adattarla nella scatola da incasso.

 

Ovviamente è possibile realizzare il circuito anche in qualsiasi altro modo, dato che non si tratta di un circuito critico. Ad esempio, dove necessario, si potrà anche optare per una alimentazione a batteria. Lo schema è identico, escludendo i componenti dell'alimentatore in alternata:

Si potranno utilizzare 3 batterie AA o AAA, per un totale di 4.5V, oppure un elemento Li-ion da 4.3/4.7V. In questi casi lo zener D2 e la resistenza R1 sono inutili e vanno omessi; saranno richiesti solamente se si usano batterie di maggiore tensione (ad esempio 6 o 9V); in tal caso occorrerà inserire una resistenza in serie di valore adeguato e lo zener da 4.7-5.1V. Si possono utilizzare anche batterie a bottone da 3V (CR2016/CR2032) quando ci sono problemi di dimensione rispetto alla potenza ottenibile ed alla durata.
In questo caso si userà uno dei tanti contenitori commerciali previsti per trasmettitori di telecomando, ottenendo un aspetto professionale,
Complicando un poco il circuito si potrà anche alimentare il modulo trasmettitore a tensione maggiore di quella del microcontroller, per ottenere la massima potenza.

Il ricevitore.

Il ricevitore soffre di minori problemi dimensionali, ma, comunque, è stato realizzato in modo da occupare il minimo spazio possibile.

Data la presenza di un relè, che richiede una certa corrente di mantenimento, l' alimentazione è stata realizzata con un trasformatore miniatura, da 1-1.5VA, seguito dal classico ponte di Graetz e da un regolatore tre terminali (78L05) per alimentare il microcontroller e il ricevitore, mentre il relè dipenderà direttamente dalla tensione non stabilizzata. 
Il microcontroller potrà essere PIC10F220/222, dato che serve la funzione analogica: a causa del basso numero di pin disponibili, l'identificativo è letto attraverso il convertitore AD che misura la tensione presente al pin GP1.
Questo è collegato ad un partitore con 4 livelli di tensione possibili (Vdd, 2/3Vdd, 1/3Vdd, Vss), ad ognuno dei quali corrisponderà un indirizzo. Le resistenze del partitore non sono critiche (valore comune 10k), ma devono essere uguali (5% o meglio), cosa sempre ottenibile con elementi SMD che solitamente sono all'1%.
La selezione degli indirizzi è la seguente:

Obbligatoriamente va inserito un ponticello, altrimenti l'ingresso GP1 resta flottante e la conversione può rendere valori casuali.

Il ricevitore, così combinato, consente 4 indirizzi che, associati all'identificatore fisso (impostabile nel sorgente da 0 a F, per un totale di 64 combinazioni) è più che adeguato all'uso previsto. Dato che, però, il trasmettitore consente più indirizzi, dove occorra, si potrà utilizzare un partitore con più resistori, modificando di conseguenza il sorgente in modo da individuare più valori dalla conversione AD.

Un ulteriore jumper consente di selezionare il modo di funzionamento, ovvero se il relè agisce in modo monostabile o bistabile. 

Nel primo modo, una ricezione chiude il relè e la successiva lo riapre (passo-passo).

Nel secondo modo, il segnale ricevuto chiude il relè per 1s. 

Il ricevitore radio è un modello a 8 pin molto comune, come quelli visti nelle immagini precedenti. Anche qui sarà necessaria una piccola antenna.

Il relè andrà scelto in base al carico. Nei prototipi è stato usato uno Schrack (V23092-A1005), anche se non economico, per le sue ridotte dimensioni e che consente una potenza di commutazione sufficiente a comandare direttamente un piccolo carico in ca, ad esempio una lampada:

Tensione massima di commutazione 400Vca
Corrente massima di commutazione 6A

I valori indicati sono presi dai fogli dati e sono massimi assoluti. Nell'uso occorre stare molto al di sotto di questi valori per garantire una durata minima dei contatti.

Se occorre una maggior potenza commutabile, oppure è necessario comandare carichi induttivi (motori, trasformatori) si ricorrerà ad un relè di dimensioni maggiori, modificando opportunamente lo stampato, che è mono rame, oppure ricorrendo ad un relè esterno.

La tensione di azionamento potrà essere 12 o 24V e, in corrispondenza, si utilizzerà un trasformatore col secondario 2x12 o 2x15V, formato EI30 da 1.5-2VA. La presenza di due secondari simmetrici, tipici di questi trasformatori, consente di rettificare l'alternata a doppia semionda con due soli diodi.
Da osservare che questi trasformatori in genere sono auto protetti, per cui non viene previsto un fusibile, che, in ogni caso, sarà sempre possibile installare esternamente. 

Sullo stampato trova spazio anche un LED opzionale, indicatore dello stato del relè. La resistenza serie dipenderà da tipo di LED usato e dalla tensione del secondario del trasformatore (indicativamente, per LED da 1-2mA, 6k8-10k per 12V e 15-22k per 24V).

Lista componenti

R1-2-3 10k-22k SMD805 R4 6k8-10k
R5 6k8-15k (vedi testo) LD1 led 3mm opzionale
D1-D2 1N4007 D3 1N4148
C1 100nF 50 smd 1206 C2 100uF 16V
C3 100uF 35V U1 PIC10F220 o 222   SOT23-6
JP1 2x4pin jumper JP2 2 pin
CN1 connettore 5.08 a vite 4 pin RX modulo ricevitore 433MHz JMR-RXB6 o QAM-RX2
Q1 BC547 o simile IC1 78L05
T1 trasformatore EI30 1.5-2VA 2x12/2x15 K1 Relè Schrack V23092

Nulla vieta, però, di usare un microcontroller in DIP8 e componenti non SMD, aumentando in proporzione le dimensioni dello stampato. 

Nel circuito superiore vediamo una versione con microcontroller in DIP e un economico relè DS1-M/DS1E (SDS-NAIS).

Ul ricevitore è un QAM-RX2. Non è inserita l' antenna.

Nel circuito inferiore, più compatto, il microcontroller è in SMD, saldato sul lato rame e il relè è uno Schrack super sottile.
Il ricevitore è un JMR-RXB6.

L'antenna è quella usata sul trasmettitore; la bobina è fasciata da una guaina termo stringente per evitare che si deformi. 

 

Essendo circuiti alimentati dalla rete, è consigliabile, sopratutto per il trasmettitore, dare una mano di spray isolante sul lato saldature.


Sviluppo dei programmi.

Prima di passare alla versione definitiva, molto miniaturizzata, i circuiti possono essere sperimentati comodamente sulla LPCuB con gran semplicità, aggiungendo solamente i ponticelli necessari e collegando esternamente i moduli di trasmissione e ricezione.
Per il trasmettitore (PIC10F2xx):

Il modulo trasmettitore è collegato con cavetti terminati femmina-femmina.
Il LED 4, collegato a GP2, rende visibile il dato inviato al trasmettitore. 
GP0,1,3, che selezionano l'indirizzo, possono essere collegati a Vss. Lasciati liberi si trovano a livello 1 a causa del weak pull up interno.

E per il ricevitore (PIC10F22x):

Il modulo ricevitore è collegato con cavetti terminati femmina-femmina.
Il LED 4, collegato al GP2, indica lo stato dell'uscita.
Senza altre aggiunte, si potranno emulare gli indirizzi 1 e 4 collegando il GP1 rispettivamente a Vss o Vdd.
Altrettanto per il jumper della selezione del modo di funzionamento, che potrà essere collegato alla Vss; lasciato libero si trova a livello 1 a causa del weak pull up interno.


Il programma.

Il trasmettitore, non appena alimentato, genera un impulso di preambolo da 10ms, seguito da un pacchetto dati di 16 bit.
Il dato trasmesso è costituito da 4 bit contenenti un codice di riferimento che funge da chiave della trasmissione; il ricevitore dovrà identificare questo byte per attivare il relè. Questo consente di avere più trasmettitori in una stessa area, ognuno col suo riferimento, che si accoppia solamente con ricevitori aventi lo stesso codice.
Il secondo nibble è costituito dall'indirizzo selezionato con i jumper: un ricevitore, per azionare il relè, dovrà ricevere riferimento come fissato nel firmware e l'indirizzo come stabilito dai jumper. 
In aggiunta, 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 del relè.

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.
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 trasmettitore può essere realizzato con 10F200/202/204/206/220/222. Dato che non viene utilizzata la funziona analogica, nè il comparatore, tutti questi chip sono equivalenti.

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 segnale, escludendo i disturbi; il preambolo consente di stabilizzare la ricezione e garantire che i pacchetti necessaria a completare una trasmissione con successo siano 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.
Anche se sono accettate differenze di clock anche del 5%, risulta in ogni caso necessario calibrare l'oscillatore interno, il che porta il clock generato entro l'1% del valore nominale, assicurando una corretta ricezione.

Dato che il trasmettitore, fino a che è alimentato, continua ad inviare pacchetti dati, il ricevitore, una volta azionata l'uscita, si disabilita per 2 secondi, in modo da evitare un indesiderabile sfarfallio del relè.
Questo tempo può essere variato modificando il sorgente.

Dato il basso numero di pin disponibili, l'indirizzo del ricevitore viene valutato con jumper che collegano GP1, usato come ingresso del modulo analogico, ad un partitore resistivo. Questo partitore  permette, come visto sopra, 4 livelli di tensione, che il firmware riconosce. 

Un ulteriore coppia di pin collegata al GP0 è impiegata per definire se il relè funziona come bistabile (passo-passo) o come monostabile (tempo di on 1s). Se il jumper non è inserito, il livello del pin è alto, dato che sono stati abilitati i weak pull-up.

L'assegnazione di GP0 come ingresso digitale e GP1 come AN1 dipende solo dalla necessità dello stampato mono faccia. 

Il ricevitore richiede 10F220/222, dato che è necessario il modulo ADC.

Per quanto riguarda i microcontroller, nulla vieta di utilizzarne altri, come quelli della serie 12F (o qualsiasi altro PIC...).  Ovviamente  il chip usato per il ricevitore dovrà avere la funzione analogica.
Anche un eventuale elemento DIP potrà essere impiegato da chi non desidera montaggi SMD, con il solo aumento della superficie di stampato necessaria.


Programmazione on board.

Tutti i pin  necessaria alla programmazione dei chip sono accessibili dai jumper on board. Quindi è possibile programmare i microcontroller senza dissaldarli dalla scheda, ovvero senza la necessità di scriverli prima della saldatura. Questo è assai comodo in quanto, trattandosi di SOT23, occorre un opportuno adapter che ha un certo costo.

La connessione ISCP tra il Pickit e i circuiti è facilmente realizzata con cavetti jumper maschio-femmina (ad esempio MIKROE-512).

Questi cavetti sono disponibili anche con terminazione maschio-maschio o femmina-femmina e sono indispensabili durante lo studio dei prototipi, sia su scheda di sviluppo che breadboard.

10F2xx possono essere programmati sia con Pickit2 che Pickit3.

Ecco le connessioni sui circuiti stampati:

Durante la scrittura, i circuiti saranno alimentati direttamente dal Pickit e non dovranno essere collegati alla rete.


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



 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 20/04/17.