Anda di halaman 1dari 7

3.2.

1 Flowchart






















Gambar 3.3 Diagram flowchart alat

3.3 Analisa Program
MULAI
SELESAI
DAYA =
HIDUP
ASAP= <20 PPM ?
Y
Y
Y
Y
N
N
N
N
N
FAN = BERHENTI
MOTOR SERVO = 0
O

LCD = EXHAUST OFF
ASAP= 20 PPM ?
ASAP= <20 PPM ?
ASAP= <20 PPM ?
Y
FAN = BERHENTI
MOTOR SERVO = 0
O

LCD = EXHAUST OFF
FAN = BERHENTI
MOTOR SERVO = 0
O

LCD = EXHAUST OFF
FAN = BERHENTI
MOTOR SERVO = 0
O

LCD = EXHAUST OFF
#include <mega8535.h> // Pustaka untuk menununjukkan prosessor yang
digunakan
#include <stdio.h> // Pustaka untuk standard input ouput
#include <delay.h> // Pustaka untuk menggunakan jeda waktu
#include <lcd.h> // Pustaka untuk menggunakan LCD
#define kipas0 PORTC.0
#define kipas1 PORTC.1 mendefinisikan port-port yang
#define kipas2 PORTC.2 digunakan sebagai pengendali fan
#define kipas3 PORTC.3 dengan metode PWM ( Pulse Width
#define pwm PORTC.5 Modulation ).
#define ADC_VREF_TYPE 0x40 // Mendefinisikan ADC 10 bit
#asm
.equ __lcd_port=0x12 ;PORTD inisialisasi PORTD sebagai LCD
#endasm
unsigned char cont, npwm,i,j,k;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
cont++;
if (npwm>=cont)pwm=1; program PWM untuk
else pwm=0; mengandalikan
TCNT0=0xFF; putaran fan
}
void stop(void)
{
kipas0=0,kipas1=0,kipas2=0,kipas3=0,npwm=0; // fan berhenti
}


void pelan(void)
{
kipas0=1,kipas1=0,kipas2=1,kipas3=0,npwm=100; // fan pelan
}
void sedang(void)
{
kipas0=1,kipas1=0,kipas2=1,kipas3=0,npwm=150; // fan sedang
}
void kencang(void)
{
kipas0=1,kipas1=0,kipas2=1,kipas3=0,npwm=255; // fan kencang
}
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE; Program ADC 10 bit
ADCSRA|=0x40; Digunakan untuk
delay_us(10); membaca inputan
while ((ADCSRA & 0x10)==0); sensor
ADCSRA|=0x10;
return ADCW;
}
unsigned char buff[33];
void lcd_putint(unsigned int dat) digunakan untuk melakukan konversi
{ pola, yaitu karakter yang akan dicetak
sprintf(buff,"%d ",dat); ke LCD
lcd_puts(buff);
}



void putar_servo (void)
{
for(k=1;k<=75;k++)
{
PORTB.0=1;
for(j=1;j<=i;j++)
delay_us(10);
PORTB.0=0; Proseedur untuk menggerakkan motor
TIFR&=0x40; servo dengan cara memberikan nilai
TCNT2=0xB1; variable i terlebih dahulu
while(!(TIFR&0x40));
TIFR&=0x40;
}}
void main(void)
{
signed int asap; float adc; // variable asap berupa integer & adc berupa float
DDRA=0x00; PORTA dikonfigurasi sebagai input low
PORTA=0x00;
DDRB=0xFF; PORTA dikonfigurasi sebagai output low
PORTB=0x00;
DDRC=0xFF; PORTA dikonfigurasi sebagai output low
PORTC=0x00;
DDRD=0x00; PORTA dikonfigurasi sebagai input low
PORTD=0x00;
TCCR0=0x01;
TCNT0=0x00;
OCR0=0x00;
TIMSK=0x01;


ADMUX=ADC_VREF_TYPE; blok program pemroses ADC
ADCSRA=0x85;
SFIOR&=0xEF;
TCCR2=0x07;
ASSR=0x00;
#asm("sei") // pengaktif interrupt
lcd_init(16); // inisialisasi LCD 16 kolom
while (1) // melakukan scanning pengulangan secara terus menerus
{
adc =read_adc(0); //inisialisasi baca adc
adc =adc/255; akuisisi data untuk asap dalam bentuk ppm ( part per
asap=adc*175; million )
asap=asap-12;

if (asap<20)
{
stop(); kondisi jika nilai asap <20
{i=11;putar_servo();} fan =berhenti
lcd_gotoxy(0,0); motor servo =0
o

lcd_putsf("ASAP= "); kondisi LCD =EXHAUST OFF
lcd_putint(asap);
lcd_gotoxy(10,0);
lcd_putsf("ppm");
lcd_gotoxy(0,1);
lcd_putsf("EXHAUST OFF ");
delay_ms(100);
}



else if (asap>=20 && asap<60)
{
pelan(); kondisi jika nilai asap >=20 && asap<60)
{i=9;putar_servo();} fan =pelan
lcd_gotoxy(0,0); motor servo =30
o

lcd_putsf("ASAP= "); kondisi LCD =EXHAUST LEVEL 1
lcd_putint(asap);
lcd_gotoxy(10,0);
lcd_putsf("ppm");
lcd_gotoxy(0,1);
lcd_putsf("EXHAUST LEVEL 1 ");
delay_ms(100);
}
else if (asap>=60 && asap<200)
{
sedang(); kondisi jika nilai asap >=60 && asap<200)
{i=8;putar_s ervo();} fan =sedang
lcd_gotoxy(0,0); motor servo =60
o

lcd_putsf("ASAP= "); kondisi LCD =EXHAUST LEVEL 2
lcd_putint(asap);
lcd_gotoxy(10,0);
lcd_putsf("ppm");
lcd_gotoxy(0,1);
lcd_putsf("EXHAUST LEVEL 2 ");
delay_ms(100);
}




else if (asap>=200)
{
kencang(); kondisi jika nilai asap>=200
i=7;putar_servo(); fan =kencang
lcd_gotoxy(0,0); motor servo =90
o

lcd_putsf("ASAP= "); kondisi LCD =EXHAUST LEVEL 3
lcd_putint(asap);
lcd_gotoxy(10,0);
lcd_putsf("ppm");
lcd_gotoxy(0,1);
lcd_putsf("EXHAUST LEVEL 3 ");
delay_ms(100);
}
}
}

Anda mungkin juga menyukai