Livellometro analogico led

Identificazione progetto

progetto

autore

email

note

Livellometro con 16F876A

dott. Giuliano Gentili

biotechnologypower@gmail.com

Un potenziometro opportunamente agganciato ad un galleggiante fornisce una tensione proporzionale al canale analogico AN0

Premessa

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. 

Schema elettrico con descrizione

Lo schema elettrico e' di derivazione diretta della Micro-GT mini ovvero quello disponibile all'interno del file scheletro da cui si inizia a editare l'articolo. 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.

Figura 1

 

 

Circuito stampato descrizione

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.

Figura 2

 

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                          *

*                                                                                 *

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

#include <pic.h>

#include "delay.h"

#include "ADC.h"

#include "settaggiADC.h"

#define smin 1

#define smax 195

 

 

//Routine principale...

 

void main(){

settaggiADC();

unsigned int valore1;

unsigned int incr;

 

 

ADCON1 = 0b10000000;

incr=(smax-smin)/8;

    while(1){

      valore1=leggi_ad(0);

           if((valore1>=smin)&&(valore1<=smin+incr)){

             PORTB=0b00000000;

     }

if((valore1>=smin+incr)&&(valore1<=smin+2*incr)){

PORTB=0b00000001;

}

if((valore1>=smin+2*incr)&&(valore1<=smin+3*incr)){

PORTB=0b00000011;

}

if((valore1>=smin+3*incr)&&(valore1<=smin+4*incr)){

PORTB=0b00000111;

}

if((valore1>=smin+4*incr)&&(valore1<=smin+5*incr)){

PORTB=0b00001111;

}

if((valore1>=smin+5*incr)&&(valore1<=smin+6*incr)){

PORTB=0b00011111;

}

if((valore1>=smin+6*incr)&&(valore1<=smin+7*incr)){

PORTB=0b00111111;

}

if((valore1>=smin+7*incr)&&(valore1<=smin+8*incr)){

PORTB=0b01111111;

}

if((valore1>=smin+8*incr)&&(valore1<=smax)){

PORTB=0b11111111;

}

}

}

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

file fettaggiADC.h

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

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; // enable ADC, RC osc.

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

Ecco il film che dimostra il funzionamento del mio 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

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

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

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

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

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

Figura 8

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

 

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

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

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

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 licenzaDescrizione: http://www.gtronic.it/energiaingioco/it/scienza/cap12_RobotHandV2_file/image025.gifCreative Commons Attribuzione-Condividi allo stesso modo 3.0 Italia

 

Visita i siti web sviluppati da Marco Visentini:

http://www.bb-yewilliam.it/    (il bed end brekfast di Jenny per chi fosse di passaggio a Padova)

http://www.amministrazionibugno.it/   (l'agenzia di amministrazione condominiale dell'amico Massimiliano)

 

  Pagina precedente