Get Adobe Flash player

Misuratore di livello

User Rating:  / 0
PoorBest 

Link Articolo Originale: http://www.grix.it/viewer.php?page=10498

 

Introduzione:

Mi sono avvicinato da pochi giorni alla programmazione dei PIC dopo avere conosciuto quasi per caso l'ing. Gottardo "ad.noctis" e Visentini "Loreo" alla facolta' di ingegneria di Padova. Benche' il mio percorso di studi sia ben diverso da ingegneria ho trovato l'esposizione della Micro-GT presentata sul corso Let's GO PIC!!! semplice e intuitivo cosi che mi ci sono cimentato praticamente subito e senza grandi difficolta'.

Il progetto e' la realizzazione di una mia necessita' di avere il controllo del livello di una vaschetta che fa parte di una dispositivo piu' grande e complesso a scopo botanico.

Figura 0

Struttura meccanica realizzata del misuratore di livello.

Intendo pubblicare questo articolo qui su grix ma anche sulla nascente community tematica della MicroGT in modo da potermi confrontare con altri possessori e/o appassionati di questa piattaforma.

L'indirizzo diretto alla community è il seguente, in cui potrebbe venire pubblicato l'articolo anche prima che compaia qui su grix, ma lo voglio proporre comunque anche per avere un giudizio da un gruppo più vasto.

 http://www.gtronic.it/community/community.html

Il firmware è di derivazione diretta "Let's GO PIC!!!" ma non potrebbe funzionare senza opportune modifiche dato che la "meccanica" consente un gioco (rotazione) limitata a circa 1/3 rispetto alla corsa totale del cursore del potenziometro.

In queste modifiche sono stato assistito da Marco Visentini, conosciuto come "Loreo" e che vedrete comparire sui video che abbiamo girato.

Schema Elettrico con Descrizione: 

Nella nascente community, raggiungibile all'indirizzo scritto sopra, è messo disponibile al download lo schema elettrico della Micro-GT mini da cui sono partito per lo sviluppo del mio progetto. E' possibile scaricare un file chiamato "scheletro" da cui ho iniziato a editare l'articolo aggiungendo allo schema, tramite Eagle, il mio potenziometro, come vedrete tra qualche riga. La sezione che viene mostrata e' quelle relativa al morsetto X2 che essendo posto subito a valle del regolatore di tensione integrato mostra ai suoi capi una tensione stabilizzata a +5V. Il cursore viene portato al pin piu' a destra (piu vicino alla morsettiera). Una misurazione con il tester conferma che vi e' una variazione di tensione compresa tra 0 e 5V.

Dato che il cursore ha un valore ohmmico di 1k ohm, la corrente che circolerà in esso è facilmente deucibile con a legge di ohm   V=R*I   quindi 5V diviso 1000 = 5mA, valore più che sufficiente per mantenere il segnale ben vincolato a massa.

Anche se è possibile variare il valore di questo componente a seconda di cosa abbiamo disponibile nelle cassettiere dei componenti di recupero è consigliato evitare di salire troppo con il valore ohmico, dato che si potrebbe ottenere un segnale analogico poco vincolato alla massa e quindi un pò flottante, con il risultato di una elevata sensibilità ai disturbi come i campi elettromagnetici esterni (si pensi ad esempio a un telefonino che suona nelle vicinanze), oppure un valore troppo basso che comporta una corrente troppo alta nel potenziomentro stesso, che va  a influenzare la misura stessa a causa del surriscaldamento.

Mi hanno spiegato, qui alla facoltà di ingegneria di padova in cui ho redatto questo articolo, che un valore ottimale di corrente di attraversamento, per il tipo di potenziometro impiegato, è compreso tra 1 e 5mA, a cui corrisponde il valore in Kohm da calcolare come ho mostrato in precedenza con la legge di ohm.

Figura 1

Collegamento del potenziometro per prelevare il segnale.

Il potenziometro è di tipo lineare, quindi a rotazioni angolari "uguali" del cursore corrispondono variazioni ohmiche "uguali" indipendentemente dalla posizione in cui si trova il contatto a strisciamento, facciamo quindi attenzione a non montare un potenziometro di tipo logartimico come quelli impiegati nelle applicazioni audio perchè comporterebbero una falsatura della misura letta a meno che non si renda "antilogoratimica" l'aquisizione del valore analogico da parte del programma sviluppato in ansi "C"   .

Descrizione Circuito Stampato:

Lo schema elettrico che riporta la connessione del potenziometro ad 1k lineare, all'ingresso analogico AN0 e' scaricabile dal successivo link. Per le prove ho utilizzato la barra LED onboard connessa tramite cavetto flat, nella versione definitiva ci sara' una barra composta da 5 led verdi, 2 led gialli, 1 rosso di tipo piatto  

Download Schema in formato Eagle del misuratore di livello con Micro-GT mini

La scheda Micro-GT con collegato il canale analogico AN0 e' visibile nella foto. Si noti il cavo viola che proviene dal cursore del potenziometro. I cavetti grigio e verde , che entrano lateralmente risultano collegati al morsetto X2-1 e X2-2 e costituiscono la tensione di alimentazione dello stesso, ovviamente a 5V.

Si ricorda che i convertitori AD di questo PIC sono a 10 bit, quindi presenteranno un valore numerico convertito dalla tensione fino a 1024.

Questo è però il valore numerico "massimo" che si può ottenere tenedo il mano il potenziometro svincolato dalla nostra struttura meccanica, quando invece collegheremo la vaschetta ci accorgeremo che il range sarà ridotto anche a meno dell'un terzo previsto (dipende da come è fatta la vaschetta usata) quindi, vedremo un teorico 1024/3 -> 340 circa, in realtà le necessarie tarature aggiustano un po' anche questi valori teorici. Questo è il motivo percui non si può pretendere di scaricare il programma proposto dal corso Let's GO PIC!!! e  di vederlo funzionare correttamente nell'immediato dato che dipende dalla nostra meccanica.

Figura 2

la mia Micro-GT mini collegata al potenziometro analogico.

Osservando il sistema, possiamo notare che l'asta non sarà perfettamente verticale a vasca scarica, vi è infatti un angolo residuo, e non saremmo perfettamente a 1/3 quando la vaschetta è piena.

La tensione rilevata con un tester a galleggiante a pieno carico è di circa 1,2V rispetto all'attesa 1,6 o 1,7 volt previsti, il valore di fondo scala della conversione analogica assegna alla variabile intera in valore di poco inferiore a 200, e tale valore viene usato nel mio programma come soglia di accensione dell'ultimo LED della barra.

Attenzione ad un altro inconveniente intrinseco nella teoria stessa. Il galleggiamento della sonda non è immediato, ma avviene solo secondo la nota legge di archimede, ovvero quando è stata spostata tanta acqua quanto è il peso del galleggiante più quello della asta di sostegno fino al fulcro (in fisica si chiama braccio), ne consegue che la lettura nella barra led ha lo zero che non coinciderebbe con "Zero acqua presente in vasca". ma con una sorta di "riserva". Nel film che abbiamo caricato su youtube vedrete infatti che il primo LED non ha un'accensione immediata rispetto al riversamento dell'acqua in vasca. Solo dopo che la spinta di Archimede solleva il galleggiante dal fondo allora si comincia a rilevare la presenza del liquido con crescita lineare della barra led.

Descrizione del Firmware:

Questo programma e' di derivazione Let's GO PIC!!!, ovvero e' stato da me capito e riadattato alle mie esigenze. E' fondamentale capire tutte le parti componenti del programma distribuite su piu' file, in modo particolare i settaggi dei registri interni e le soglie di comparazione al fine di stare dentro al range di movimento dell'asta  che risulta essere circa un terzo del range massimo. La barra LED si deve accendere tutta e in maniera lineare e entro questo "terzo" di movimento disponibile del rotore del potenziometro.

file del main program:

---------------------------------------------------------------------------------------------------------------------------------------

/******************************************

*      MISURATORE DI LIVELLO ESEGUITO                *

*              tramite un potenziometro 1K Ohm                    *

*                     da GIULIANO GENTILI                              *

*                            1 MARZO 2012                                     *

*                   Piattaforma Micro-GT mini                           *

*                  PIC16F876A 20Mhz                  *

******************************************/

#include <pic.h>

#include "delay.h"

#include "ADC.h"

#include "settaggiADC.h"

#define smin 1         //definizione del valore di soglia minima ovvero dove si spegne il primo LED scaricando la vasca

#define smax 195   //definizione del valore di soglia massima ovvero dove si accende l'ultimo LED riempendo la vasca

//Routine principale... 

void main(){

settaggiADC();

unsigned int valore1;

unsigned int incr;

ADCON1 = 0b10000000;

incr=(smax-smin)/8;  // definisce la risoluzione, ovvero incremento tra un led e il successivo

    file settaggiADC.h

    while(1){
      valore1=leggi_ad(0);
           if((valore1>=smin)&&(valore1<=smin+incr)){ //condizione livello vasca vuota
             PORTB=0b00000000; //nessun led acceso
     }
if((valore1>=smin+incr)&&(valore1<=smin+2*incr)){ //condizione livello 1
PORTB=0b00000001; //un led acceso
}
if((valore1>=smin+2*incr)&&(valore1<=smin+3*incr)){ //condizione livello 2
PORTB=0b00000011; //due led accesi
}
if((valore1>=smin+3*incr)&&(valore1<=smin+4*incr)){ //condizione livello 3
PORTB=0b00000111; //tre led accesi
}
if((valore1>=smin+4*incr)&&(valore1<=smin+5*incr)){  //condizione livello quattro
PORTB=0b00001111; //quattro led accesi
}
if((valore1>=smin+5*incr)&&(valore1<=smin+6*incr)){ //condizione livello 5
PORTB=0b00011111; //cinque led accesi
}
if((valore1>=smin+6*incr)&&(valore1<=smin+7*incr)){ //condizione livello 6
PORTB=0b00111111; // sei led accesi
}
if((valore1>=smin+7*incr)&&(valore1<=smin+8*incr)){ //condizione livello sette
PORTB=0b01111111; //sette led accesi
}
if((valore1>=smin+8*incr)&&(valore1<=smax)){//condizione vasca piena
PORTB=0b11111111; //tutti i led sono accesi
}
}
}

--------------------------------------------------------------------------------------------------------------------------------

void settaggiADC(){

TRISA=0XFF;

TRISB=0;

TRISC=0;

PORTB=0;

PORTC=0;

}

-------------------------------------------------------------------------------------------------------------------------------------

file ADC.h     con la funzione di acquisizione analogica e assegnazione del valore convertito in numero intero

-------------------------------------------------------------------------------------------------------------------------------------

/**************************************************

*                                                                                                                  *

*     MODULO PER LA LETTURA DEI CANALI ANALOGICI      *

*                                                                                                                 *

*                            chiamare la fz leggi_ad(n);                                      *

*                    dove n: numero del canale in ingresso                         *

*                                                                                                               *

*                                                                                                                *

************************************************/

int leggi_ad(char canale)

{

int valore;

ADCON0 = (canale << 3) + 0xC1; // abilita la conversione analogica digitale

DelayUs(10); //Ritardo per dare modo all'A/D di stabilizzarsi

ADGO = 1; //Fa partire la conversione

while(ADGO)

continue; //Attende che la conversione sia completa

valore=ADRESL; //Parte bassa del risultato

valore= valore + (ADRESH<<8); //Parte alta del risultato

 

return(valore);

}

--------------------------------------------------------------------------------------------------------------------------------

download del progetto MpLab scritto in C16 contiene anche il file hex

Customizzazione del firmware

Come di certo avrete notato non ho applicato nessun sostanziale controllo in uscita, questo perchè il sistema è aperto e ve lo potrete confezionare su misura a seconda delle vostre esigenze.

Se non siete ferrati in tema di programmazione PIC in linguaggio hitech "C", potrete comunque fare scattare delle elettrovalvole usando i segnali prelevati direttamente sul pin del processore, quindi a monte della resistenza di limitazione della corrente sul led del livello desiderato come visibile nello schema sottostante.

 

Schema 2

Micro-GT mini -schema di interfacciamento con una piccola elettrovalvola.

Nello schema 2, il segnale è stato prelevato al quarto pin di uscita del misuratore di livello, quindi RB3, quindi a metà del livello vasca.

Il BC337 va bene solo se intendete usare una valvola micropneumatica della festo che presenta un solenoide con una corrente di mantenimento inferiore a 100mA e comunque una potenza mai superiore ai 250mwatt.

Rispetto allo schema potrebbe essere utile aggiungere un diodo in parallelo alla bobina con il catodo verso il Vcc allo scopo di ricircolare le correnti dovute all'extra tensione di apertura del carico induttivo.

Mentre per la bobina micropneumatica questo diodo potrebbe essere opzionale per elettrovalvole un po più robuste è bene cambiare anche il transistor, mettendo ad esempio un TIP122 (con 330 ohm in base) e un bel diodo veloce per il ricircolo in grado di portare almeno 2A.

L'isteresi preimpostata nel software permetterà all'elettrovalvola di scarico di far defluire l'acqua dalla vaschetta verso l'utilizzatore fino a allo spegnimento del led precedente.

Benchè si tratti di un controllo ON/OFF con isteresi, quindi abbastanza grossolano, tutto funziona regolarmente e per molte applicazioni la precisione consentita potrà risultare più che sufficiente.

Una prima variante è quella di applicare un commutatore rotativo con un minimo di 2 fino a 8 posizioni che permetta di collegare la resistenza RB non solo a RB3 ma alcuni o a tutti i pin del PORT B, effettuando una possibile variazione della soglia di intervento rispetto al valore del livello del liquido che vogliamo tenere costante in vasca.

Il sistema è semplice ed efficace, ma comunque fisso.

Per chi fosse in grado di programmare in dotnet si potrebbe mantenere fissa la RB ad esempio al PORT C, e variare la soglia di intervento tramite un cursore a video.

Per chi volesse intercettare la soglia via software attivando ad esempio RC0 basterà aggiungere il seguente comparatore condizionale sul valore prescelto.

if (valore1>100) {RC0=1};  //valore scelto a mezza vasca che corrisponde a circa 100

else

{RC0=0};

Ecco il film che dimostra il funzionamento del mio sistema.

  

 Video spiegazione del funzionamento del sistema.

Sembra che sia andato tutto a buon fine...che ne pensate?    vi piace?     non male per essere il mio primo progetto.

Consiglio a tutti coloro che volessero iniziare con i PIC la lettura del corso online "Let's GO PIC!!!" presente in questo sito.

 

Note aggiuntive: Costruzione del Sistema idraulico/meccanico:

La costruzione del sistema potrebbe essere un po' impegnativa per chi non possiede una discreta manualita' e fantasia.  E' necessario munirsi di un minitrapano, io ho usato un dremel,  con cui ho forato l'asta del potenziometro usando una punta da 2 millimetri di diametro.

Figura 3

il mio dremel, ottimo strumento per moddellismo e lavori in miniatura.

Come possiamo notare la foratura del potenziometro risulta piu piccola (diametro 2mm) rispetto a quella dell'asta del galleggiante (diametro 3mm), per permettere il raccordo meccanico tramite una vite autofilettante da 3 mm. E' indispensabile, per la precisione del sistema, che non si creino giochi elastici o laschi nelle meccaniche dato che il sistema a microprocessore e' molto p[reciso e sensibile e quindi potrebbe risentirne fornendo false misurazioni.

Figura 4

il fissaggio del potenziometro all'asta del galleggiante.

Le parti meccaniche come i supporti estraibili del potenziometro, si puo' infatti estrarre dalla vaschetta semplicemente tirando verso l'alto, e l'astina sono costruite con una sottile lamiera di ottone. La scelta di questo materiale e' ottimale dato che si taglia con una semplice forbice da elettricista dopo avere disegnato i contorni con la matita, e si piega con una semplice pinza o pinzetta.

.

Figura 5

il taglio delle lamierine di ottone, note anche come "carta spagna"

La lamiera metallica risulta molto facilmente lavorabile ma comunque garantisce una buona resistenza allo sforzo una volta munita delle necessarie nervature create dalle piegature. Questione ben nota agli ingegneri che hanno sostenuto l'esame di scienza delle costruzioni.

Figura 6

la piegatura delle lamierine di ottone

Si procede quindi alla piegatura usando una piccola pinza a becchi stretti. In qualche occasione mi sono aiutato forzando il pezzio di ottone contro gli spigoli del tavolo e forzando con un po di energia  a mani nude.

Figura 7

l'innesto del potenziometro sull'asta el galleggiante.

Innesto dell'astina del potenziometro per testare l'accoppiamento meccanico. La piegatura sembra essere stata effetuta in maniera soddisfacente.

Figura 8

le misure e le properzioni

Ho proceduto ricavando le misure della profondita' del supporto laterale semplicemente appoggiando il pezzo di lamiera di ottone sul fondo della vaschetta di carico.

Figura 9

il test di gravità

Il sistema meccanico completo ha l'aspetto in figura sovrastante e, una volta fissate per bene le parti meccaniche si testa se la gravita' lo porta in posizione verticale senza grandi sforzi o attriti.  Questo test di gravita' e' visibile nel filmato che segue postato su youtube.

  

il video del test di gravità

Vediamo la vaschetta usata, si tratta di una parte inerna di un imballo termostato, una specie di piccolo frigo da spiaggia per lattine.

Figura 10

la vaschetta impiegata prima della modifica

Le misure esterne della vasca sono 18 cm x 24 cm (nel rettangolo della vista in pianta, ovvero la base), mentre l'altezza e' di 12 cm.    Lo spessore della parete interna e' di 12mm quindi si ottiene con un semplice calcolo il volume interno che vale circa 3,8 litri. Ovviamente su vaschette diverse il sistema continua a funzionare ma i comparatori software vanno ovviamente ritarati. 

Figura 11

la vaschetta con applicato il sistema di rilevamento (nessuna modifica strutturale alla vaschetta)

La vasca con il sistema innestato sul fianco si presenta come in figura. Per migliorare l'angolo di zero livello e' possibile innestare sul bordo uno spessore ottenuto sempre dal un pezzo di polistirolo. La stabilita' meccanica si presenta solida e stabile, del resto e' fatta di metallo per quanto siano sottili le lamiere impiegate.

 

Figura 12

il sistema in uso, la vashetta è piena

La vaschetta di recupero verde che vediamo sotto alla nostra vasca di carico simula l'esatta situazione del sistema quando sara' in opera. In questa foto la vaschetta e' a pieno carico e si puo' notare l'ottima risposta di galleggiamento. Testando la spinta di archimede con le mani, ovvero cercando di portare in immersione il galleggiante si nota che vi e' una notevole spinta di reazione.

Figura 13

ll collegamento delle cannette di scarico (sono cannucce delle bibite)

Eccomi intento nelle ultime messe a punto della vaschetta di simulazione.  Ho collegato tra loro piu' cannucce del tipo normalmente usate per consumare le bibite in lattina nell'intento di costruire un dispositivo di scarico/prelievo del liquido visto che il livello in vasca deve sia salire che scendere.

Buon divertimento a tutti.

Giuliano Gentili

Questo progetto è ridistribuibile secondo i termini di licenza Creative Commons Attribuzione-Condividi allo stesso modo 3.0 Italia

Login Form

Elettronica Open Source