Costruzione di una centralina per il controllo automatico di una pompa dell'acqua utilizzata per l'irrigazione. L'applicazione permette il controllo remoto anche con un telecomando radio e il monitoraggio del livello dell'acqua presente mediante un Sonar. Un display grafico a colori visualizza lo stato di funzionamento.
Il progetto
La realizzazione della centralina nasce dall'esigenza di gestire una pompa dell'acqua di un pozzo artesiano utilizzato per l'irrigazione. La centralina comanda una pompa funzionante a 230 Vac mediante un relè statico, permette il funzionamento temporizzato con un Timer programmabile e misura il livello dell'acqua presente grazie ad un Sonar. Oltre ai pulsanti di START/STOP e TIMER presenti nel pannello principale sono gestiti altri due pulsanti remoti e un telecomando radio. Le caratteristiche sono:

Lo schema a blocchi sintetizza le funzioni della centralina:

La scheda controller
La scheda controller contiene gran parte dell'elettronica ovvero il microcontrollore, il ricevitore radio, i due alimentatori (CPU e I/O optoisolati) e gli optoisolatori necessari per leggere i 4 ingressi a 24 volt e comandare le 4 uscite sempre a 24 Vdc. E' presente anche un RTC e un sensore di temperatura connessi al bus I2C del uP. Il display grafico a colori è fissato sul pannello operatore e riceve dalla seriale le informazioni da visualizzare.
Il microcontrollore
La scheda utilizza il microcontrollore a 8 bit Microchip 18F4620 con 64 Kbyte di flash codice e 1526 byte di ram. Sono utilizzate molte delle periferiche presenti come indicato nella tabella

in particolare le periferiche capture CCP1/CCP2 insieme ai timer 1/3 sono utilizzate per misurare la durata di segnali digitali con bassa latenza, mentre i principali eventi sono gestiti in interrupt.
Il firmware
Il software è scritto con il linguaggio C ed è basato sull'utilizzo del RTOS Salvo: questo ha permesso di strutturare il programma in 8 task ognuno con funzioni e priorità specifiche:
- TaskA_Main gestione pulsanti e funzioni
- TaskB_CpuClock verifica e correzione del clock interno
- TaskC_InOut lettura ingressi, analogica, scrittura delle uscite
- TaskD_Sonar gestione del Sonar
- TaskE_Faux funzioni ausiliarie, orologio, temperatura, livello RSSI
- TaskF_Diagno trasmissione dei dati al display grafico
- TaskG_Receiver gestione del telecomando radio
- TaskH_Ntc misura della temperatura del Sonar con la Ntc
Il display grafico
Il display visualizza le informazioni ricevute dal 18F4620, mediante la porta seriale, relative al funzionamento ovvero lo stato RUN/STOP, il livello dell'acqua, gli allarmi, il timer, la diagnostica ecc. Il modello utilizzato è il uLCD-32PT da 3.2'', risoluzione 320x240 pixel, 65K di colori prodotto dalla 4D SYSTEMS. Utilizzando l'IDE proprietario è possibile creare delle pagine di grafica e salvare il tutto nei 15 Kbyte di flash interna al display. Sono disponibili anche 5 pin di I/O, due porte seriali, bus i2C e lettore per micro SD.

Gestione
Il TaskA_Main controlla le funzioni principali della centralina ovvero accende/spegne la pompa a seconda dei pulsanti premuti o al telecomando, gestisce l'allarme del livello dell'acqua e del 24 volt utilizzato per gli I/O optoisolati. Le variabili Ope.Field.STATUS, Ope.Field.FAULT e Ope.Field.FUNC indicano rispettivamente lo stato operativo del sistema, eventuali fault hardware presenti e le funzioni disponibili. Queste informazioni, insieme a molte altre, sono disponibili nelle pagine Diagno e Function.

In particolare quest'ultima permette di attivare/disattivare le seguenti funzioni:
- spegnimento della centralina se non utilizzata nella fascia oraria 0.00-06.00
- misura del livello mediante il Sonar
- controllo remoto con il telecomando radio a 434 MHz
- sensibilità del ricevitore radio
- compensazione della temperatura nella misura del Sonar
- correzione del clock CPU
Il sonar
Il livello minimo dell'acqua viene rilevato con un galleggiante dotato di switch mentre grazie al Sonar è possibile monitorare in ogni momento la quantità d'acqua presente nel pozzo. Il modello utilizzato è il MB7052 della MaxBotix che si caratterizza per la flessibilità e la facilità d'utilizzo. Le sua caratteristiche sono:
- tensione di alimentazione 3.3-5.5 Vdc
- consumo a 5 volt 3.4 mA, peak 100 mA
- auto calibrazione
- impulso sonar di 42 KHz
- distanza min/max del target 30/765 cm
- risoluzione della misura di 1 cm
- tre differenti modalità di indicazione della misura
- filtri software anti rumore
- grado di protezione IP65
Questo modello è particolarmente adatto per la misura del livello dell'acqua perchè implementa nel software le funzioni "Noise and Clutter filtering" e "Target Speed". Con la prima vengono rimossi tutti gli echo dei target a breve distanza e solo quello più lontano viene mantenuto: questo permette di rimuovere gli echo prodotti dalle pareti del pozzo o dal tubo di pescaggio e solo il target dell'acqua viene rilevato. La "Target Speed" richiede che la variazione del target tra due letture sia minore di 10 cm altrimenti la misura viene scartata. Considerando la lenta variazione dell'acqua, anche durante il funzionamento della pompa, questa funzione contribuisce a eliminare eventuali false letture.

Il sensore è completamente resinato e nella parte posteriore è presente un connettore con 7 contatti: con uno di questi si comanda l'acquisizione mediante l'emissione di un impulso a 42 KHz mentre la distanza del target viene indicata con un impulso digitale. Il calcolo della distanza si determina dividendo la durata dell'impulso ToF (time of flight in uS) per 58 che rappresenta il tempo necessario all'impulso per coprire la distanza di 1 cm a 25 °C. Se si desidera la massima precisione nella misura bisogna tener conto che la velocità del suono varia in funzione della temperatura, pertanto il valore di conversione deve essere ricalcolato ad ogni variazione della temperatura di lavoro del Sonar.

Per questo motivo all'interno del contenitore dove è alloggiato l'MB7052 è presente una NTC, gestita dal TaskH_NTC, che ne rileva la temperatura. Il TaskD_Sonar comanda l'acquisizione ogni 6 secondi in STOP o ogni 2 se la pompa è in funzione, calcola la distanza e gestisce gli errori.
Terminiamo l'analisi completa del progetto della centralina vedendone la descrizione del ricevitore radio, la gestione del clock interno e l'installazione finale.
Il ricevitore radio

La centralina permette il controllo remoto mediante un telecomando radio grazie al ricevitore RX-AM4SF della Aurel operante alla frequenza di 434 MHz. Il ricevitore, integrato nella scheda controller, ha queste caratteristiche:
- schermatura EMI-RFI
- tensione di alimentazione 5 Vdc +/- 5% separata front end-detector
- consumo 6.5 mA
- due soglie di sensibilità -90/-108 dBm
- uscita analogica proporzionale al segnale ricevuto
- uscita digitale TTL compatibile
Il telecomando controlla lo START/STOP della pompa e utilizza un PIC 12F675 per generare una codifica a 12 bit tipo MM53200. Il codice abbinato al tasto premuto pilota il modulo di trasmissione da 50 mW @ 434 MHz sempre della Aurel; il tutto è inserito in un contenitore IP65 dotato di antenna. Il TaskG_Receiver si occupa della ricezione del codice decodificando i frame ricevuti. Collegando l'antenna esterna Aurel GP433 al ricevitore la portata, con contatto visivo, è di almeno 100 metri.

Correzione del clock CPU
Il clock del microcontrollore 18F4620 non è generato dal classico quarzo esterno ma dall'oscillatore interno alla CPU da 8 MHz. Purtroppo questo oscillatore non è stabile come un quarzo e la sua frequenza varia in funzione della temperatura e della tensione di alimentazione. La stabilià del clock CPU è fondamentale dato che i timer 1/3 vengono utilizzati per la misura di segnali digitali. La scelta di utilizzare il clock interno ha, sì, da un lato, permesso di risparmiare spazio sul PCB (molto poco..) ma, dall'altro, ha anche aumentato la complessità del firmware dato che ho dovuto inserire un controllo sulla stabilità del clock.

Il clock interno viene calibrato in fase di produzione con una precisione del +/- 1% a 25 °C e le eventuali variazioni possono essere corrette con il registro OSCTUNE. Il registro permette una correzione del +/- 12% ma con solo 5 bit pertanto la risoluzione è del 0.75% ovvero 60 KHz. Il TaskB_CpuClock si occupa del controllo della stabilità misurando un clock di riferimento da 16 Hz generato dal RTC M41T81 e calcolando di conseguenza la necessaria correzione per l'OSCTUNE.
Ho verificato l'effettiva variazione del clock a 8 MHz (presente sul pin RA6 @ 2MHz) nel range di temperatura 0/60 °C riscontrando una variazione massima di -0.32% pari a 25600 Hz a 0 °C, valore inferiore alla soglia necessaria per la correzione.

La funzione di correzione rimane comunque presente per correggere eventuali derive del clock dovute all'invecchiamento del micro. Ciò non toglie che è possibile utilizzare un quarzo esterno da 8 MHz configurando opportunamente il 18F4620 e eliminando il task non più necessario.
Schemi elettrici
Gran parte dei componenti presenti nella scheda controller sono in SMD e questo ha permesso di contenerne le dimensioni. Il layout mostra le funzioni dei connettori e dei led presenti mentre di seguito è riportato lo schema elettrico con la disposizione dei componenti.

Installazione
L'immagine seguente mostra la centralina in funzione e inserita nel contenitore per esterno Gewiss modello GW40102, grado di protezione IP65. Il pulsante rosso serve per lo START/STOP mentre il verde attiva il TIMER. Il display indica l'ora, la data, lo stato della pompa e il tempo di funzionamento. Sul lato destro è rappresentato il pozzo che nell'applicazione specifica ha una profondità di 2.5 metri. L'acqua presente è di 1.18 metri, sotto è indicato il volume in mc e la temperatura del Sonar rilevata dalla NTC.
Togliendo il coperchio, partendo dall'alto, è possibile individuare:
- cavo coassiale 50 ohm connesso all'antenna esterna GP433
- la scheda controller
- lo sganciatore F80ST1
- il magnetotermico F881N6
- porta fusibile di protezione per il trasformatore d'alimentazione
- relè statico Fotek SSR25
- trasformatore toroidale 230/12+12 12VA
- cavi di alimentazione e dei sensori
Conclusioni
Negli allegati è presente lo schema elettrico, i file gerber e i sorgenti sia del PIC 18F4620 che del display grafico. E' presente anche una relazione, in formato pdf, che descrive in forma più approfondita tutto il progetto. Che ne pensate?
Allegati
Schematic_Controller_rev00.pdf

Ciao
Complimenti, mi sembra un ottimo articolo.
Ottima anche la realizzazione del pannello frontale.
Dal tuo progetto credo che si potrà prendere spunto per altri progetti.
Infatti, credo che inserendo altri sensori e magari aggiungendo dei relay si possa adattare a vari campi d’applicazione.
Nel tuo progetto sei riuscito a inserire: scheda di controllo, LCD Grafico, sensore sonar, sistemi di trasmissione.
Mi è piaciuto molto l’utilizzo del display grafico, effettivamente di solito si utilizza sempre un normale display LCD 16X2, rappresentare graficamente il livello del serbatoio è sicuramente meglio che il solo valore numerico.
Non avevo ancora visto un’applicazione completa con circuito e programma.
Mi scaricherò il materiale e darò un’occhiata approfondita a tutta la documentazione, ed eventualmente ti chiederò approfondimenti.
Saluti
Adriano
Ciao,
mi fa piacere che il progetto ti è piaciuto. La scheda controller è abbastanza versatile dato che ha 4 ingressi / 4 uscite optoisolate a 24 volt, un canale seriale TTL e qualche IO digitale; il uP 18F4620 ha 64k di flash codice è puo funzionare fino a 40 MHz. Il display della 4D system ha anche il touch screen, ma dato che si è rotto… l’ho riciclato per questa applicazione.
Saluti,
Massimo Varese
Davvero un lodevole progetto che illustra come interfacciarsi con i moduli Aurel, con i display 4DSystems ma soprattutto mi ha fatto molto piacere di vedere in un progetto l’uso di un RTOS con un PIC a 8 bit, il Salvo appunto.
D’altronde non era possibile fare diversamente a meno di non incorrere in problemi nel funzionamento dei vari sottosistemi (specie l’input dei tasti e la visualizzazione sul display).
Ancora complimenti per l’ottimo lavoro.
Grazie per i complimenti !
su tutti i progetti con i PIC16/18 utilizzo l’RTOS Salvo che è fatto apposta per uP con poche risorse. Strutturare il software con diversi Task ognuno con propri tempi/priorità rende, a mio avviso, il tutto più flessibile e dinamico rispetto al classico main con loop infinto.
Saluti
Massimo Varese
A mio modesto avviso, un progetto di quelli che per quantità di argomenti trattati, chiarezza espositiva, materiali utilizzati e documentazione rilasciata non se ne vede uno al giorno.
Come è stato detto da qualcuno prima di me, gli spunti di riflessione sono tanti. Ad esempio, al momento sto lavorando ad un progetto in cui è presente un modulo Aurel ASK a 433 MHz comandato da un picrf12f675: non è esattamente la stessa componentistica ma mi sa che prenderò spunto dal tuo lavoro 😉
Altra cosa che personalmente ho apprezzato è stato l’inserimento dei file Gerber nella documentazione progettuale: spesso si dà per scontato (e a volte lo faccio anch’io…) che per progetti destinati ad hobbysti siano sufficienti i master degli stampati per la fotoincisione, ma pensandoci bene non è detto che tutti quanti gli hobbysti utilizzino quel metodo 😉
Unica cosa che personalmente modificherei è il lungo firmware scritto tutto su un unico file, ma solo per questioni di leggibilità, considerando comunque che è ben commentato.
Davvero un gran bel progetto, complimenti!
Ciao a tutti !! Sono nuovo e non riesco a trovare gli allegati dove è presente lo schema elettrico, i file gerber e i sorgenti sia del PIC 18F4620 che del display grafico, dove posso trovarli ?
Bellissimo progetto !!!
Allegati ora disponibili. Grazie della segnalazione!
Grazie a voi !!