Sensor suhu sebagai pengendali kipas angin dengan AVR ATMega


Postingan kali ini masih ada hubungannya sama postingan berseri tentang sistem interupsi di AVR ATMega, dimana pada posting interupsi ATMega dengan Codevision AVR jilid 3 kita menggunakan sensor LM35 sebagai input pengendalian program.

Kita ambil sebuah kasus pendingin otomatis, yang menggunakan sensor suhu kemudian dihubungkan sedemikian rupa melalui mikrokontroler dengan kipas angin. Pada saat suhu berada di bawah 40 derajat celcius maka kipas angin tidak berputar, tetapi setelah suhu berada pada 40 derajat celcius ke atas, maka kipas angin berputar dengan kecepatan menyesuaikan, semakin panas suhunya semakin cepat kipas angin berputar. Untuk mengecek program utama berfungsi, selama suhu berada di bawah 40 derajat mikrokontrol akan membuat LED pada PORTB.0 berkedip2.

Program ini tidak berbeda jauh dengan interupsi jilid 3 hanya saja kali ini kita mengaktifkan timer0 untuk memberikan pulsa yang mengatur kecepatan motor (PWM). Tentu saja kita perlu menambahkan rangkaian driver motor menggunakan IC L293D dan motor DC.

Rangkaiannya bisa anda buat seperti gambar dibawah ini

BACA JUGA:   Mengubah Setting Clock Pada Codevision

Dan berikut adalah listing programnya

#include <mega16.h>
#include <delay.h>
#include <stdlib.h>

int temp;
float vin;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// dibuat oleh priyo harjiyono http://anotherorion.com

unsigned char rr=0;
while(rr<32)
{
//karena output inverting maka semakin besar vin, semakin kecil
//OCRnya
OCR0=0xff-vin;
PORTB.6=1;
delay_ms(30);
++rr;

PORTC.0=0;
}
}

#define ADC_VREF_TYPE 0x00

// 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;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x01;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15,629 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Inverted PWM
TCCR0=0x7C;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x03;
MCUCSR=0x00;
GIFR=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 500,125 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA3;
SFIOR&=0x1F;

// Global enable interrupts
#asm("sei")

while (1)
{
// Place your code here
temp = read_adc(0);
vin=(float)temp*500/1024;

OCR0=0;
if(vin>40)
{
PORTC.0=1;
delay_ms(10);
}
PORTB.6=0;
PORTB.0=1;
delay_ms(30);
PORTB.0=0;
delay_ms(30) ;
};
}

Download source code sensor suhu kipas angin dan skematiknya



DMCA.com Protection Status

sensor suhu sebagai pengendali kipas angin dengan avr atmega (13), kipas angin sensor suhu (10), pengertian kipas angin sensor suhu (7), kipas angin otomatis dengan menggunakan sensor suhu (5), kipas angin otomatis berbasis mikrokontroler (4), mekanisme kerja kipas angin sensor suhu (3), kipas otomatis dengan sensor suhu (3), apa yang dimaksud dengan kipas angin sensor suhu (3), SENSOR PANAS KIPAS (2), sensor kipas angin (2)

Post You May Also Like

Post Author: anotherorion

Priyo Harjiyono, blogger kelahiran Cilacap yang kini menjadi warga Ngayogyakarta Hadiningrat, baginya blog adalah dunia untuk menciptakan mimpi2nya. Saat ini masih disibukkan sebagai pembelajar dalam dunia pendidikan.

31 tanggapan pada “Sensor suhu sebagai pengendali kipas angin dengan AVR ATMega

  • Lionel Andresz Lasma

    (April 11, 2016 - 4:09 am)

    Pak kok bsa kodingnya error ?

  • Harun Syarif

    (April 8, 2016 - 12:16 pm)

    programnya berhasil pak, terimakasih

  • Ridho S Himawan

    (Februari 27, 2015 - 2:58 am)

    arus yang digunakan brapa volt ampere mas?
    untuk nyalakan sismin atmega 16 dan driver motor nya?

    • anotherorion

      (Maret 1, 2015 - 9:31 am)

      Klo driver motor biasanya 9v mas atmega 5v cukup, klo arusnya ngikut dr datasheet driver n motornya

  • Priyo Harjiyono

    (November 16, 2014 - 1:09 pm)

    lebih tepatnya C saja mas 🙂

  • Jank Wan Syafeii

    (November 16, 2014 - 4:54 am)

    programnya c++?

  • qirul

    (Oktober 28, 2014 - 6:39 am)

    mas listing untuk menyalakan dan mematikan relay dengan sensor suhu itu bisa pake program ini gk mas? atau kita harus membuat ulangdari awal, jika pakai program ini bisa apa saja mas yang harus di ubah? mohon penjelasannya!. qirul.bahari@gmail.com mohon bantuannya mas

    • anotherorion

      (November 10, 2014 - 12:37 pm)

      bisa mas, ubah perintah abis
      if(vin>40) jadi
      {
      PORTC.0=1;
      }
      else
      {
      PORTC.0=0;
      }
      sisanya dibiarin juga gpp

  • Ridho S Himawan

    (Oktober 10, 2014 - 5:37 pm)

    Priyo Harjiyono motor nya g ada di setting mas,saya buatnya dari sismin atmega8535 keluar ke port B untuk led nya.trus sismin dg led nya ku ikat di kipas angin,trus ku idupin kipas nya mas.
    jadinya kayak gitu

  • Priyo Harjiyono

    (Oktober 10, 2014 - 5:22 pm)

    Ridho S Himawan mungkin hardware propelernya cuma bisa sampe beberapa karakter saja mas. Setting motornya sebelah mana mas?

  • Ridho S Himawan

    (Oktober 10, 2014 - 10:49 am)

    Priyo Harjiyono sudah dicoba mas.
    tulisannya malah bergabung jadi satu dia mas.

  • Priyo Harjiyono

    (Oktober 10, 2014 - 10:40 am)

    Ridho S Himawan di bagian loop utama mas ridho (while 1) itu kan isinya hanya karakter tulisan RIDHO, nah ditambahin saja karakter lagi untuk tulisan2 berikutnya

  • Ridho S Himawan

    (Oktober 10, 2014 - 10:38 am)

    Priyo Harjiyono itu dari kipas nya cuma muncul nama ku j mas.
    "RIDHO" aja.
    saya pingin begitu dijalankan kipasnya yg muncul ada 3 tulisan mas.
    misal pertama "ridho" ke dua "pekanbaru" ketiga "indonesia" gitu mas..
    itu gimana progrmanya???

  • Priyo Harjiyono

    (Oktober 10, 2014 - 10:04 am)

    Ridho S Himawan nambah animasi gimana mas?

  • Ridho S Himawan

    (Oktober 9, 2014 - 5:51 pm)

    Priyo Harjiyono oke mas . insya Alloh besok dah jadi ni alat.
    o y saya ada buat led propeller nih.ini alamt blog nya : http://idhociut.blogspot.com/2014/10/led-propeller-project.html

    program untuk nambah animasinya gimana y mas?
    itu cuma nama saya j yang tampil.

  • Priyo Harjiyono

    (Oktober 9, 2014 - 4:31 pm)

    Ridho S Himawan 0CR0=0xff-vin mas, ganti saja langsung ocr0=255 / nilai lain, tp nilainya jd konstan, klo mau bisa diubah ya pake yg pertama tp maksimalkan suhu di LM35nya

  • Ridho S Himawan

    (Oktober 9, 2014 - 4:24 pm)

    Priyo Harjiyono OCR0 yg di bagian mana y mas??
    udah sya rubah2 kok tetep g mau cepat motor nya??/
    hehe

  • Priyo Harjiyono

    (Oktober 9, 2014 - 4:04 pm)

    Ridho S Himawan pengatur kecepatan di OCR0 mas

  • Ridho S Himawan

    (Oktober 9, 2014 - 3:54 pm)

    Priyo Harjiyono wah iya mas.arah nya udah bener…
    oke mas ni lagi saya bikin rangkaian nya…lagi gosok rangkaian sismin nya.
    kalau sewaktu2 mau saya rubah kecepatan motornya mas, di bagian mana yg musti di rubah di program nya?

  • Priyo Harjiyono

    (Oktober 9, 2014 - 3:48 pm)

    Ridho S Himawan klo -20 berarti arahnya ketuker mas, kan motor DC geraknya bisa CCW sama CW, tuker aja polaritas di motor DC nya, di proteus klo putaran motor emang gak bakal keliatan signifikan mas muternya

  • Ridho S Himawan

    (Oktober 9, 2014 - 3:45 pm)

    Priyo Harjiyono iya sih mas.ni aku lagi puat nya di proteus.
    untuk suhu 50 *c motor muternya pelan mas.
    di motornya tertulis -20 untuk suhu 50 derjat celcius

  • Priyo Harjiyono

    (Oktober 9, 2014 - 3:41 pm)

    kecepatan nambah sendiri klo suhu semakin naik diatas 40 derajat mas,

  • Priyo Harjiyono

    (Oktober 9, 2014 - 3:39 pm)

    untuk setting input output bisa dilihat di DDR tiap port mas

  • Ridho S Himawan

    (Oktober 9, 2014 - 3:16 pm)

    CARA NAMBAK KECEPATAN MOTOR NYA GIMANA MAS????

  • Ridho S Himawan

    (Oktober 9, 2014 - 2:07 pm)

    settingaan di advance di codevision nya gimana mas?
    port port apa aj yg perlu di setting input atau output

  • Kerry P

    (Juli 8, 2014 - 11:09 pm)

    mas posting gambar rangkainya donk,, soalnya kurang jelas,,hehehe

  • Priyo Harjiyono

    (Oktober 15, 2013 - 5:04 am)

    Muhammad Ichsan iya buat mendrive kecepatan motor

  • Muhammad Ichsan

    (Oktober 14, 2013 - 2:53 pm)

    itu harus pake ic L293?

  • Priyo Harjiyono

    (Oktober 12, 2013 - 12:22 am)

    gagal/errornya dimana klo boleh tau?

  • Muhammad Ichsan

    (Oktober 11, 2013 - 3:11 pm)

    program nya gagal pak ..

Berikan tanggapan anda