TERMOMETRO CON LCD E TERMORESISTENZA PT100

NE555   Schema con Microcontrollore per Realizzare un Termometro con LCD e Termoresistenza PT100 o PT1000 come Sensore…

 

 

 

 




 

INTRO

Nella guida precedente è stato illustrato il funzionamento dei sensori di tipo PT100 e PT1000 e grazie ad essi è possibile realizzare un termometro che arriva fino a valori molto alti di temperatura e anche valori negativi.

Lo schema usa un riferimento di corrente per eccitare il sensore ottenendo una ottima linearità di lettura del sensore e quindi un valore di temperatura mostrato a display molto precisa.

In questo schema si possono usare sonde a due fili o 4 fili e in particolare si usa una connessione a 3 fili o a due nel caso di una sonda con solo due fili.

Con una piccola modifica si può usare indistintamente una sonda di tipo PT100 e PT1000, rendendo ancora migliore lo schema se si usa una sonda PT1000 nel caso si disponga o si voglia una sonda semplice con soli due fili.

La temperatura viene mostrata su un display LCD.

 





 

CODICE

Il codice è il seguente:

sbit LCD_RS at RB5_bit;                     // Configurazione Pin I/O
sbit LCD_EN at RB4_bit;                     //Indico alla libreria
sbit LCD_D4 at RB3_bit;                     //come è connesso l'LCD
sbit LCD_D5 at RB2_bit;
sbit LCD_D6 at RB1_bit;
sbit LCD_D7 at RB0_bit;


sbit LCD_RS_Direction at TRISB5_bit;        //Indico se ho ingressi o uscite
sbit LCD_EN_Direction at TRISB4_bit;
sbit LCD_D4_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB0_bit;

unsigned int adcvalue;                    //Variabile valore uscita da ADC
signed int Tem1;                        //Variabile temperatura da
float Tem;                                //Valore convertito della temperatura
char Text[7];                             //Stringa contenente la temperatura


 void print_temp(char text){        //Sottoprogramma per la visualizzazione della temperatura
  Lcd_Cmd(_LCD_SECOND_ROW);         //invia cursore sulla seconda riga
  Lcd_Out_Cp(text);                 //scrivi la parte intera della temperatura
  Lcd_Chr_Cp(223);                  //codice per scrivere il simbolo di grado °
  Lcd_Chr_Cp('C');                  //scrivi C
}


void main(){                          //Programma principale

  Lcd_Init();                         // Initializza LCD
  Lcd_Cmd(_LCD_CLEAR);                // Pulisci LCD
  Lcd_Cmd(_LCD_CURSOR_OFF);           // Cursore non visibile

  Lcd_Out(1,2,"TEMPERATURA:");        //Scrivi la stringa TEMPERATURA sulla prima riga

  ADC_Init();                         // Initializza il modulo ADC con valori di default


  while(1){                            //Ciclo infinito

    adcvalue = ADC_Get_Sample(0);      //Lettura da ADC
    Tem = 0.48828 * adcvalue;          //Conversione da Byte a Decimale
    Tem = (Tem - 200)*1.25;

    Tem1 = Tem;                        //conversione in intero

    IntToStr( Tem1, Text );            //conversione in stringa
    print_temp(text);                  //Invia i valori da visualizzare al sottoprogramma

    delay_ms(500);
  }
}

Bisogna considerare che il sensore PT100 viene eccitato con una corrente di 10mA mentre il PT1000 con una corrente da 1mA come vedremo dopo, in ogni caso si hanno 8mV per ogni grado centigrado di temperatura.

Prima di tutto nel codice bisogna inizializzare l’LCD e le variabili necessarie per il programma. Poi si crea una sotto porzione di codice per pilotare l’LCD, questa sottofunzione riceve una stringa che contiene il dato di temperatura e vi aggiunge “°C”, tutto questo sulla seconda riga. Poi viene inizializzato L’ADC e in un ciclo infinito si vanno a eseguire le seguenti istruzioni:

  1. Leggo il dato dall’ADC
  2. Moltiplico il dato acquisito per 0.48828 per trasformarlo da bit a decimale
  3. Sottraggo 200 e poi moltiplico per 1.25 per adattare il dato agli 8mV/°C
  4. Converto il valore in intero e poi lo converto in stringa
  5. Richiamo il sottoprogramma per la scrittura della temperatura su l’LCD
  6. Faccio un delay di 500ms per avere due letture al secondo

Questo codice può essere usato su tutti i PIC16 e PIC18 che dispongono di un ADC e almeno 8 uscite.

 





&nbps;
SCHEMA

Lo schema è molto semplice.

NE555

La tensione di alimentazione ha un valore di 5V stabilizzati, con una corrente di almeno 100mA.

Il PIC18F252 viene alimentato a 5V collegando i PIN8 e PIN19 a massa e il PIN20 a VCC.

Per generare la corrente che eccita il sensore si utilizza un riferimento di corrente LM324 con una resistenza da 6.8 Ohm tra il pin 1 e 3 in modo tale da avere 10mA in uscita. Se si usa una sonda PT1000 serve 1mA per eccitare il sensore, quindi bisogna usare una R4 da 68 Ohm.

Il sensore di temperatura PT100 (o PT1000) riceve la corrente per eccitarlo e genera ai suoi capi una tensione proporzionale alla temperatura. Nello schema si usa una sonda che dispone di 4 fili creando una connessione a 3 fili, ma si può usare una sonda con soli due fili considerando connessi insieme E+ e S+ e poi S- e E-.

La tensione S+ giunge al PIN3 dell’operazionale U3A che moltiplica di un valore 2 il segnale in funzione della temperatura. La tensione amplificata giunge al primo canale dell’ADC.

Al PIN1 bisogna portare un livello logico alto per evitare che il PIC18F252 si resetti, questo viene fatto con una resistenza di pull-up da 10KΩ. Il circuito di oscillazione è composto dal risuonatore al quarzo X1 da 4MHz e dai condensatori C1 e C2.

NE555

La resistenza variabile RV1 serve per la regolazione del contrasto dell’LCD che viene alimentato anch’esso a 5V. Nello schema manca l’alimentazione della retroilluminazione dell’LCD che viene fatta collegano il catodo a massa e l’anodo a VCC interponendo però una resistenza da 470Ω.

 

DOWNLOAD

Potete scaricare la simulazione del circuito con PROTEUS al seguente LINK!!!




 

2998 Visite totali 24 Visite di oggi
TERMOMETRO CON LCD E TERMORESISTENZA PT100 ultima modifica: 2017-03-09T18:39:38+00:00 da ne555

Lascia un commento

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