Selasa, 18 Januari 2011

EFESIENSI PENGGUNAAN KIPAS BERDASARKAN JUMLAH ORANG (miniatur)

LATAR BELAKANG
Seiring perkembangan zaman banyak penelitian-penelitian yang dilakukan untuk mengembangkan berbagai macam teknologi . Untuk itu diciptakanlah teknologi untuk menghemat energy listrik serta mencegah terbuangnya energy listrik secara sia-sia. Sehingga penggunaan listrik dapat benar-benar efesien. Dimulai dengan penggunaan kipas angin , di latar belakangi dari kehidupan di Surabaya yang mempunyai udara cukup panas sehingga bisa dipastikan hampir di setiap rumah memiliki kipas angin. Penggunaan kipas di setiap rumah sering kali tidak efesien dan bisa membuang-buang listrik secara sia-sia . Maka diciptakanlah kipas yang menyala berdasarkan jumlah orang yang ada dalam ruangan . Selain itu , juga dapat menghemat pengeluaran untuk membayar biaya listrik tiap bulannya.

PERIPHERAL YANG DIGUNAKAN

-ADC
ADC disini digunakan untuk mengubah sinyal masukan dari sensor photodiode dan infra red yang berupa sinyal analog diubah menjadi sinyal digital agar dapat diolah pada mikro , karena sensor yang digunakan untuk menghitung jumlah orang keluar masuk ada 4 ,maka sinyal yang diubah dari analog ke digital ada 4 , sehingga ADC yang digunakan juga hanya 4 bit .

-TIMER
Timer yang digunakan adalah timer 0 untuk mengatur pwm kipas

PENJELASAN SISTEM / CARA KERJA ALAT



Cara kerja dari alat ini adalah kipas akan berputar dan kecepatannya berdasarkan jumlah orang yang ada di dalam ruangan . Untuk menghitung jumlah orang yang ada , digunakan 4 buah sensor infra red dan photo diode , 2 buah di pintu masuk dan 2 yang lain diletakkan di pintu keluar. Apabila ada orang yang melewati sensor A dan B maka sensor akan mengirimkan sinyal ke mikro yang merupakan sinyal untuk orang masuk , Apabila ada orang yang melewati sensor D dan C maka sensor akan mengirimkan sinyal ke mikro yang merupakan sinyal untuk orang keluar kemudian pada ADC, sinyal tersebut akan diolah sehingga dapat menampilkan” jumlah orang “ pada LCD . Untuk mengatur kecepatan dari kipas digunakan PWM . Dengan ketentuan yang telah dibuat yaitu :
Jumlah orang <=5 kipas 1 dan kipas 2 mati
Jumlah orang 6-10 kipas 1 menyala dengan pwm =70 , kipas 2 mati
Jumlah orang 11-15 kipas 1 menyala dengan pwm =150 , kipas 2 mati
Jumlah orang 16-20 kipas 1 menyala dengan pwm =150 , kipas 2 menyala dengan pwm =70
Jumlah orang >20 kipas 1 menyala dengan pwm =200 , kipas 2 menyala dengan pwm =150
Untuk settingan dari pwm nya dapat diatur kembali sesuai dengan keinginan . Dengan ketentuan kipas berkecepatan maksimal pada pwm = 255
Pada LCD juga ditampilkan berapa PWM masing-masing kipas .
Kipas yang digunakan membutuhkan supply sebesar 12 V sehingga pada alat ini di gunakan 2 supply . 12 v untuk kipas dan 5 v untuk mikro .

MAIN PROGRAM

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.9 Evaluation
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 1/15/2011
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:


Chip type : ATmega8535
Program type : Application
Clock frequency : 11.059200 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*****************************************************/

#include
#include


// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTB
#endasm
#include

#include

#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 3
unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x20

// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
register static unsigned char input_index=0;
// Read the 8 most significant bits
// of the AD conversion result
adc_data[input_index]=ADCH;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
}
#define kipas1 PORTB.0
#define kipas2 PORTB.1
char timer, pwm1,pwm2,tes[9],kata2[16];
// Timer/Counter 0 initialization
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
timer++;
if(timer<=pwm1)kipas1=1;
else kipas1=0;

if(timer<=pwm2)kipas2=1;
else kipas2=0;
TCNT0=0xff;

}



int i,sen1=0,sen2=0,sen3=0,sen4=0;
char jml,org,baca[5],move,kata[5],jml2;
void hitsen()
{
for(i=0;i<4;i++)
{
if(adc_data[i]>100) baca[i]=1;
else baca[i]=0;
}
move=(baca[0]*1)+(baca[1]*2)+(baca[2]*4)+(baca[3]*8);

}

void org_msk()
{
hitsen();
move&=0b00001111;
switch(move)
{
case 0b00000001: sen1=1; break;
case 0b00000010: sen2=1; break;
case 0b00000000:
{
jml=sen1+sen2;
if(jml==2)
{
org++;
sen1=0; sen2=0;
}
break;
}
}
/*
itoa(org,kata);
lcd_gotoxy(0,1);
lcd_puts(kata); */
}
void org_klr()
{
hitsen();
move&=0b00001111;
switch(move)
{
case 0b00000100: sen3=1; break;
case 0b00001000: sen4=1; break;
case 0b00000000:
{
jml2=sen3+sen4;
if(jml2==2)
{
if(org<=0)
{
org=0; sen3=0; sen4=0;
}
else
{
org--;
sen3=0; sen4=0;
}
}
break;
}
}
/*
itoa(org,kata);
lcd_gotoxy(0,1);
lcd_puts(kata);*/

}
// Declare your global variables here

void main(void)
{
// Declare your local variables here
int a;

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

// Port B 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
PORTB=0x00;
DDRB=0x0F;

// 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=0x00;

// 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: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x05;
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: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

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

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

// ADC initialization
// ADC Clock frequency: 691.200 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCC;
SFIOR&=0xEF;

// LCD module initialization
lcd_init(16);

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

while (1)
{
// Place your code here
/* a=adc_data[1];
itoa(a,kata);
lcd_gotoxy(0,0);
lcd_puts(kata);
delay_ms(100);
lcd_clear();*/

/*org_msk();
org_klr();
itoa(org,kata);
lcd_gotoxy(0,0);
lcd_putsf("jumlah=");

lcd_puts(kata); */
lcd_clear();
org_msk();
org_klr();
lcd_gotoxy(0,0);
lcd_putsf("jml orang=");
itoa(org,kata);
lcd_puts(kata);

if(org<=5){pwm1=0; pwm2=0;}
if(org>5 && org<=10){pwm1=70; pwm2=0;}
if(org>10 && org<=15){pwm1=150; pwm2=0;}
if(org>15 && org<=20){pwm1=150; pwm2=70;}
if(org>20){pwm1=200; pwm2=150;}
itoa(pwm1,kata2);
lcd_gotoxy(0,1);
lcd_puts(kata2);
itoa(pwm2,kata2);
lcd_gotoxy(8,1);
lcd_puts(kata2);


};
}


FOTO ALAT


VIDEO


SCHEMATIC


BIODATA PENULIS

Nama : Dini Aprilianti
TTL : Ambon, 18 April 1990
Jenis Kelamin : Perempuan
Agama : Islam
Alamat Asal : Jl. Titan I AA 9 Malang
Alamat Surabaya : Tegal Mulyorejo Baru 44 Surabaya
No.Telp Rumah : ( 0341 ) 474555
No.Hp : 085733178590
Riwayat Pendidikan :
Tingkat Nama Sekolah Tahun
SD SD Negeri Purwantoro XIV Malang 1996-2002
SMP SMP Negeri 5 Malang 2002-2005
SMA SMK Telkom Malang 2005-2008
Perguruan Tinggi Teknik Elektronika PENS-ITS, 2008-Sekarang
Surabaya

Tidak ada komentar:

Posting Komentar