Senin, 27 Juni 2011

APLIKASI PEMBACAAN SUHU LM35 DENGAN PENAMPIL LCD MENGGUNAKAN CODEVISION AVR

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.

File program CodeVision AVR dan simulasi proteus suhu LM35

Semoga bermanfaat...

25 komentar:

  1. halo mas, salam kenal.
    Mas kalo proyek ini mau saya coba pake micro atmega8535 atau atmega8 bisa ga?...makasih.

    BalasHapus
  2. makasudnya berarti secara hardware tidak banyak merubah ya...cuma diprogramnya digandti include atmega8/atmega8535 dst apakah pendapatku ini benar ?...makasih

    BalasHapus
  3. klo 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..

    BalasHapus
  4. mas ftoa(suhu_celcius,1,temp);
    angka 1 itu apa mas?

    BalasHapus
  5. halo mas saya mau tanya,
    suhu_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

    BalasHapus
  6. @syaifu; mansyur: artinya menampilkan karakter angka 1 digit bibelakang koma.
    @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

    BalasHapus
  7. maksih bnyak mas atas jawabannya
    saya yang masih awam ini mas,

    BalasHapus
  8. muph mas saya mo tanya,.,
    kan 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.,.

    BalasHapus
  9. untuk apa outputnya 12 V. ADC mikro kan cuma maksimal 5 V.

    Tapi klo memang diinginkan outputnya 12V, nisa pake penguat kok. pake op amp.

    BalasHapus
  10. saya ingin menjadikan outputnya LM35 untuk van PC mas.,.,
    apakah bisa program diatas dipake langsung atau ada perubahan dan penambahannya,.
    mohon penjelasannya mas.,.,
    terimakasih senelumnya.,

    BalasHapus
  11. Halo mas salam kenala ni
    Mau 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

    BalasHapus
  12. MAS ,.
    port untuk lcd yang di pakai port c atau port d ...??

    mhon pencerahan'e ....

    BalasHapus
  13. mengapa pada atmega8 harus adc0?

    BalasHapus
  14. mas, knp di atmega 8 pada port adc 5 tdk terbaca..

    mohon pencerahannya..

    BalasHapus
  15. klo inputan saya ke adc tegangannya 1mV penguatnya atau pengalinya dari 500 bisa ke berapa agar maximal 5 volt??

    BalasHapus
  16. Met malem kak....
    Salam 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..

    BalasHapus
  17. thanks 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

    BalasHapus
  18. mas, kalau saya mau tmbahkan relay di PORTD.2(aktive low) .misalkan relay akan aktif apabila suhu diatas 30 derajat celcius.
    maka programnya gimana ya ??
    mohon bantuannya mas ?

    BalasHapus
  19. thx bgt mas, sangat membantu. Saya lg buat Tugas Akhir buat kontrol suhu chiller. Tapi outputnya ke visual basic.

    BalasHapus
  20. file programnya kok gak bisa di download.,

    BalasHapus