BAB IV IMPLEMENTASI PERANGKAT LUNAK Ada beberapa hal yang harus diperhatikan sebelum program mobil automatis dibuat dan pada akhirnya dapat dijalankan dengan baik, cara membuat program dan cara mengimplementasikan program yang sudah dibuat. - Rancang bang
BAB IV IMPLEMENTASI PERANGKAT LUNAK Ada beberapa hal yang harus diperhatikan sebelum program mobil
automatis dibuat dan pada akhirnya dapat dijalankan dengan baik, cara membuat
program dan cara mengimplementasikan program yang sudah dibuat.4. 1. Kebutuhan Perangkat Sistem Perangkat yang dibutuhkan dalam pembuatan simulasi mobil
menggunakan ATMega8535 ini meliputi perangkat keras (hardware) dan
perangkat lunak (software)Adapun perangkat keras yang dibutuhkan adalah sebagai berikut : a. PC diatas pentium 3, yang memiliki serial port (COM1/COM2).
b. Hard Disk dengan kapasitas minimum 500 Kb c. Downloader serial untuk AVR.
Sedangkan perangkat lunak yang dibutuhkan adalah sebagai berikut : a.
Windows XP SP2 sebagai sistem operasi
b. CodeVision AVR sebagai program compiler
4. 2.Implementasi Pemrograman
Untuk memulai pemrograman jalankan CodeVision AVR yang terdapat di C:/cvavr/bin/cvavr.exe
Gambar 4.1 Folder Tempat Program CodeVision AVR Kemudian klik menu File->New. Pilih Project, kemudian klik OKGambar 4.2 Tahap awal pembuatan programPilih wizard avr, kemudian pilih chip yang akan digunakan, yaitu ATMega8535 dengan clock 11.0592.
Gambar 4.3 Pemilihan Chip dan Clock yang akan digunakanSetelah memilihi chip yang digunakan, selanjutnya konfigurasikan masing-masing port yang akan digunakan, port yang akan digunakan adalah port
(4.4a), port B untuk LCD konfigurasi port B dapat dilihat pada gambar (4.4b), port C untuk driver motor konfigurasi port C dapat dilihat pada gambar (4.4c), port D untuk sensor garis konfigurasi port D dapat dilihat pada gambar (4.4d).
(a) (b) .....
(c) (d)
Gambar 4.4 konfigurasi port yang akan digunakan Karena sensor warna menggunakan Pin ADC maka kita perlu mengatur konfigurasi ADCnya juga, dapat dilihat pada gambar (4.5a). Dan untuk penggunaan delay maka konfigurasi timer juga diperlukan, konfigurasi timer dapat dilihat pada gambar (4.5b), berikut ini konfigurasi ADC dan timer :(a) (b) Gambar 4.5 Konfigurasi timer dan ADC.
Setelah selesai, klik menu File->Generate, Save and Exit. Lalu akan muncul halaman untuk memasukkan code program.
Berikut ini potongan program simulasi mobil automatis :
void scan() { sensor=PIND; sensor&=0b00111111; switch (sensor)
{ case 0b00000001: maju(70,0 ); x=1; z=4; break ; case 0b00000011: maju(90,30); x=1; z=4; break ; case 0b00000010: maju(100,50); x=1; z=4; break ; case 0b00000110: maju(100,60); x=1; z=4; break ; case 0b00000100: maju(100,80); x=1; z=4; break ; case 0b00001100: maju(100,100); z=4; break ; case 0b00001000: maju(80,100); x=0; z=4; break ; case 0b00011000: maju(60,100); x=0; z=4; break ; case 0b00010000: maju(50,100); x=0; z=4; break ; case 0b00110000: maju(30,90); x=0; z=4; break ; case 0b00100000: maju(0,70); x=0; z=4; break ; case 0b00111111: belka(90,50); x=0; z=4; break ; case 0b00000000: if (x==1) belka (90,50); else belki (50,90); break ;
} }
Code di atas adalah code untuk scan garis hitam, fungsi ini digunakan agar mobil tetap berada di jalur yang ditentukan, yaitu tetap mengikuti garis hitam. Jika sensor berada di atas garis hitam maka sensor akan bernilai 1, dan jika berada di garis putih maka sensor akan bernilai 0. Setelah mengecek garis lintasan mobil digerakkan sesuai posisinya dengan menggunakan fungsi maju (a,b). posisi x merupakan indicator tempat terakhir mobil berada, jadi jika mobil keluar garis lintasan maka mobil akan bisa kembali dengan segera.
Contoh:
case 0b00000100: maju(100,80); x=1; z=4; break ; //1
case 0b00001000: maju(80,100); x=0; z=4; break ; //2
Jalan dari code 1 adalah jika sensor KI terkena garis hitam sedang yang lain membaca background putih, kemudian mobil akan berbelok ringan (motor kiri maju cepat, motor kanan maju ringan) dan x diset 1, 1 berarti kondisi ketika mobil berada di sebelah kiri garis hitam, sedangkan code 2 adalah jika sensor KA terkena garis hitam sedang yang lain terkena background putih, dan x diset=0,
Dengan mengingat keberadaan mobil maka ketika mobil keluar jalur, maka mobil akan berbelok sesuai dengan kondisi keberadaan mobil yang terakhir diingat.
case 0b00000000: if (x==1) belka (90,50); else belki (50,90); break ;
Jika x=1, kondisi mobil terkahir berada di sebelah kiri lintasan maka secara otomatis mobil akan langsung berbelok kanan sampai menemukan garis lintasan yang tepat, jika x=0, kondisi mobil terkahir di sebelah kanan lintasan maka secara otomatis mobil akan langsung berbelok kiri sampai menemukan garis lintasan yang tepat.
Selain melaju di garis luru mobil juga akan dihadapi dengan lintasan yang memiliki perempatan, dan jika menghadapi perempatan mobil akan langsung berbelok kanan, fungsi ini dapat dilihat di code berikut ini:
case 0b00111111: belka(90,50); x=0; z=4; break ;
code ini berarti mobil sedang berada di atas perempatan, perempatan dikenali dengan semua sensor sedang membaca garis hitam, jika kondisi perempatan terpenuhi maka mobil akan langsung berbelok kanan dengan fungsi belka(a,b).
void maju( unsigned char mki, unsigned char mka) { pwmki=mki; pwmka=mka; dirki=0; dirka=0; remki=1; remka=1;
}
Fungsi maju(a,b) adalah fungsi untuk maju, nilai a adalah pwm untuk motor kiri, b adalah nilai pwm untuk motor kanan. dirki=0 berarti direction motot kiri di aktifkan, begitu juga dengan dirka. Sedangkan remki merupakan nilai untuk rem motor baik motor kiri maupun kanan.
Remka dan remki harus dipastikan tidak aktif, karena jika remka atau remki diaktifkan berapapun besarnya pwm dan direksi yang diberikan maka motor tidak akan dapat bergerak sama sekali.
void belka( unsigned char mki, unsigned char mka) { pwmki=mki; pwmka=mka; dirki=0; dirka=1; remki=1; remka=1; }
Fungsi belka(a,b) adalah fungsi untuk belok kanan, untuk dapat belok kanan maka direction kanan harus berhenti dan direction kiri berjalan.
void belki( unsigned char mki, unsigned char mka) { pwmki=mki; pwmka=mka; dirki=1; dirka=0; remki=1; remka=1; }
Fungsi belki(a,b) adalah fungsi untuk belok kiri, untuk dapat belok kiri maka direction kiri harus berhenti dan direction kanan berjalan.
void stop (){pwmki=0; pwmka=0; remki=0; remka=0;} fungsi ini digunakan untuk menghentikan mobil. warna=read_adc(0);
l_tm=((255-m)/2)-10; //mencari nilai low merah h_tk=((255-k)/2)+10; //mencari nilai high kuning
th=(255-warna)/2; //mencari nilai tengah-tengah if(th<=h_tk) z=1; // kuning else if(th>l_tm)z=2; // merah fungsi ini digunakan untuk mengecek warna merah, hijau dan kuning. warna=read_adc(0) berfungsi untuk mengambil nilai warna yang dilihat saat ini, l_tm digunakan untuk mencari nilai low tegangan merah, h_tk=digunakan untuk mencari nilai max tegangan kuning, th digunakan untuk mencari nilai rata-rata tegangan saat ini. Jika nilai tegangan rata-rata saat ini kurang dari h_tk maka warna yang dilihat adalah warna kuning, jika nilai tegangan rata-rata saat ini lebih dari nilai l_tm maka warna yang dilihat adalah warna merah.
Untuk memberikan aksi kepada motor sesuai dengan warna yang dilihat maka digunakan potongan program di bawah ini :
warna=read_adc(0);
l_th=((255-h)/2)-10; h_th=((255-h)/2)+5; th=(255-warna)/2; if(z==1) { lcd_gotoxy(0,0);lcd_putsf(" kuning "); if(x==1) maju(50,40); else if(x==0) maju(40,50); else maju(50,50); } else if(z==2) { lcd_gotoxy(0,0);lcd_putsf(" merah ");stop();waktu(7); maju(80,80); } else if(th<h_th && th>l_th) { lcd_gotoxy(0,0);lcd_putsf(" ijo bro "); if(x==1) maju(70,50); else if(x==0) maju(50,70); else maju(100,100); } else {lcd_gotoxy(0,0);lcd_putsf(" item ");} Program ini berfungsi. Jika z==1, maka pwm ke motor akan dikurangi, dan direksi yang diberikan ke motor sesuai dengan posisi terakhir saat pendeteksian garis. Jika z==2, maka mobil akan berhenti selama 7 detik kemudian langsung maju, jika nilai th<h_th dan h>l_th maka mobil akan melaju seperti normal, jika semua tidak terpenuhi berarti sensor warna sedang membaca warna hitam sehingga tidak ada aksi yang diberikan kepada driver motor
4. 3.
Prosedur Pemasangan Program Pada ATMega8535
Agar listing program yang dibuat dapat dibaca oleh microcontroller, maka listig program yang awalnya berekstensi .c harus diconvert menjadi .hex.
Berikut ini alur proses pemasangan program pada ATMega8535 menggunakan program compiler CodeVision AVR.
Listing Code Compile Code Erro berekstensi .c r?
Perbaiki (Convert listing code
Make Program berkestensi .c menjadi .hex)
1. Flash erasure Checking
2. Flash Programming
Proses Pengisian Program
3. EEPROM Programming
Gambar 4.6 Alur Pemasangan Program Pada Microcontroller Untuk memasang program pada chip ATMega8535 pertama-tama program yang sudah dibuat sebelumnya harus dicompile terlebih dahulu, untuk memastikan tidak ada yang error, karena jika ada yang error maka program tidak akan bisa dibuat, hasil compile dari program yang sudah tidak memiliki error adalah seperti gambar di bawah ini:Gambar 4.7 Hasil compilasi programSetelah tidak ada kesalahan selanjutnya make program, hasilnya dapat dilihat pada gambar 4.8, setelah make program selesai listing code yang awalnya berekstensi .c akan diconvert menjadi .hex, untuk mengetahuinya dapat dilihat di folder tempat penyimpanan file project yang sedang dibuat, seperti yang ditunjukkan pada gambar 4.9 .
Gambar 4.8 Tampilan Saat Make ProgramGambar 4.9 Hasil Convert File t5.cSetelah itu klik button “Program the chip”. Maka proses selanjutnya adalah proses pengisian program, ada juga yang menamakan penanaman program pada chip ATMega8535.
Pengisian program ini dilakukan secara bertahap :
1. Proses pertama pengecekan kondisi memori flash chip
2. Jika chip belum terpasang dengan benar maka aka nada peringatan error.
3. Jika chip sudah terpasang dengan benar maka memori flash yang ada sebelumnya dihapus
4. Proses selanjutunya adalah proses pengisian memori flash.
5. Setelah proses pengisian memori flash selesai, selanjutnya proses pengisian memori EEPROM. Proses ini dilakukan hanya jika listing code yang dibuat menggunakan fasilitas EEPROM, jika tidak maka proses ini akan dilewati.
Berikut ini hasil dari pengisian program pada chip ATMega8535
………. (a) (b)