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 *
*
* *
******************************************/
#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
* *
* 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
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
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
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 licenzaCreative 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)