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 OK
Gambar 4.2 Tahap awal pembuatan program
Pilih wizard avr, kemudian pilih chip yang akan digunakan, yaitu
ATMega8535 dengan clock 11.0592.
Gambar 4.3 Pemilihan Chip dan Clock yang akan digunakan
Setelah 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)
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 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;
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.
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
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
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);
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.
Gambar 4.6 Alur Pemasangan Program Pada Microcontroller
Listing Code
berekstensi .c Compile Code Erro
r?
Perbaiki
Make Program (Convert listing code
berkestensi .c menjadi .hex)
Proses Pengisian Program 1. Flash erasure Checking
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 program
Setelah 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 Program
Gambar 4.9 Hasil Convert File t5.c
Setelah 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
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)