Proyek kali ini yaitu kita akan mengatur kecepatan putar kipas berdasarkan sensor suhu LM35.
Ketika suhu yang diterima sensor suhu LM35 tinggi maka kecepatan putar kipas akan tinggi,
ketika suhu menurun maka kecepatan putar kipas juga akan menurun. Untuk skematiknya bisa
dilihat dibawah ini:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.8b Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
#include <mega8535.h>
#include <stdio.h>
#include <stdlib.h>
#include <delay.h>
//ADC Suhu
void baca_data_ADC()
{
adc1=read_adc(0); //Membaca Nilai ADC1
adc2=read_adc(1); //Membaca Nilai ADC2
}
void ubah_ADC_Celcius()
{
suhu1=(adc1*500)/1023; //Merubah Nilai ADC1 Ke Celcius
suhu2=(adc2*500)/1023; //Merubah Nilai ADC2 Ke Celcius
}
void tampilkan_Suhu1()
{
ftoa(suhu1,0,temp);//float to array
lcd_gotoxy(0,0);
lcd_puts(temp);
lcd_gotoxy(2,0);
lcd_putchar(0xdf);//menampilkan karakter derajat
lcd_putsf("C");
}
void tampilkan_Suhu2()
{
ftoa(suhu2,0,temp);//float to array
lcd_gotoxy(0,1);
lcd_puts(temp);
lcd_gotoxy(2,1);
lcd_putchar(0xdf);//menampilkan karakter derajat
lcd_putsf("C");
}
void kontrol_kipas1()
{
if (suhu1<=28)
{
OCR1A=0; //(0 * 1023) / 100 = 0
lcd_gotoxy(5,0);
lcd_putsf("OFF");
lcd_gotoxy(8,0);
lcd_putsf(" PWM 0%");
}
else if (suhu1>28 && suhu1<=32)
{
OCR1A=511; //(50 * 1023) / 100 = 511
lcd_gotoxy(5,0);
lcd_putsf("ON");
lcd_gotoxy(8,0);
lcd_putsf(" PWM 50%");
}
else if (suhu1>32 && suhu1<60)
{
OCR1A=1023; //(100 * 1023) / 100 = 1023
lcd_gotoxy(5,0);
lcd_putsf("ON");
lcd_gotoxy(8,0);
lcd_putsf(" PWM100%");
}
}
void kontrol_kipas2()
{
if (suhu2<=28)
{
OCR1B=0; //(0 * 1023) / 100 = 0
lcd_gotoxy(5,1);
lcd_putsf("OFF");
lcd_gotoxy(8,1);
lcd_putsf(" PWM 0%");
}
else if (suhu2>28 && suhu2<=32)
{
OCR1B=511; //(50 * 1023) / 100 = 511
lcd_gotoxy(5,1);
lcd_putsf("ON");
lcd_gotoxy(8,1);
lcd_putsf(" PWM 50%");
}
else if (suhu2>32 && suhu2<60)
{
OCR1B=1023; //(100 * 1023) / 100 = 1023
lcd_gotoxy(5,1);
lcd_putsf("ON");
lcd_gotoxy(8,1);
lcd_putsf(" PWM100%");
}
}
void main(void)
{
// Declare your local variables here
// Port B initialization
PORTB=0x00;
DDRB=0x00;
// Port C initialization
PORTC=0x00;
DDRC=0x00;
// Port D initialization
PORTD=0x00;
DDRD=0x30;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 3.906 kHz
// Mode: Fast PWM top=03FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// 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=0xA3;
TCCR1B=0x0D;
TCNT1H=0xF0;
TCNT1L=0xBE;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x03;
OCR1AL=0xFF;
OCR1BH=0x03;
OCR1BL=0xFF;
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x82;
SFIOR&=0xEF;
lcd_clear();
lcd_gotoxy(1,0);
lcd_putsf("SARDING ANWAR");
lcd_gotoxy(0,1);
lcd_putsf("NIM 0100630066");
delay_ms(5000);
while (1)
{
// Place your code here
lcd_clear();
baca_data_ADC ();
ubah_ADC_Celcius();
tampilkan_Suhu1();
tampilkan_Suhu2();
kontrol_kipas1();
kontrol_kipas2();
delay_ms(500);
}
;
}