Implementasi Perangkat Lunak Impelementasi

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 :