Ca senzor de temperatura folosesc LM35 ( ieftin si se gasesc oriunde ) ( datasheet ). Acest senzor va scoate pe iesire o tensiune proportionala cu temperatura, iar gama de masurare a temperaturii este: -55 - 150 grade Celsius. Pentru mai multe detalii consultati datasheet-ul .
Pentru afisearea temperaturii vom folosi un display LCD 2x16 ( doua randuri a cate 16 caractere ).
Inainte de a incepe trebuie sa facem o scurta ( foarte scurta ) introducere in ceea ce inseamna convertorul analog-digital ( ADC ).
-un ADC este un circuit electronic care converteste o marime analogica ( tensiune, curent,...etc ) de intrare intr-o marime digitala de iesire.
O caracteristica importanta a unui ADC este rezolutia acestuia, adica numarul de valori pe care poate sa-l furnizeze convertorul la iesirea sa in intervalul de masura. Lucrand cu date binare , rezolutia se va masura in biti.
Ex: daca rezolutia ADC-ului este pe 10 biti, convertorul poate furniza 1024 valori diferite la iesire.
Sa facem cateva calcule pe exemplul nostru:
- LM35 - iesirea se modifica cu 10mV la fiecare grad celsius.
- ADC-ul microcontrollerului nostru este pe 10 biti
- Tensiunea de referinta Vref = 5V
- ADCrez = 5V/1024 = 0,004882=4,88mV
25,5 * 10mV = 255mV=0,255V.
Cunoscand aceasta tensiune putem sa calculam ce valoare va avea ADC-ul la iesire astfel:
VALadc = 0,255 V / 0,004882 V = 52,22950.
Dupa ce am calculat VALadc putem sa calculam si tempratura :
Temp = VALadc *ADCrez (V) / 10 (mV/C ) = 52,22950 * 0,004882 (V) / 0,01 ( V/C ) = 25,5 C
Stiind toate acestea formula Temp va fi folosita si in programul nostru pentru microcontroller.
Schema proiectului :
Codul sursa:
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
char message1[] = "Temperatura:";
char tempC[15];
unsigned int tempinC;
float temp_value=0;
void main()
{
ANSEL = 0x04; // Selectare port AN2 ca fiind analog
ADCON1=0X80;
TRISA = 0x04;
ANSELH=0;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,message1);
Lcd_Chr(2,6,223);
Lcd_Chr(2,15,223);
Lcd_Chr(2,7,'C');
do {
tempinC = ADC_Read(2);
temp_value = tempinC*0.4882; // formula de calcul a temperaturii
FloatToStr(temp_value,tempC); // conversia in char a valorii lui temp_value
Lcd_Out(2, 1, tempC);
Delay_ms(1000);
} while(1);
}
Un mic filmulet demonstrativ:
Niciun comentariu:
Trimiteți un comentariu