dimana didalam box tersebut terdapat sensor MQ-7 yang dapat mendeteksi adanya asap dalam ruangan tersebut. miniatur box simulasi pada Gambar 4.6
Gambar 4.6 miniatur box simulasi
4.1.2 Implementasi Perangkat Lunak
Bagian implementasi proses ini menjelaskan mengenai implementasi software di mikrokontroler, sebagaimana rancangan sistem yang telah dibuat
Berikut penggalan source code pada program di mikrokontroler. Simulasi alat pengukur dan pengirim kualitas udara dari gas karbonmonoksida CO berbasis
mikrokontroler dan SMS gateway ini langkah pertama yang harus diperhatikan adalah mendeklarasikan semua fungsi, dan semua port pada mikrokontroler yang
digunakan sebagai input dan output dari program yang akan disusun yang mana port yang secara otomatis terbentuk saat membuat project baru. Berikut ini adalah
program yang merupakan penentuan port pada mikrokontroler.
include mega32.h include i2c.h
include delay.h include lcd.h
include stdio.h initialitation variabel
unsigned int sensor; unsigned char tampilkan[20];
unsigned char waktu; float sppm;
float proses; unsigned int bacaNilaiSensorI2Cunsigned char alamatI2C;
void sms_init; void kedip void;
void infovoid; void sms_otomatischar flash fmtstr1, char flash fmtstr2;
void sms_manualvoid; void hapus_pesanvoid
;
void kalibrasivoid; I2C Bus functions
asm
.equ __i2c_port=0x12 ;PORTD .equ __sda_bit=2
.equ __scl_bit=3
endasm
Alphanumeric LCD Module functions
asm
.equ __lcd_port=0x15 ;PORTC
endasm
Declare your global variables here define lcd PORTC.3
define pbb PINB.0 define pba PINB.1
define lcd_murup PORTC.3=0
===================inter r uptser vicer outine========================
ifndef RXB8 define RXB8 1
endif
ifndef TXB8 define TXB8 0
endif
ifndef UPE define UPE 2
endif
ifndef DOR define DOR 3
endif
ifndef FE define FE 4
endif
ifndef UDRE define UDRE 5
endif
ifndef RXC define RXC 7
endif
define FRAMING_ERROR 1FE define PARITY_ERROR 1UPE
define DATA_OVERRUN 1DOR define DATA_REGISTER_EMPTY 1UDRE
define RX_COMPLETE 1RXC void mainvoid
{
Declare your local variables here InputOutput 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=In Func2=In Func1=In Func0=In
State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x03; DDRB=0x00;
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=0x08;
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;
TimerCounter 0 initialization Clock source: System Clock
Clock value: Timer 0 Stopped Mode: Normal top=FFh
OC0 output: Disconnected
TCCR0=0x00; TCNT0=0x00;
OCR0=0x00;
TimerCounter 1 initialization Clock source: System Clock
Clock value: Timer1 Stopped Mode: Normal top=FFFFh
OC1A output:
Discon.
OC1B output: Discon. Noise Canceler: Off
Input Capture on Falling Edge Timer1 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;
TimerCounter 2 initialization Clock source: System Clock
Clock value: Timer2 Stopped Mode: Normal top=FFh
OC2 output: Disconnected
ASSR=0x00; TCCR2=0x00;
TCNT2=0x00; OCR2=0x00;
External Interrupts initialization INT0: Off
INT1: Off INT2: Off
MCUCR=0x00; MCUCSR=0x00;
TimersCounters Interrupts initialization
TIMSK=0x00;
USART initialization Communication Parameters: 8 Data, 1 Stop, No Parity
USART Receiver: On USART Transmitter: On
USART Mode: Asynchronous USART Baud Rate: 9600
UCSRA=0x00; UCSRB=0x98;
UCSRC=0x86; UBRRH=0x00;
UBRRL=0x47;
Analog Comparator initialization Analog Comparator: Off
Analog Comparator Input Capture by TimerCounter 1: Off
ACSR=0x80; SFIOR=0x00;
LCD module initialization
lcd_init16;
Global enable interrupts
asmsei
Potongan code diatas menjelaskan tentang inisialisasi mikrokontroler menggunakan ATmega32 serta mengidentifikasi Port D.2 ,D.3 sebagai input
sensor, Port D.4 , D5, untuk menghidupkan sensor, port B.0 , B1 sebagai Push Botton , port D.0 ,D.1 sebagai kominikasi USART. Port C sebagai input LCD.
lcd_gotoxy0,0; lcd_putsf
KUALITAS UDARA;
lcd_gotoxy0,1; lcd_putsf TUGAS AKHIR ;
kedip;
Potongan source code diatas menjelaskan tentang input LCD yaitu “KUALITAS UDARA”,
TUGAS AKHIR yang nantinya akan ditampilak di
LCD
void sms_initvoid{ awal tes printfATE0; set command tanpa echo
putchar0x0D; ENTER whilegetchar=K{}; menunggu OK
whilegetchar=0x0A{}; menunggu new line delay_ms500;
}
sms_init; ngecek dengan at
-
cek modem ada ato tidak
- stack
lcd_got oxy0,1; lcd_put sf t idaak ada modem ;
Potongan source code diatas menjelaskan pada saat sistem dinyalakan akan ada pengecekan modem ketika modem tiadak tersambung LCD
menampilkan “tidak ada modem” .
USART Receiver buffer define RX_BUFFER_SIZE 8 untuk 8 karakter
char rx_buffer[RX_BUFFER_SIZE]; if RX_BUFFER_SIZE256 rx_buffer untuk menampung data yang diterima
unsigned char rx_wr_index,rx_rd_index,rx_counter;
else
unsigned int
r x_wr _index,r x_r d_index,r x_counter ; endif
This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow;
USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isrvoid
{
char status,data;
status=UCSRA; data=UDR;
UDR = usart data register if status FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN==0
{ r x_buffer [r x_wr _index]=data;
if ++rx_wr_index == RX_BUFFER_SIZE rx_wr_index=0; if ++rx_counter == RX_BUFFER_SIZE
{ r x_counter =0;
r x_buffer _overflow=1;
}; hal yang dimulai pembacaan perimaan serial
-
karakter stringascii
ifdata=
=1{ jika ketemu 1 sistem akan membalas sms sms_otomatisat+cmgs=083856724256, SMS GATEWAY ;
fungsi yang saya buat sendiri
} };
}
ifndef _DEBUG_TERMINAL_IO_ Get a character from the USART Receiver buffer
define _ALTERNATE_GETCHAR_ pragma used+
char getcha
r void {
char data; while rx_counter==0;
data=r x_buffer [r x_r d_index];
if ++rx_rd_index == RX_BUFFER_SIZE rx_rd_index=0;
asmcli --r x_counter ;
asmsei
return data;
}
pragma used
- endif
void sms_otomatischar flash fmtstr1, char flash fmtstr2{
lcd=0;
lcd_gotoxy0,0;lcd_putsfproses sending..;delay_ms1000; kirim nilai rentang
indeks
monoksida pake sms putchar13;
pr intfat; delay_ms1000;
putchar13; printfAT+CMGF=1; MERUBAH MENCADI TULISAN TEXT SMS
delay_ms1000;
putchar13;
pr intffmtstr 1; delay_ms1000;
putchar 13;
ISI KONDISI CO BAIK DAN BURUK
pr intfIndeks
Karbonmonoksida 3.0f
\
n ,sppm;
putchar13; if sppm50{
printfKondisi Kualitas Udara = Baik; putchar13;
} else if sppm100{
printfKondisi Kualitas Udara = Sedang;
putchar 13;
} else if sppm200{
printfKondisi Kualitas Udara = Tidak Sehat; putchar13;
} else if sppm300{
printfKondisi Kualitas Udara = Sangat Tidak Sehat;
putchar 13;
} else {
printfKondisi Kualitas Udara = Bahaya;
putchar 13; }
pr intffmtstr 2;
putchar13; putchar26;
delay_ms5000; lcd_gotoxy
0,1;lcd_putsfselesai
-
cek hp;delay_ms3000; lcd=1;
hapus_pesan;
} Potongan code diatas adalah fungi untuk menerima dan mengirim sms,
jika ada sms masuk=1
“ ifdat a==1”
sistem lansung membalas ke pengguna. pada saat rentang indeks 0-50 sistem akan memberikan staus baik, pada
saat rentang indeks 51-100 sistem akan memberikan staus sedang, pada saat rentang indeks 101-199 sistem akan memberikan staus tidak sehat, pada saat
rentang indeks 200-299 sistem akan memberikan staus sangat tidak sehat dan pada saat rentang indeks 300-500 sistem akan memberikan staus bahaya
void kalibrasivoid
{
sensor = bacaNilaiSensorI2C0xE0; proses menghitung indek = pembacaan sensor : skala skala = sensordata alat
se
benarnya if sensor350
proses=floatsensor7; 7 berasal dari perhitungan skala 35050 else if sensor550
proses=floatsensor5.5; 5.5 berasal dari perhitungan skala 550100 else if sensor650
pr os
es=floatsensor3.25; 3.27 berasal dari perhitungan skala 650200 else if sensor750
proses=floatsensor2.5; 2.5
1
berasal dari perhitungan skala 750300 else
proses=float sensor2.048; 2.048 berasal dari perhitungan skala 1024500 sppm =float proses;
}
Potongan source code diatas menjelaskan tentang kalibrasi sensor dari data yang dihasilkan oleh sensor diolah menjadi rentang Indek
unsigned int bacaNilaiSensorI2Cunsigned char alamatI2C { unsigned int sensor;
i2c_start; Start Condition i2c_writealamatI2C; Tulis ke modul
i2c_write0x41; Perintah “Read Sensor” i2c_stop; Stop Condition
delay_us10; delay 10 us i2c_start; Start Condition
i2c_writealamatI2C|0x01; Baca ke modul temp1 = i2c_read1; Data Sensor MSB
temp2 = i2c_read0; Data Sensor LSB sensor = temp1256+temp2; perhitungan Data Sensor
i
2c_stop; Stop Condition
return sensor;
}
Code diatas adalah perintah untuk membaca sensor, kemudian diolah dan menjadi input untuk diolah mikrokontroler.
if pba {
lcd=~ lcd; delay_ms200;
}
if pbb sms_manual;
};
Code diatas adalah perintah untuk Push Butoon, jika pba di tekan LCD akan mati, jika pbb di tekan akan mengirim sms konndisi kualitas udara ke
pengguna.
void hapus_pesanvoid{
lcd_gotoxy0,0;lcd_putsfha
pus pesan ; lcd_gotoxy0,1;lcd_putsftunggu yaa,., ;
delay_ms200; lcd_gotoxy0,0;lcd_putsfhapus pesan_1 ;
printfAT+CMGD=1;
putchar 0x0D; ENTER
whilegetchar=0x0A{}; whilegetchar=0x0A{};
delay_ms200; lcd_gotoxy0,0;lcd_putsfhapus pesan_1 ok;
delay_ms200; lcd_gotoxy0,0;lcd_putsfhapus pesan_2 ;
printfAT+CMGD=2;
putchar 0x0D; ENTER
whilegetchar=0x0A{};
whilegetchar =0x0A{};
delay_ms200; lcd_gotoxy0,0;lcd_putsfhapus pesan_2 ok;
delay_ms200;
lcd_gotoxy0,0;lcd_putsfhapus pesan_3 ; printfAT+CMGD=3;
putchar 0x0D; ENTER
whilegetchar=0x0A{};
whilegetchar =0x0A{}; delay_ms200;
lcd_gotoxy0,0;lcd_putsfhapus pesan_3 ok
; delay_ms200;
lcd_gotoxy0,0;lcd_putsfhapus pesan_4 ; printfAT+CMGD=4;
putchar 0x0D; ENTER
whilegetchar=0x0A{};
whilegetchar =0x0A{}; delay_ms200;
lc
d_gotoxy0,0;lcd_putsfhapus pesan_4 ok; delay_ms200;
}
Code diatas adalah perintah untuk menghapus pesan setelah menerima sms masuk dari pengguna.
void sms_manualvoid{
lcd=0;
lcd_gotoxy0,0;lcd_putsfproses sending..;delay_ms1000; kirim nilai
r entang indeks
monoksida pake sms putchar13;
pr intfat; delay_ms1000;
putchar13; printfAT+CMGF=1; MERUBAH MENCADI TULISAN TEXT SMS
delay_ms1000;
putchar13;
pr intfat+cmgs=083856724256; delay_ms1000;
putchar 13;
ISI KONDISI CO BAIK DAN BURUK
pr intfIndeks
Karbonmonoksida 4d
\
n ,sppm; putchar13;
if sppm50{ printfKondisi Kualitas Udara = Baik;
putchar13; }
else if sppm100{ printfKondisiKondisi Kualitas Udara = Normal;
putchar 13;
} else {
printfKondisi Kualitas Udara = Buruk;
putchar 13; }
putchar26;
delay_ms5000;
lcd_gotoxy0,1;lcd_putsfselesai
-
cek hp;delay_ms3000;
lcd=
1; hapus_pesan;
}
Potongan code diatas adalah fungi untuk mengirim sms dengan menekan pbb , pada saat rentang indeks 0-50 sistem akan memberikan staus baik, pada
saat rentang indeks 51-100 sistem akan memberikan staus sedang, pada saat rentang indeks 101-199 sistem akan memberikan staus tidak sehat, pada saat
rentang indeks 200-299 sistem akan memberikan staus sangat tidak sehat dan pada saat rentang indeks 300-500 sistem akan memberikan staus bahaya
void infovoid{
waktu++;
delay_ms20; if waktu=120{
lcd_gotoxy0,0; lcd_putsfPBa
-
tes button; }
else { lcd_gotoxy0,0;
lcd_putsfPBb
-
krm manual; }
}
void status
{ lcd_gotoxy0,1;
spr intftampilkan,Ind:3.0f,sppm; lcd_putstampilkan;
delay_ms50; if sppm50
{
lcd_gotoxy7,1;
lcd_puts|baik ; }
else if sppm100 {
lcd_gotoxy7,1;
lcd_puts|sedang ; }
else if sppm200 {
lcd_gotoxy7,1;
lcd_puts|T.sehat ;
}
else if sppm300 {
lcd_gotoxy7,1;
lcd_puts|S.T.Shat ; }
else {
lcd_gotoxy7,1;
lcd_puts|bahaya ;
} }
Code diatas adalah perintah untuk menampilkan info
PBa - t es but t on , PBb - krm m anual
,Ind:3.0f dan kondisi kualitas udara ke LCD. jika rentang indeks 0-50 sistem akan menampilkan staus baik , jika
rentang indeks 51-100 sistem akan menampilkan staus sedang, jika rentang indeks 101-199 sistem akan menampilkan staus tidak sehat, jika 200-299 sistem
akan menampilkan staus sangat tidak sehat dan jika indeks 300-500 sistem akan menampilkan staus bahaya ke LCD
4.2 Uji Coba dan Analisis
Pada uji coba dan analisis akan dibahas mengenai pengujian dan analisis pada hardware yang telah dirancang. Tujuan dari pengujian dan analisis ini adalah
untuk mengetahui apakah hardware tersebut telah berfungsi dengan benar dan sesuai rancangan atau tidak. Pengujian dan analisis ini ditujukan pada pengujian
komponen-komponen yang terdapat pada sistem serta pengujian simulasi alat pengukur dan pengirim kualitas udara dari gas karbonmonoksida CO
menggunakan mikrokontroler atmega32 dan SMS gateway.
4.2.1 Pengujian Alat
Berikut ini adalah pengujian alat atau komponen yang terdapat pada alat
pengukur dan pengirim kualitas udara dari gas karbonmonoksida CO menggunakan mikrokontroler atmega32 dan SMS gateway.
4.2.1.1 Pengujian USB ASP dan SinProg
Pada bagian ini merupakan gambaran koneksi software dengan hardware menggunakan alat bantu downloader USB ASP, agar nantinya program bisa
masuk antara komputer dengan hardware Atmega32. Untuk uji coba ASP ini digunakan untuk mentransfer program dari aplikasi CodeVision AVR ke
mikrokontroler menggunakan SinProg. Untuk melakukan transfer menggunakan downloader dan semua alat termasuk mikrokontroler harus dalam keadaan ON.
Berikut adalah langkah-langkah untuk mentransfer program dari CodeVision AVR ke mikrokontroler menggunakan SinProg :