LM35 sıcaklık sensörü, sıcaklığı oransal analog voltaj değerine dönüştürür. LM35 üç terminal cihazdır. Birinci ve üçüncü pin 5 volt gerilim beslemesi içindir. Pin 2, sıcaklık değerine göre analog gerilim çıkışıdır. Ölçülen sıcaklık ve analog çıkış gerilimi arasındaki ilişki:

1oC = 10m volt

Bu nedenle sıcaklıktaki her 1 derece artış için LM35 sensörünün çıkış voltajında ??10m volt artış olacaktır. Analog gerilim değerini ölçmek için PIC16F877A mikro denetleyici kullandık.  PIC16F877A PORTA'nın yedi adet ADC kanalı vardır. Bu nedenle, bu mikro denetleyici ile yedi sensöre çok kolay bir şekilde yer verebilirsiniz. Dijital termometremize döndüğümüzde ADC, analog voltajı okumak için kullanılıyor. ADC değerini okuduktan sonra gerilim ve sıcaklık ilişkisi voltajı kullanılarak tekrar sıcaklığa dönüştürülür. Gerilimi sıcaklığa dönüştürmek için bir dönüştürme faktörü kullanılır. Tüm bu dönüşüm programlama yoluyla yapılmıştır. LCD, PIC16F877A mikro denetleyicisinin PORTB'sine bağlıdır. Bunu programlama bölümünde anlatacağım. LCD, sıcaklık değerini görüntülemek için kullanılır.

Devre Diagramı

Yukarıdaki şekilde gösterildiği gibi sıcaklık sensörü ve LCD'de aynı sıcaklık değerleri gösteriliyor. LM35 ve mikro denetleyicilerin korunmasını sağlamak için sıcaklık sensörünün çıkışına paralel 80k ohm direnç bağlayabilirsiniz.

Programlamada kısmi dönüştürme faktörü gerilimi tekrar sıcaklığa dönüştürmek için kullanılır. Dönüşüm faktörü:

1 volt = 100 degree

temp   = ( Output voltage * 100 oC/V )

Kod

Kodlar MIKRO C derleyicisinde yazılmıştır.

Assembly kodlar için : http://www.emreincu.com/index/makale/pic16f877-lm35-assembly-sicaklik-sensoru-uygulamasi

// LCD modülü bağlantıları

sbit LCD_D7 at RB2_bit;
sbit LCD_D6 at RB3_bit;
sbit LCD_D5 at RB4_bit;
sbit LCD_D4 at RB5_bit;
sbit LCD_EN at RB6_bit;
sbit LCD_RS at RB7_bit;

sbit LCD_D7_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB4_bit;
sbit LCD_D4_Direction at TRISB5_bit;
sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_RS_Direction at TRISB7_bit;

//değişkenler

int temp;
char temper[7];

void READ_temp(void)
{
temp = ADC_Read(0);
temp = temp * 5/1023;
temp = temp * 100;
}

void data_converstion(void)
{
inttostr(temp,temper);
}

void display1(void)
{

lcd_out(1,1,"TEMPERATURE=");
lcd_out(1,13, Ltrim(temper));
Lcd_Chr_Cp(0xdf);
Lcd_Chr_Cp('C');
Lcd_Chr_Cp(' ');
}

void main()
{
ADC_Init();
Lcd_Init(); // LCD'yi hazırla
Lcd_Cmd(_LCD_CLEAR); // Display temizle
lcd_cmd(_LCD_CURSOR_OFF);
lcd_out(1,4,"DIGITAL TEMPERATURE");
lcd_out(2,6,"SENSOR");
delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR); // Display temizle

while(1)
{
READ_temp();
data_converstion();
display1();
}
}