Aplikasi pembacaan suhu (monitoring suhu) ini, menggunakan sensor LM35 yang merupakan sebuah sensor suhu dengan harga yang relatif murah dan output nya sudah berupa tegangan yang sudah linear.
Menurut datasheet LM35, untuk kenaikan 1 derajat Celcius akan mengakibatkan perubahan 10mV terhadap output tegangannya. Dimana saat suhu 0° Celcius sensor ini mempunyai tegangan offset sebesar 0 V. Untuk mendapatkan datasheet LM35, silakan download disini.
Disini saya akan melakukan pembacaan suhu dalam satuan derajat Celcius dengan range pengukuran 0°-100° Celcius. Sehingga tegangan output dari LM35 adalah 0-1 V.
Tegangan output tersebut sudah dapat dibaca oleh mikrokontroler melalui ADC tanpa diperlukan sebuah penguat tegangan. Aplikasi ini telah saya buat dalam bentuk real (sesungguhnya) dan juga saya simulasikan menggunakan Proteus. Schematic LM35 yang kemudian ditampilkan pada LCD dapat dilihat diatas.
Sedangkan untuk programnya menggunakan CodeVision AVR, berikut adalah listing program lengkapnya.
int SUHU;
char temp[8];
float suhu_celcius;
#include <mega16.h>
#include <stdlib.h>
#include <lcd.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#define ADC_VREF_TYPE 0x40
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void main(void)
{
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// LCD module initialization
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("ElectrO-cOntrOl");
lcd_gotoxy(0,1);
lcd_putsf("SENSOR SUHU LM35");
delay_ms(1000);
while (1)
{
lcd_clear( );
SUHU = read_adc(0);
suhu_celcius = (float)SUHU*500/1023;//rumus untuk mengubah kedalam derajat celcius
lcd_gotoxy(0,0);
lcd_putsf("ElectrO-cOntrOl");
ftoa(suhu_celcius,1,temp);//mengubah tipe data float ke tipe data array yg akan ditampilkan di LCD
lcd_gotoxy(0,1);
lcd_puts(temp);
lcd_gotoxy(5,1);
lcd_putchar(0xdf);//menampilkan karakter derajat
lcd_putsf("C");
delay_ms(500);
};
}
Jika ingin mendapatkan file program dalam bentuk CodeVision AVR dan simulasi proteus silakan download pada link dibawah ini.
Semoga bermanfaat...
halo mas, salam kenal.
BalasHapusMas kalo proyek ini mau saya coba pake micro atmega8535 atau atmega8 bisa ga?...makasih.
salam kenal jg.. bisa saja...
BalasHapusmakasudnya berarti secara hardware tidak banyak merubah ya...cuma diprogramnya digandti include atmega8/atmega8535 dst apakah pendapatku ini benar ?...makasih
BalasHapusklo untuk atmega8535 hardwarenya sama persis tinggal ganti include mega8535... tetapi untuk atmega8 yg penting keluaran LM35 masuk ke pin ADC0 dan tinggal ganti include mega8..
BalasHapusmas ftoa(suhu_celcius,1,temp);
BalasHapusangka 1 itu apa mas?
halo mas saya mau tanya,
BalasHapussuhu_celcius = (float)SUHU*500/1023
angka 500 itu dari mana mas?apa coba2 mpe pas dibandingin menggunakan termometer?trus yang 1023 itu karena adcnya 8 bit ya mas?
mohon pencerahannya
@syaifu; mansyur: artinya menampilkan karakter angka 1 digit bibelakang koma.
BalasHapus@Anonim: angka 500 adalah hasil perkalian dari 5 dan 100. dimana 5 adalah penguatan ac karena output lm35 sekitar 0-1volt, makanya dikali 5 agar bisa maksimum 5 volt. angka 100 adalah nilai proporsional agar dapat membaca suhu sampai 100 derajat. klo 1023 adalah nilai adc 10 bit
maksih bnyak mas atas jawabannya
BalasHapussaya yang masih awam ini mas,
muph mas saya mo tanya,.,
BalasHapuskan diatas mas bilang klo range nya cuma 0-100 derjat celcius,., n menghasilkan tegngan 1V,.,
seandainya kita inginkan output 12V bagaimana mas???
bagaimana caranya???
mohon penjelasannya,.,
terimakasih sebelumnya.,.
untuk apa outputnya 12 V. ADC mikro kan cuma maksimal 5 V.
BalasHapusTapi klo memang diinginkan outputnya 12V, nisa pake penguat kok. pake op amp.
saya ingin menjadikan outputnya LM35 untuk van PC mas.,.,
BalasHapusapakah bisa program diatas dipake langsung atau ada perubahan dan penambahannya,.
mohon penjelasannya mas.,.,
terimakasih senelumnya.,
Halo mas salam kenala ni
BalasHapusMau nanya " 0-1 volt itu kenaiakn 1 derajat atau uda maksimum mas trus
Klo misalnya input Pada LM35 12 Volt gimana ??
berubah ngga nilainya
makasih sebelumnya
UCHENK
MAS ,.
BalasHapusport untuk lcd yang di pakai port c atau port d ...??
mhon pencerahan'e ....
PC
Hapusmengapa pada atmega8 harus adc0?
BalasHapusgpp kok di pin yang lain juga :D
Hapusmas, knp di atmega 8 pada port adc 5 tdk terbaca..
BalasHapusmohon pencerahannya..
klo inputan saya ke adc tegangannya 1mV penguatnya atau pengalinya dari 500 bisa ke berapa agar maximal 5 volt??
BalasHapusMet malem kak....
BalasHapusSalam kenal..
.
nama saya luky. saya mau konsultasi tentang tugas besar mikrokontroller..
saya disuruh bikin program menggunakan AVR yg didalamnya mencakup led, lcd, 7segment, motor n button..
tapi saya bingung judulnya kak..
semangaaat..! :)
Hapusthanks n anda membuat aku jadi bersemangat... n saya suka cara anda memberikan informasi sungguh lengkap n detail,,, n tp low bisa sedetail"nya ya,, n thanks bro
BalasHapusmas, kalau saya mau tmbahkan relay di PORTD.2(aktive low) .misalkan relay akan aktif apabila suhu diatas 30 derajat celcius.
BalasHapusmaka programnya gimana ya ??
mohon bantuannya mas ?
thx bgt mas, sangat membantu. Saya lg buat Tugas Akhir buat kontrol suhu chiller. Tapi outputnya ke visual basic.
BalasHapusfile programnya kok gak bisa di download.,
BalasHapustes
BalasHapus