Cronotermostato programmabile settimanale (TPZ47)

dicembre 14th, 2013 | Posted by Marco Plessi in Elettronica | Automazione | Informatica | Visite: 5.130

Cronotermostato programmabile da parete con 4 programmi settimanali, utilizzabile con tutti gli impianti di riscaldamento (doppio contatto anche per condizionatore). Interfaccia con display LCD 2×16. Funzionamento con tensione di rete. Basato su PIC16F877.

Un impianto di riscaldamento, per essere utilizzato comodamente, deve avere un sistema di controllo semplice, intuitivo e veloce, ma allo stesso tempo deve essere efficace e deve avere la possibilità di essere programmato in modo totalmente personalizzato.

Per questo ho ideato un cronotermostato che raggruppa queste caratteristiche, e consente l’utilizzo del solo termostato (senza temporizzazioni) o anche della parte temporizzata.

tpz47_2

[ FILE DI PROGETTO DISPONIBILI ALLA FINE DELL’ARTICOLO]

 

Caratteristiche tecniche:

Interfaccia: display alfanumerico 2×16 + 4 pulsanti;

Comando: Relé 12 V con contatto NC+NO (230 V~);

Alimentazione: 230 V~ (modulo switching integrato);

Blackout: Batteria tampone 9 V (alcalina usa e getta);

Misura: Sonda temperatura LM35;

Regolazione: isteresi di ±1 °C;

Programmi: 4 settimanali con giorni attivabili singolarmente, temperatura e orario di inizio/fine.

 

Introduzione

Per fare tutto questo, rispettando la compattezza e il basso consumo energetico, ho deciso di utilizzare un microcontrollore, il PIC16F877, in package DIL40. Ovviamente non verranno utilizzati tutti i pin di I/O, ma solo alcuni. La scelta è ricaduta su questo MCU soprattutto per un fatto di comodità di utilizzo (ha molti pin di I/O, quindi si può sempre scegliere quello più adatto alla funzione che si deve fare, dato che non tutti hanno le stesse caratteristiche). La scelta è ricaduta su un PIC in quanto il progetto risale a diversi anni fa, e conoscevo solo i PIC, inoltre ne conoscevo solo pochi tipi. Forse adesso farei la stessa scelta, ma se il dispositivo dovesse essere installato in un ambiente con forti disturbi elettrici, sicuramente utilizzerei un Atmega.

Appena finita la realizzazione e la programmazione, il progetto è stato collaudato per 2 settimane, risultando assolutamente funzionale.

 

Partiamo dal centro:

Il MICROCONTROLLORE, come detto prima, è un PIC16F877A della ditta Microchip.

Il suddetto microcontrollore è molto potente e versatile, e per questo progetto posso dire di avere utilizzato una piccolissima parte di tutte le sue funzionalità.

Il programma inizia inizializzando gli array, quindi entra nel ciclo infinito.

Il ciclo infinito inizia controllando i pulsanti, e registra in 4 variabili lo stato dei 4 pulsanti. Quindi passa a controlli vari (retroilluminazione, temperatura, orari del cronotermostato, conversione orario).

Dopo i controlli iniziano i menu strutturati ad IF (come nel progetto del frequenzimetro) in cui viene controllata una variabile (in questo caso si chiama menucorr) che indica quale menu è attivo.

Un piccolo approfondimento è d’obbligo per la spiegazione della gestione dell’orario, che viene gestito mediante un quarzo esterno da 32.768 kHz. Il quarzo è collegato all’ingresso del timer0, il quale ogni 32.768 impulsi va in overflow e genera un interrupt interno (guarda caso dopo 32768 impulsi è passato proprio un secondo). L’interrupt genera un “cambio di programma”, ovvero appena viene generato, il microprocessore (CPU interno al MCU) smette di eseguire il programma normale e passa nella routine di interrupt, in cui viene gestito l’orario, aggiungendo un’unità ai secondi e facendo i calcoli opportuni per minuti ore e giorni. La routine di interrupt (a differenza di quella normale) viene eseguita una sola volta, ovvero quando il program counter arriva alla fine della routine, ritorna al programma normale, e la routine di interrupt viene eseguita di nuovo soltanto al prossimo interrupt. (ripetizione sfacciata delle parole routine e interrupt ma così si comprende meglio).

Potete approfondire il funzionamento del software leggendo i vari commenti nel listato, non mi dilungo qui nella spiegazione per non appesantire l’articolo.

pic16f877_mcu

pic16f877a_pinout


L’input è reso possibile da QUATTRO PULSANTI normalmente aperti, collegati e denominati secondo la seguente tabella:

simbolo NOME nome pin
BT1 [menu/ok] RB7
BT2 [esc/annulla] RB6
BT3 [su] [▲] RB5
BT4 [giù] [▼] RB4

pulsanti


Il DISPLAY ALFANUMERICO, basato sul controller HD44780, come il 99 % di quelli in commercio, ha 2 righe e 16 colonne. Per controllarlo sono necessari 6 pin di I/O del PIC (classico metodo di controllo in sola scrittura).

La retroilluminazione del display viene controllata in automatico dal microcontrollore, ovvero se è spenta e si preme un pulsante, viene attivata; dopo 30 secondi dalla pressione del’ultimo pulsante viene automaticamente disattivata, per un maggiore risparmio energetico.

I 6 pin di I/O sono collegati e denominati secondo la seguente tabella:

numero pin display funzione nome pin
 4  RS  RD2
 6  E  RD3
 11  D4  RD4
 12  D5  RD5
 13  D6  RD6
 14  D7  RD7

Il display viene controllato via software mediante una libreria (lcd.c).

La libreria permette un controllo semplice e veloce del display, in quanto comprende comandi per la stampa sul display del tipo lcd.puts(“testo”); assolutamente facili da ricordare e intuitivi.

display


Per il CONTROLLO DI POTENZA, si ricorre ad un MINI RELE’ A 12 V, collegato direttamente al positivo dell’alimentazione a 12 V prima del regolatore di tensione, in modo da non creare disturbi diretti sul PIC quando si attiva la bobina. Inoltre è collegato anche prima della batteria (con un diodo), così quando si interrompe l’alimentazione (per svariati motivi), il relé si diseccita in automatico, in modo da non sovraccaricare la batteria, che durerebbe troppo poco.

Il relé viene controllato mediante un transistor NPN (bc337) con l’emettitore a massa (il collettore è collegato all’altro polo della bobina).

mini_rele_12v


L’ALIMENTAZIONE è fornita da un alimentatore switching miniaturizzato, per diminuire le dimensioni, il consumo energetico e la dissipazione termica (che può interferire con la sonda di temperatura).

Il modulo switching è prodotto dalla Velleman (quando l’ho acquistato era etichettato “HQ power”, ma adesso si trova sul sito della Velleman) ed è veramente un concentrato di potenza e affidabilità.

pss1215m

Modello: PSS1215M  (notare che la “m” alla fine della sigla indica il modulo, infatti se cercare pss1215, senza “m” trovere la versione con la spina da muro)

Tensione ingresso: 230 Vac

Tensione di uscita: 12 Vdc

Corrente massima in uscita: 1,5 A

Dimensioni: 50 x 20 x 35mm


Per la misura della temperatura, è stata utilizzata una sonda analogica LM35.

LM35 si presenta in case TO-92, e si alimenta a 5 V mediante i due appositi pin.

In uscita assume un valore di tensione direttamente proporzionale alla temperatura misurata, e ogni grado centigrado il segnale varia di 10 mV.

Essendo una sonda analogica, deve essere interfacciata con gli ingressi analogici del microcontrollore. Inoltre i cavi devono essere più corti possibile e attorcigliati (twistati) per diminuire al minimo la sensibilità ai disturbi. Ovviamente non deve essere inserita all’interno del contenitore del cronotermostato, ma all’esterno, per aumentare la sensibilità alla temperatura ambiente.

Link al datasheet


Lo schema elettrico del progetto è riportato di seguito:

schema_TPZ47_tecnovolt

Lista componenti:

R1 = 39 k
R2 = 10 k
R3 = trimmer 4.7 k
R4 = 10 k
R5 = 39 k
C1 = 100 nF ceramico
C2 = 100 nF ceramico
C3 = 220 uF / 16 V elettrolitico
C4 = 15 pF ceramico
C5 = 15 pF ceramico
C6 = 33 pF ceramico
C7 = 33 pF ceramico
D1 = 1N1004
D2 = 1N1004
Q1 = BC337
Q2 = BC337
U1 = PSS1215M – HQPOWER (modulo switching)
U2 = LM7812 (dissipato)
U3 = LM35
U4 = PIC16F877A
K1 = relé uno scambio / bobina 12 V=
X1 = quarzo 20 Mhz
X2 = quarzo 32.768 kHz
S1 = LCD HD44780
SW1 ; SW2 ; SW3 ; SW4 = pulsanti da pannello


Leggere il manuale dell’utente finale per capire il funzionamento del sistema (utilizzo, configurazione ecc…)


Fotografie del progetto

Scheda appena dopo l’incisione con clururo ferrico (le macchie scure sono dovute alla non perfetto incisione, per questo preferisco la soluzione con H2O2 e HCl). Lo spazio in alto a sinistra è destinato ai collegamenti e ai cavi in uscita dal muro, e lo spazio in basso a destra è per la batteria.

scheda_solo_piste


Scheda finita e montata nel contenitore (la scheda è la versione vecchia, infatti si nota uno zoccolino a destra del pic che sarebbe destinato al RTCC, sostituito poi con il quarzo gestito dal timer0). Nella vite di fissaggio in basso a sinistra, si nota un cavetto bianco, quello è saldato alla pista della massa, e serve a schermare il contenitore.

tpz47_1


Particolare del retro del coperchio (in alto il display e in basso la pulsantiera).

tpz47_3


Cronotermostato in funzione (i pulsanti hanno un piccolo led che volendo potrebbe essere collegato in parallelo alla retroilluminazione del display, ma a me piacevano di più sempre spenti).

tpz47_4

 

 

 


 

 

FILES DEL PROGETTO:

–> Sorgenti e file HEX per PIC16F877A

–> Manuale utente finale

–> Datasheet LM35

–> Schema elettrico

 

(questo articolo proviene dal vecchio sito. Visualizzazioni al momento della migrazione: 115)

 

banner_licenza_cc-by-nc-nd-3-0-it

You can follow any responses to this entry through the RSS 2.0 You can leave a response, or trackback.

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Name the Author      
 

* Privacy Policy GDPR

*

Accetto