bab iv hasil dan pembahasan 4.1 hasil -...

45
33 BAB IV HASIL DAN PEMBAHASAN 4.1 Hasil Dari hasil penelitian penulis yang telah lakukan bahwa pembuatan blok diagram rangkaian robot akan mempermudah dalam identifikasi masalah dan perbaikanya, serta memungkinkan untuk pengembangan pada bagian input maupun pada bagian outputnya. 4.1.1 Desain rangkaian Dalam tahap ini penulis membagi desain bentuk robot menjadi beberapa bagian yang berguna untuk memudahkan dalam perbaikan juga aplikasi fungsi robot, diantaranya adalah. A. Desain hardware robot Gambar 4.1. Kerangka robot OPTIMUS Keterangan : 1. 8x Foto dioda 2. SRF04 3. LM35 4. Fan 5. H-Bridge 6. Minimum sistem 7. 2 buah Switch on/off 8. LCD 9. 2 buah Motor DC 10. 2 buah Roda 1 2,3 4 5 6 8 7 7 9 9 10 10 Cancel OK Down UP kompa rator

Upload: nguyenminh

Post on 22-Feb-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

33

BAB IV

HASIL DAN PEMBAHASAN

4.1 Hasil

Dari hasil penelitian penulis yang telah lakukan bahwa pembuatan blok

diagram rangkaian robot akan mempermudah dalam identifikasi masalah dan

perbaikanya, serta memungkinkan untuk pengembangan pada bagian input

maupun pada bagian outputnya.

4.1.1 Desain rangkaian

Dalam tahap ini penulis membagi desain bentuk robot menjadi beberapa

bagian yang berguna untuk memudahkan dalam perbaikan juga aplikasi fungsi

robot, diantaranya adalah.

A. Desain hardware robot

Gambar 4.1. Kerangka robot OPTIMUS

Keterangan :

1. 8x Foto dioda

2. SRF04

3. LM35

4. Fan

5. H-Bridge

6. Minimum sistem

7. 2 buah Switch on/off

8. LCD

9. 2 buah Motor DC

10. 2 buah Roda

1

2,3

4

5

6

8

7 7

9 9

10 10

Cancel OK

Down UP

kompa

rator

34

Cara operasional robot, dengan cara robot diletakkan diatas jalur hitam

dengan warna dasar putih dengan ukuran jalur 2 centimeter, hidupkan saklar 1

(no.7) ke on pada sisi kiri robot untuk menghidupkan rangkaian mikrokontroler

yang kemudian robot dalam kondisi stanby, hidupkan pula saklar 2 (no.7) pada

sisi kanan robot untuk menghidupkan rangkaian H-bridge atau motor dc. Apabila

di tekan tombol OK yang berada di atas sisi kanan depan maka program robot

akan berjalan mengikuti jalur, dan apabila di tekan tombol cancel yang berada

diatas sisi kiri depan maka LCD akan menmpilkan menu yang memungkinkan

dapat merubah program sederhana pada robot dengan bantuan dua switch yang

berada di sebelah tombol cancel untuk pilihan turun (down) dan disebelah tombol

OK untuk pilihan naik (up).

Perlu diperhatikan robot menggunakan catu baterai 7 hingga 12 volt dc,

agar baterai lebih hemat maka saat melakukan seting pada menu robot sebaiknya

saklar 2 pada sisi kanan robot dimatikan, setelah selesai dari menu seting

hidupkan saklar 2 lagi sebelum menekan tombol OK.

B. Desain rangkaian robot

Dalam pembuatan robot penulis membagi dalam tiga kelompok yaitu

input, proses dan output sesuai dengan blok diagram berikut:

Gambar 4.2 Diagram blok rangkaian

Mikrokontroler

ATMega8535

Input Proses Output

LCD

Motor dc

Driver

BD139

Relay

Fan

Driver

FET IRF540

SRF04

Foto diode

8x

LM35

Keypad

Komparator

Motor dc

ACCU

12V

Regulator

7805

A.0-7

Port C

D.7

B.4-7

B.1, 2 B.0

D.3-6 B.3

35

C. Penjelasan rangkaian

1. Sensor foto dioda, SRF04, LM35

Gambar 4.3. Rangkaian sensor foto dioda

Bagian sensor foto dioda, bagian ini terdiri dari foto dioda sebagai sensor

cahaya, LED sebagai sumber cahaya untuk sensor foto dioda, cahaya yang

dipancarkan mengenai warna hitam yang berarti akan redup, karena warna hitam

bersifat menyerap cahaya dan apabila terkena benda warna putih maka cahaya

akan dipantulkan yang berarti cahaya sangat kuat dengan adanya dua kondisi

tersebut maka akan dikonversi oleh foto dioda dan mikrokontroler menjadi

keadaan nilai 0 dan 1. Diperlukannya LED adalah karena dibutuhkannya sumber

cahaya yang stabil. Rangkaian ini dilengkapi dengan resistor yang digunakan

sebagai pembatas maupun pembagi tegangan untuk pengaman LED serta foto

dioda.

Bagian Sensor SRF04, sensor memancarkan sinyal ultrasonic dari trigger

yang dipicu dari mikrokontroler kemudian dipancarkan dan bila terkena benda

sinyal dipantulkan kembali kemudian diterima SRF04 lagi, diolah oleh mikro

berapa lama waktu tempuh sinyal tadi yang kemudian dikonversi menjadi jarak.

36

Bagian sensor LM35, sensor ini sensitive terhadap perubahan suhu

sehingga mampu mendeteksi suhu kamar, dan mengeluarkan tegangan output 0

hingga 5 volt yang kemudian dikonversi menjadi nilai suhu 0-100 derajar celciun

(0C)

2. Keypad /Switch

Terdiri dari empat buah switch yang dikombinasikan menjadi keypad, yang

berfungsi sebagai keypad yang akan digunakan sebagai tombol satu untuk tombol

OK (start) menjalankan robot atau menjalankan program, tobol dua sebagai

tombol menu (cancel) untuk mengubah program robot secara sederhana yang

telah disajikan pada menu utama robot, tombol tiga dan empat sebagai tombol

(down, up) sebagai tombol pilihan menggeser ke bawah atau ke atas saat

mensetting menu program yang telah di simpan pada IC ATMega8535 pada

mikrokontroler. Diantaranya adalah kecepatan motor, setting PID, cek motor, cek

sensor, melihat nilai ADC pembacaan sensor foto dioda dan lainya yang tertera

pada program menu.

Gambar 4.4 Rangkaian keypad

3. Minimum system mikrokontroler ATMega8535

Dalam blok ini, penulis membuat desain rangkaian minimum yang terdiri

dari IC ATMega8535 dan beberapa komponen dengan fungsi dan kegunaan:

37

Gambar 4.5. Rangkaian minimum system mikrokontroler

a) IC ATMega8535 untuk menyimpan program robot,

b) X-tal 12 M.Hz dan 2 buah kapasitor keramik sebagai pembangkit

frekuwensi clock

c) Resistor, sebagai pengaman LED

d) LED sebagai indicator catu daya robot

e) IC 7805, dioda, kapasitor elektrolit sebagi penstabil tegangan 5

volt DC sebagai sumber catu daya microprosesor,

38

f) Switch digital sebagai tombo reset

g) 2 buah switch untuk on-off vcc mikrokontroler dan switch H-

bridge sebagai actuator robot, dan dilengkapi dengan socket I/O

yang nantinya akan dihubungkan ke bagian yang lain.

4. LCD

Bagian ini terdiri dari LCD 16x2 yang akan digunakan untuk memonitor

program, dan dilengkapi dengan empat (4) buah tombol digital (OK, Cancel, up,

Down), serta variable resistor sebagai pengatur pencahayaan latar pada LCD

terang atau gelap, karena LCD tidak akan bisa terbaca kalau cahaya backligth-nya

terlalu terang atau sebaliknya terlalu redup. Maka harus disesuaikan

pencahanyaannya.

Gambar 4.6. Rangkaian LCD

5. Motor (driver H-brigde)

Pada bagian ini terdiri dari rangkaian driver sebagai penguat daya.

Rangkaian ini terdiri dari FET dan transistor sebagai penguat dayanya agar dapat

memutar motor dengan daya besar namun menghemat baterai atau arus baterai

tidak cepat habis dan tetap bisa menggunakan baterai dibawah 12 volt DC dengan

kecepatan tinggi.

39

Gambar 4.7. Rangkaian H-Bridge

Rangkaian H-bridge berfungsi untuk driver motor dc yang terdiri dari dua

buah motor dc, gear, dan roda untuk menjalankan robot sebagai mesin

penggeraknya.

Gambar 4.8. Motor DC penggerak robot

40

4.1.2 Pemrograman

Setelah penulis buat rangka fisik robot maka langkah yang selanjutnya

adalah pembuatan program. Dalam pemrograman merupakan bagian inti dari

pembuatan tugas akhir ini, yang akan penulis bahas tahap demi tahap

A. Langkah-langkah pemrograman

Perangkat lunak yang digunakan pada tugas akhir ini ditulis pada teks

editor dalam bahasa C dan software yang digunakan adalah Code Vision Avr.

setelah program selesai dibuat, kemuadian program disimpan dengan nama file

yang berekstensi *.c. Selanjutnya program yang telah selesai dibuat tadi dilakukan

kompilasi dari *.c ke dalam kode-kode instruksi mesin yang sesuai dengan up-

code mikrokontroler Intel dengan ekstensi *.hex, yang kemudian di flash ke chip

mikrokontroler.

Dalam pembuataan tugas akhir ini pemrograman merupakan salah satu

langkah yang sangat penting sebab bekerja atau tidaknya robot bergantung dari

bagaimana memrogram robot, tanpa program robot tidak akan berfungsi sesuai

yang direncanakan. Langkah-langkah pembuatan program tersebut yang penulis

sajikan adalah sebagai berikut :

1. Pembuatan diagram alir

Dalam menyusun diagram alir diusahakan dapat membagi proses yang

kompleks menjadi sub program yang lebih kecil, sehingga pencarian kesalahan

akan lebih mudah. Selain itu akan memudahkan orang lain dalam membaca alir

program yang dibuat.

41

Gambar 4.9. Diagram alir robot pemadam api dan pencari jejak

2. Pembuatan program

Penulisan program dilaksanakan setelah diagram alir selesai dirancang.

Pemilihan editor teks disesuaikan dengan kebiasaan dan kesenangan. Agar teks

Start /

ON

Sw OK = 0 SW Cancel = 0 Menu Utama

YA

YA Tidak

Tidak

Start

Timer

Sensor garis

YA

Tidak

Sensor jarak

PID

OK

Motor

jalan

Jarak

< 10 cm

YA

Tidak

Tidak

Motor

berhenti

FAN

hidup

Suhu >400 C

Finish

Sensor Suhu

FAN

mati

YA

Sensor cahaya

Kondisi 1

YA

Tidak FAN

mati

42

yang telah dibuat nantinya dapat dimengerti oleh program AVR prog maka hasil

penulisan program harus dibuat dengan ekstension *.c dan dirubah menjadi

bahasa mesin dengan ekstensi *.hex.

3. Kompilasi program

Program yang ditulis menggunakan editor teks kemudian dikompilasi

dengan menggunakan program Code vision AVR. Bila tidak ada peringatan error

atau kesalahan, proses kompilasi telah berhasil. Bila ada pesan kesalahan, dapat

dicari kesalahan yang terjadi berdasarkan informasi pesan kesalahan tersebut.

4. Pengisian program

Perlengkapan yang dibutuhkan dalam pengisian flash ATMega8535,

diantaranya :

a) Catu Daya

b) Kabel isp kanda STK 500 using paralel progaming

c) PC dengan Sistem Operasi MS Windows 9X/me/NT/2000/XP/7/8

d) Perangkat lunak pemrograman ( Code Vision AVR )

e) Pengisian program yang telah dikompilasi dalam format

heksadesimal (hex), diisikan ke dalam Flash EPROM ATMega8535

dengan menjalankan perangkat lunak pemrograman.

Sedangkan urutan cara pengisian program ke dalam Flash EPROM

ATMega8535 adalah sebagai berikut :

a) Pastikan kabel telah terhubung antara PC dengan rangkaian

programmer ATMega8535 telah terpasang.

b) IC ATMega8535 telah terpasang pada soket yang telah ditentukan

pada rangkaian yang siap untuk pengisi Flash EPROM Programmer

ATMega8535.

c) Berikan catu tegangan DC 5 V ke rangkaian pengisi Flash EPROM

Programmer ATMega8535, yang di catu oleh komputer atau

dengan catu tersendiri.

d) Jalankan perangkat lunak pemrograman Code Vision AVR

e) Pastikan settingan komunikasi portnya telah sesuai (jika

43

menggunakan paralel port, program AVR prog telah terinstal dan

bila menggunakan serial port tentukan antara com 1-6 dan pastikan

sama com port nya antara settingan komputer dan code vision AVR)

f) Code program yang telah dibuat di kompilasi kemudian di isi atau

flash ke chip mikrokontroler ATMega8535.

g) Cabut kabel komunikasinya dan pasang baterai robot untuk

menjalankan robot hasil pemrograman.

B. Code Vision AVR

Setiap akan membuat program baru pada Code Vision AVR, kita akan

diarahkan untuk membuat project terlebih dahulu. Pada menu File pilih New lalu

klik ceklist Project dan klik OK.

Gambar 4.10. Tipe project

Maka akan tampilah jendela konfirmasi setelah dipilih ok, dan apabila kita

memilih source maka akan ditampilkan arah untuk membuka program yang sudah

pernah dibuat. Code Vision AVR akan menanyakan apakah anda akan

menggunakan fasilitas Code Wizard AVR ataukah tidak untuk suatu program baru

dan memudahkan nantinya dalam pembuatan program maupun saat program

setelah jadi dan akan digunakan agar tidak terjadi kekeliruan.

Fasilitas ini sangatlah berguna jika anda tidak ingin bersusah payah

melakukan settingan dengan mengetik code-code tertentu yang banyak dan

44

kompleks. Intinya terdapat tab-tab yang tinggal klik dan anda akan langsung

disajikan contoh kodenya.

Contohnya jika pembaca ingin membuat program yang memakai eksternal

interrupt maka tinggal pilih tab External IRQ, pada tampilan Code Wizard. Klik

pada INT 0 Enabled untuk memilih external interrupt 0 dan pilih mode

pembangkitan interrupt yang ingin digunakan. Mode pembangkitan eksternal

interrupt terdiri dari rising edge atau falling edge atau any change. Untuk melihat

code yang akan dihasilkan klik pada menu File dan pilih Program Preview.

Gambar 4.11 Jendela konfirmasi code wizard

Gambar 4.12.Seting pada tab chip

45

Gambar 4.13 Seting pada tab timers

Pada tab chip pilih ATMega8535 dan clock sesuai dengan clock yang

terpasang 12 MHz atau 16 MHz, dan pada gambar 4.13. atau tab timers pilih

timer1 Clock source pilih System Clock, kemudian pada Clock Value pilih

187.500 kHz, pilihan pada mode adalah Fast PWM top=00FFh, sedangkan pada

output baik out A maupun Out B pilih Inverted.

Kemudian yang berikutnya adalah tab LCD, pada LCD Port pilih PORTC

sebagai tampilan LCD sesuai dengan gambar 4.14, dan pada Chars/Line pilih 16

karena menggunakan LCD 2x16. setelah port LCD dipilih maka akan langsung

ditampilkan pin-pin LCD yang akan digunakan atau terhubung dengan port pada

mikrokontroler seperti pada gambar 4.15

46

Gambar 4.14. Seting pada tab LCD

Gambar 4.15 Port yang dipakai LCD

Gambar 4.16. Seting pada tab ADC

47

Setingan pada tab ADC adalah seperti pada gambar 4.16. ADC enable di

ceklis dan bila menggunakan 8 bit maka use 8 bit diceklis, pada volt ref pilih

AVCC pin, clock pilih 750.000 kHz. Kemudian jika menggunakan analog

comparator pada tab Analog Comparator di enabled. Terlihat pada gambar 4.17

Gambar 4.17. Seting pada tab analog comparator

Setelah semua telah dilakukan seting sesuai yang diinginkan klik File <

Generate, Save and Exit seperti gambar 4.18

Gambar 4.18. Generate program

48

Kemudian lakukan penyimpanan seperti biasa sebanyak tiga kali dengan

nama file sama namun berbeda extensi. Ketik nama project yang akan dibuat dan

klik save.

Gambar 4.19. Menyimpan file code

Gambar 4.20. Tampilan penulisan code vision AVR

49

File code yang memiliki ekstensi *.c yang akan dibuat nantinya disave

pada suatu tempat dan di masukkan ke dalam project dengan mengklik Add pada

tab File seperti diatas. Pada tab C Compiler akan ditemukan tab lagi didalamnya.

Tab yang sering digunakan ialah tab Code Generation.

Proses coding menggunakan bahasa C belum dapat dimulai setelah

mengkonfigurasi project yang dibuat. Setelah selesai membuat code simpan file

seperti pada gambar 4.21.

Gambar 4.21. Menyimpan code program

Untuk memasukkan file *.c yang telah disave ke dalam project klik menu

Project dan pilih Configure.

Gambar 4.22. Menu bar project

50

Kita akan dihadapkan kembali pada windows seperti pada Configure

Project diatas. Klik tab after make dan ceklist Program the chip, kemudian OK.

Yang kemudian klik compile dan perhatikan pastikan tidak ada yang error, seperti

tampilan pada gambar 4.26. Namun jika terjadi error untuk mengetahui letak

kesalahan pada code, tinggal klik pada tab navigator bagian Errors atau dapat

mengklik pada tab Messages untuk mengetahui letak kesalahan pada code. Pada

contoh berikut dapat dilihat sintaks #include <mega8535.h akan diblok dengan

warna biru yang menunjukkan kesalahan terletak pada sintaks tersebut.

4.23. Hasil kompilasi program

Gambar 4.24. Merubah program .hex

51

Setelah klik make maka ikuti prosesnya selain melakukan compiling akan

mengenerate beberapa file termasuk *.hex yang akan diburn ke mikrokontroler

dan file *.coff yang dapat disimulasikan pada AVR studio.

Gambar 4.25 Memasukkan program kedalam chip IC

Gambar 4.26. Ketidaksesuaian port

52

Setelah proses compiling berhasil maka akan muncul proses pengisian

ke mikrokontroler, dan apabila gagal seperti pada gambar 4.26 berarti

komunikasi port nya tidak sesuai, maka sesuaikan dan ulangi untuk

memasukkan lagi.

4.2 Pembahasan dan Pengujian Robot

Setelah program dibuat dan di generate ke mikrokontroler maka tinggal

mencoba pada robot, apakah code program yang dibuat bekerja sesuai yang kita

harapkan atau tidak, agar perbaikan dan penulisan ulang program dapat mudah

dilakukan dengan cara pengujian satu persatu.

A. Pengujian I (LCD)

Salah satu bagian penting dari robot ini adalah LCD, dengan keguanaan

untuk menampilkan progress kerja dari robot, agar LCD dapat berfungsi adalah

cara pemrogramanya sebagi berikut:

1. Bukalah aplikasi Code Vision AVR

2. Pilih tab File > New

3. Maka akan muncul tampilan pilihan tipe file, dan pilih project > OK

4. Maka akan tampil pilihan apakah akan menggunakan fasilitas Codewizard

maka klik Yes, karena dengan fasilitas ini akan memudahkan cara seting

port-port mikrokontroler.

5. Maka akan ditampilkanya jendela Codewizard AVR yang kemudian

diseting sesuai dengan kebutuhan yang telah direncanakan fungsi dari

masing-masing kaki IC ATMega8535 pilih chip dengan ATMega8535 dan

clock 12.000.000

6. Tab Port seting PortD.7 sebagai output (untuk menghidupkan lampu latar)

7. LCD gunakanlah pada Port C

8. Ketikkan header sebagai berikut:

#include <mega8535.h> //menggunakan IC ATMega8535

#include <delay.h> // nanti saat pembuatan program menggunakan delay

9. Ketikkan juga definisi untuk memudahkan

// Display

#define led PORTD.7

53

#define on 1 // menghidupkan lampu latar lcd

#define off 0

// menghidupkan lcd menggunakan bahasa asembler

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

#include <lcd.h>

// Display

#define led PORTD.7

#define on 1

#define off 0

// LCD module initialization

lcd_init(16);

led=on;

stop();

delay_ms(10);

lcd_gotoxy(0,0);

lcd_putsf("BISMILLAH.......");

delay_ms(200);

lcd_clear();

lcd_gotoxy(3,0);

lcd_putsf("**TEKAN OK**");

B. Pengujian 2 (sensor jalur atau garis)

Pada pengujian sensor garis karena menggunakan sensor foto dioda dan

menggunakan delapan sensor dengan proses masukan berdasarkan cahaya yang

masuk maka dipastikan led sebagai sumber cahaya mandiri dengan menutup

semua sisi-sisinya agar cahaya dari luar baik matahari ataupun cahaya penerangan

tidak mengganggu.

Bekerja dengan pantulan dari jalur yang ada apabila mengenai warna

hitam maka cahaya yang masuk ke sensor kecil dan apabila mengenai warna putih

54

maka akan dipantulkan cahaya tersebut sangat kuat. Dari perbedaan tersebut maka

di umpankan ke mikrokontroler dengan nilai digital 0 dan 1.

1. Bukalah aplikasi Code Vision AVR

2. Pilih tab File > New

3. Maka akan muncul tampilan pilihan tipe file, dan pilih project > OK

4. Maka akan tampil pilihan apakah akan menggunakan fasilitas Codewizard

maka klik Yes, karena dengan fasilitas ini akan memudahkan cara seting

port-port mikrokontroler.

5. Maka akan ditampilkanya jendela Codewizard AVR yang kemudian

diseting sesuai dengan kebutuhan yang telah direncanakan fungsi dari

masing-masing kaki IC ATMega8535 pilih chip dengan ATMega8535 dan

clock 12.000.000

6. Tab Port seting port A sebagai input, Port B sebagai input tetapi PortB.2

dan PortB.3 sebagai output, PortD.7 sebagai output

7. LCD gunakanlah pada Port C

8. ADC enable dan Volt Ref pilih AVCC pin

9. Ketikkan header sebagai berikut:

#include <mega8535.h>

#include <delay.h>

10. Ketikkan juga definisi untuk memudahkan

Berikut code program untuk mencoba ke delapan sensor yang berada pada

portA yang juga sebagai port ADC:

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

#include <lcd.h>

///////////////////////////////////////////Ini siali sasi port//////////////////////////////

// Display

#define led PORTD.7

#define on 1

#define off 0

#define ADC_VREF_TYPE 0x60

55

// Read the 8 most significant bits

unsigned char read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage

delay_us(10);

// Start the AD conversion

ADCSRA|=0x40;

// Wait for the AD conversion to complete

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCH;

}

// eeprom & inisialisasi awal, ketulis lg saat ngisi chip

eeprom unsigned char back[10];

unsigned char x,sendat;

unsigned char buff[33],buff1[33];

unsigned char sensor[10],s[10];

unsigned char Msg1[16];

unsigned char Msg2[16];

char lcd_buffer[33];

///////////////////////////////////////Progam untuk menampilkan nilai

void view(unsigned char dat)

{

unsigned char data;

data = dat / 100;

data+=0x30;

lcd_putchar(data);

dat%=100;

data = dat / 10;

data+=0x30;

lcd_putchar(data);

dat%=10;

data = dat + 0x30;

56

lcd_putchar(data);

}

///////////////////////////////////////////Pemrintah pembacaan ADC

void baca()

{

s[0]=read_adc(0);

s[1]=read_adc(1);

s[2]=read_adc(2);

s[3]=read_adc(3);

s[4]=read_adc(4);

s[5]=read_adc(5);

s[6]=read_adc(6);

s[7]=read_adc(7);

}

//////////////////////Perintah pengambilan data ADC///////////////////////

void cekback()

{

lcd_clear();

for (x=0;x<=7;x++)

{

lcd_gotoxy(0,0);

sprintf(buff,"%d",x);

lcd_puts(buff);

back[x]=read_adc(x);

lcd_gotoxy(5,1);

sprintf(buff1,"%d",back[x]);

lcd_puts(buff1);

led=on;

delay_ms(100);

led=off;

delay_ms(100);

lcd_clear();

}

}

57

//////////////////// Perintah pembacaan sensor////////////////////////

void hitsen()

{

for(x=0;x<=7;x++)

{

s[x]=read_adc(x); if (s[x]>(back[x])+20){sensor[x]=1;} else

{sensor[x]=0;}

}

sendat=(sensor[0]*1)+(sensor[1]*2)+(sensor[2]*4)+(sensor[3]*8)+(sensor[4]*16)

+(sensor[5]*32)+(sensor[6]*64)+(sensor

[7]*128);

}

////////////////////// perintah tampilan hasil pembacaan sensor////////////////////////

void displaySensorBit()

{

baca();

lcd_gotoxy(4,1);

if (s[0]>(back[7])+30) lcd_putchar(0xff);

else lcd_putchar('_');

if (s[1]>(back[6])+30) lcd_putchar(0xff);

else lcd_putchar('_');

if (s[2]>(back[5])+30) lcd_putchar(0xff);

else lcd_putchar('_');

if (s[3]>(back[4])+30) lcd_putchar(0xff);

else lcd_putchar('_');

if (s[4]>(back[3])+30) lcd_putchar(0xff);

else lcd_putchar('_');

if (s[5]>(back[2])+30) lcd_putchar(0xff);

else lcd_putchar('_');

if (s[6]>(back[1])+30) lcd_putchar(0xff);

else lcd_putchar('_');

if (s[7]>(back[0])+30) lcd_putchar(0xff);

else lcd_putchar('_');

}

58

signed char error, error1;

int var_Kp, var_Kd, nil_kan, nil_kir,ts;

int maxpwm, minpwm;

//////////////////////Progam kontrol PID//////////////////////////

void kond_sensor()

{

hitsen(); //menghitung data sensor dr rutin diatas sudah dibahas

switch(sendat)

{

case 0b10000000: error=48; break; //kondisi sensor pada garis

case 0b11100000: error=35; break;

case 0b11000000: error=35; break;

case 0b01000000: error=24; break;

case 0b01110000: error=15; break;

case 0b01100000: error=15; break;

case 0b00100000: error=8; break;

case 0b00111000: error=3; break; // kondisi eror eror pada sensor

case 0b00110000: error=3; break;

case 0b00010000: error=1; break;

case 0b00011000: error=0; break;

case 0b00001000: error=-1; break;

case 0b00001100: error=-3; break;

case 0b00000100: error=-8; break;

case 0b00001110: error=-15; break;

case 0b00000110: error=-15; break;

case 0b00000010: error=-24; break;

case 0b00000111: error=-35; break;

case 0b00000011: error=-35; break;

case 0b00000001: error=-48; break;

case 0b00000000:

if (error>24)

{

error=48;

// bkan();

59

delay_ms(20);

} //program diatas apabila terjadi garis tak terbaca dan

terakhir kondisi terbaca 24 sampai 48 maka harus belok kanan

else if (error<-24)

{

error=-48;

// bkir();

delay_ms(20);

} //program diatas apabila terjadi garis tak terbaca dan terakhir

kondisi terbaca -24 sampai -48 maka harus belok kiri

else

{

error=0;

//maju();

} // namun jika kondisi terakhir ditengah atau error 0 maka lurus

};

}

// Declare your global variables here

void main(void)

{

PORTA=0x00;

DDRA=0x00;

PORTB=0xF0;

DDRB=0x04;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0xFF;

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

TCCR1A=0xF1;

TCCR1B=0x0B;

TCNT1H=0x00;

60

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

ACSR=0x80;

SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x84;

SFIOR&=0xEF;

// LCD module initialization

lcd_init(16);

led=on;

while (1)

{

displaySensorBit();

};

}

Maka jika code diatas di masukkan kedalam chip ATMega8535 maka

akan menampilkan delapan buah baris sebagai indikasi dari kedelapan sensor

garis, apabila salah satu atau semua sensor tersebut menghadap garis putih maka

tanda garis di LCD akan hilang dan bila terkena atau diarahkan ke warna hitam

maka akan muncul garis, garis-garis tersebut adalah nilai 1 apabila terkena warna

hitam dan nilai 0 saat terkena warna putih.

61

C. Pengujian 3 (sensor jarak / ultrasonic)

Pada pengujian ini penulis menggunakan sensor SRF04, yang dipasang

pada bagian depan robot sebagai alat navigasi robot yang akan memberitahukan

bahwa didepan ada benda, sensor ini dapat mendeteksi jarak antara 3 cm sampai

400 cm, dan berikut cara membuat code program sensor ultrasonic sebagai sensor

jarak:

1. Bukalah aplikasi Codevision AVR

2. Pilih tab File > New

3. Maka akan muncul tampilan pilihan tipe file, dan pilih project > OK

4. Maka akan tampil pilihan apakah akan menggunakan fasilitas Codewizard

maka klik Yes, karena dengan fasilitas ini akan memudahkan cara seting

port-port mikrokontroler.

5. Maka akan ditampilkanya jendela Codewizard AVR yang kemudian

diseting sesuai dengan kebutuhan yang telah direncanakan fungsi dari

masing-masing kaki IC ATMega8535 pilih chip dengan ATMega8535 dan

clock 12.000.000

6. Tab Port seting Port B sebagai input tetapi PortB.2 sebagai output, PortD.7

sebagai output

7. LCD gunakanlah pada Port C

8. Ketikkan header sebagai berikut:

#include <mega8535.h>

#include <delay.h>

#include <stdio.h>

9. Ketikkan juga definisi untuk memudahkan

#define ECHO PINB.1 //kabel merah penerima pantulan

#define TRIGGER PORTB.2 //kabel hijau pemancar ultrasonik

// Display

#define led PORTD.7

#define on 1

#define off 0

unsigned char jarak;

unsigned int baca_jarak()

{

62

jarak=0;

TRIGGER=0;

delay_us(10);

TRIGGER=1;

delay_us(20);

TRIGGER=0;

while (ECHO==0);

while (ECHO==1){jarak++; delay_us(710);}

delay_ms(40);

return jarak;

}

// Declare your global variables here

void main(void)

{

// Port A initialization dari sini sampai SFIOR=0x00 otomatis muncul sesuai saat

menseting code wizard

PORTA=0x00;

DDRA=0x00;

// Port B initialization

PORTB=0x01;

DDRB=0x01;

// Port C initialization

PORTC=0x00;

DDRC=0x00;

// Port D initialization

PORTD=0x00;

DDRD=0x00;

// Timer/Counter 0 initialization

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

TCCR1A=0x00;

TCCR1B=0x00;

63

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// Analog Comparator initialization

ACSR=0x80;

SFIOR=0x00;

// LCD module initialization

lcd_init(16);

led=on;

lcd_clear();

while (1)

{

// Place your code here

if (baca_jarak()<=1){lcd_gotoxy(0,0);lcd_putsf("jaraknya kira2 10 cm");}

else if (baca_jarak()<=2){lcd_gotoxy(0,0);lcd_putsf("jaraknya kira2x 20

cm");}

else if (baca_jarak()<=3){lcd_gotoxy(0,0);lcd_putsf("jaraknya kira2x 30

cm");}

else if (baca_jarak()<=4){lcd_gotoxy(0,0);lcd_putsf("jaraknya kira2x 40

cm");}

64

else {lcd_gotoxy(0,0);lcd_putsf("lebih jauh dari 40 cm");}

};

}

Nilai 710 dapat diganti disesuaikan dengan jarak sebenarnya dengan cara

meletakkan benda dari 10 cm kemudian mundur 20 cm pastikan pas dengan

perubahan pada nilai LCD yang muncul jika belum maka dapat ditambah atau

dikurangi nilai 710 tersebut hingga menemukan formula yang tepat.

Penulis hanya membuat satuan lima macam ukuran kurang dari 10 cm,

kurang dari 20 cm, kurang dari 30 cm, kurang dari 40 cm dan lebih jauh dari 40

cm, namun itu bisa dirubah parameternya maupun kelompoknya setiap 5 cm atau

25 cm sesuai keinginan, cuma di rubah angka 710 tersebut. Dengan asumsi 1 cm

menggunakan delay atau waktu 710 us.

D. Pengujian 4 (sensor suhu)

Pada pengujian sensor suhu penulis menggunakan IC LM35 sebagai

sensor suhunya dan menggunakan rangkaian kumparator sebagai penguat

tegangan output IC

1. Bukalah aplikasi Codevision AVR

2. Pilih tab File > New

3. Maka akan muncul tampilan pilihan tipe file, dan pilih project > OK

4. Maka akan tampil pilihan apakah akan menggunakan fasilitas Codewizard

maka klik Yes, karena dengan fasilitas ini akan memudahkan cara seting

port-port mikrokontroler.

5. Maka akan ditampilkanya jendela Codewizard AVR yang kemudian

diseting sesuai dengan kebutuhan yang telah direncanakan fungsi dari

masing-masing kaki IC ATMega8535 pilih chip dengan ATMega8535 dan

clock 12.000.000

6. Tab Port seting port A sebagai input, Port B sebagai input tetapi PortB.2

dan PortB.3 sebagai output, PortD.7 sebagai output

7. LCD gunakanlah pada Port C

8. ADC enable dan Volt Ref pilih AVCC pin

9. Ketikkan header sebagai berikut:

65

#include <mega8535.h>

#include <delay.h>

#include <stdlib.h>

#include <lcd.h>

10. Ketikkan juga definisi untuk memudahkan

// Display

#define led PORTD.7

#define on 1

#define off 0

// Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

#include <lcd.h>

int SUHU;

char temp[8];

float suhu_celcius;

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage

delay_us(10);

// Start the AD conversion

ADCSRA|=0x40;

// Wait for the AD conversion to complete

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void main(void)

{

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC Clock frequency: 750.000 kHz

// ADC Voltage Reference: AVCC pin

// ADC Auto Trigger Source: None

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x84;

// LCD module initialization

66

lcd_init(16);

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf(“MUHAMMAD ABDUROHMAN”); // tampilan lcd

lcd_gotoxy(0,1);

lcd_putsf(“SENSOR SUHU LM35”); // tampilan lcd

delay_ms(1000);

while (1)

{

lcd_clear( );

SUHU = read_adc(0);

suhu_celcius = (float)SUHU*500/1023; //rumus untuk mengubah kedalam

derajat celcius

lcd_gotoxy(0,0);

lcd_putsf(“MUHAMMAD ABDUROHMAN”);

ftoa(suhu_celcius,1,temp);

//float to array, mengubah tipe data float ke tipe data array yg akan ditampilkan di

LCD

lcd_gotoxy(0,1);

lcd_puts(temp);

lcd_gotoxy(5,1);

lcd_putchar(0xdf);//menampilkan karakter derajat

lcd_putsf(“C”);

delay_ms(500);

};

}

E. Pengujian 5 (motor dc)

Dalam pengujian ini penulismenggunakan 2 buah motor dc dengan

penguat daya menggunakan komponen FET dengan seting PWM Pengaturan

kecepatan dengan H-Bridge

Kecepatan motor dapat dilakukan dengan penambahan komponen pada

rangkaian H-Bridge dengan memberi komponen common FET sehingga dapat

menghasilkan daya yang besar meskipun hanya dengan catu sumber 12 volt. Pada

rangkaian ini sebagai kunci utama kecepatan motor dengan pengaturan kecepatan

motor menggunakan system PWM yang telah dibahas pada BAB. III.

Motor DC sebagai actuator robot sehingga robot bisa bergerak maju,

mundur, belok kanan, atau belok kiri. Dalam penulisan codenya adalah sebagai

berikut:

1. Bukalah aplikasi Codevision AVR

2. Pilih tab File > New

67

3. Maka akan muncul tampilan pilihan tipe file, dan pilih project > OK

4. Maka akan tampil pilihan apakah akan menggunakan fasilitas Codewizard

maka klik Yes, karena dengan fasilitas ini akan memudahkan cara seting

port-port mikrokontroler.

5. Maka akan ditampilkanya jendela Codewizard AVR yang kemudian

diseting sesuai dengan kebutuhan yang telah direncanakan fungsi dari

masing-masing kaki IC ATMega8535 pilih chip dengan ATMega8535 dan

clock 12.000.000

6. Tab Port seting port A sebagai input, Port B sebagai input tetapi PortB.2

dan PortB.3 sebagai output, PortD.7 sebagai output

7. LCD gunakanlah pada Port C

8. ADC enable dan Volt Ref pilih AVCC pin

9. Ketikkan header sebagai berikut:

#include <mega8535.h>

#include <delay.h>

10. Ketikkan juga definisi untuk memudahkan

#include <mega8535.h>

#include <delay.h>

// Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

#include <lcd.h>

// Motor

#define moka PORTD.3

#define rpwm OCR1A

#define lpwm OCR1B

#define moki PORTD.6

////////////////perintah motor///////////////////////

void maju()

{ moki=0; moka=0; }

void mundur()

{ moki=1; moka=1; }

68

void bkan()

{ moki=0; moka=1; }

void bkir()

{ moki=1; moka=0; }

void stop()

{ moki=0; moka=0;

lpwm=0; rpwm=0;

}

F. Pengujian 6 (FAN)

Dengan hanya menambahkah definisi fan untuk memudahkan penulisanya

yang berarti cukup PORTB.3 sebagai output fan sudah dapat hidup saat PORTB.3

di beri nilai 1, nilai 1 ini bisa didapatkan dari masukan sensor cahaya lilin atau

api, maka sensor saat bernilai tinggi maka akan akan menhidupkan fan yang

terlebih dahulu di beri transistor 2SC828 dan BD139 untuk menggerakkan relay.

Berikut penambahan program fan:

// Fan

#define fan PORTB.3

#define on 1

#define off 0

G. Pengujian menyeluruh

Robot yang telah jadi lengkap dengan sensor jalur, jarak dan suhu di

program agar dapat bekerja komponen tersebut dengan tujuan robot dapat

mematikan api yang di letakkan pada ujung perjalanan robot. Agar robot dapat

berjalan dengan sempurna maka perlu penambahan program seperti kontrol PID,

dan menu sederhana untuk memudahkan perubahan program pada robot dengan

cepat,

1. Kontrol PID

Tunning kontrol PID ini bertujuan untuk menentukan paramater aksi

kontrol Proportional, Integratif, Derivatif pada robot pelacak garis. Proses ini

dapat dilakukan dengan cara trial and error . Keunggulan cara ini kita gak perlu

mengidentifikasi plant, membuat model matematis plant, menentukan parameter

plant dengan grafis ataupun analitis cukup dengan cara coba-coba memberikan

69

konstanta P-I-D pada formula PID hingga di peroleh hasil yang di inginkan,

dengan mengacu pada karakteristik masing-masing kontrol P-I-D.

Kalau menggunakan kendali PID artinya nantinya bertujuan mengolah

suatu sinyal kesalahan atau error, nilai error tersebut diolah dengan formula PID

untuk dijadikan suatu sinyal kendali atau sinyal kontrol yang akan diteruskan ke

aktuator. Gampangnya perhatikan saja blok diagram umpan balik loop tertutup

pada perancangan kedali PID pada robot pelacak garis berikut ini:

Gambar 4.27. Diagram blok PID

a) SP = Set point, secara simple maksudnya ialah suatu prameter nilai

acuan atau nilai yang kita inginkan.

b) PV = Present Value, kalo yang ini maksudnya ialah nilai bobot

pembacaan sensor saat itu atau variabel terukur yang di umpan

balikan oleh sensor (sinyal feedback dari sensor).

c) Error = nilai kesalahan, pengertiannya ialah Deviasi atau

simpangan antar variabel terukur atau bobot sensor (PV) dengan

nilai acuan (SP)

Dengan kesimpulan Error = SP – PV1

Proses pemberian bobot sensor dapat dilakukan dengan proses pemetaan

(mapping) pembacaan sensor terhadap garis. Kondisi ideal robot terjadi saat

kondisi robot pada PV= 0 (misal kondisi nilai sensor = 11100111, nilai 0

merepresentasikan sensor mengenai garis). Atau SP = 0 ialah kondisi ideal dari

robot pelacak garis. Jika PV tidak sama dengan 0 berarti robot tidak berada pada

kondisi ideal dan artinya ada sinyal kesalahan (error). Pada kondisi error inilah

1 http://fahmizaleeits.wordpress.com

70

formula PID akan menentukan hasil sinyal kendalinya. berikut ini penjelasan

tentang penerapan PID pada robot pelacak garis,

2. Menu utama

Selain program yang telah di bahas sebelumnya perlu dimasukkan juga

program menu utama ini sebagai program sederhana yang dapat di rubah langsung

pada robot dengan menggunakan fasilitas keypad atau empat tombol OK, Cancel,

Up dan Down. Penulisanya sebagai berikut:

setting:

led=on;

lcd_clear();

while(1)

{

satu:

stop();

led=on;

delay_ms(200);

lcd_gotoxy(0,0);lcd_putchar(0b01111110);

lcd_gotoxy(2,0);lcd_putsf("A: set_speed ");

lcd_gotoxy(0,1);lcd_putsf(" B: ambl_data ");

while(down){if(!up){while(up==0){up=1;}goto tujuh;}

if(!ok){while(ok==0){ok=1;}goto set_speed;};}

while(down==0){down=1;}

dua:

stop();

led=on;

delay_ms(200);

lcd_gotoxy(0,0);lcd_putsf(" A: set_speed ");

lcd_gotoxy(0,1);lcd_putchar(0b01111110);

lcd_gotoxy(2,1);lcd_putsf("B: ambl_data ");

while(down){if(!up){goto satu;} if(!ok){while(ok==0){ok=1;}goto

ambil_data;};}

71

while(down==0){down=1;}

tiga:

stop();

led=on;

delay_ms(200);

lcd_gotoxy(0,0);lcd_putchar(0b01111110);

lcd_gotoxy(2,0);lcd_putsf("C: cek_sensor ");

lcd_gotoxy(0,1);lcd_putsf(" D: lihat_ADC ");

while(down){if(!up){goto dua;} if(!ok){while (ok==0){ok=1;};goto lihat;};}

while(down==0){down=1;}

empat:

stop();

led=on;

delay_ms(200);

lcd_gotoxy(0,0);lcd_putsf(" C: cek_sensor ");

lcd_gotoxy(0,1);lcd_putchar(0b01111110);

lcd_gotoxy(2,1);lcd_putsf("D: lihat_ADC ");

while(down){if(!up){goto tiga;} if(!ok){while(ok==0){ok=1;}; goto

data_adc;};}

while(down==0){down=1;}

lima:

stop();

led=on;

delay_ms(200);

lcd_gotoxy(0,0);lcd_putchar(0b01111110);

lcd_gotoxy(2,0);lcd_putsf("E: SET_PID ");

lcd_gotoxy(0,1);lcd_putsf(" F: Cek_Motor ");

while(down){if(!up){goto empat;} if(!ok){while (ok==0){ok=1;}; goto

set_PID;};}

while(down==0){down=1;}

enam:

stop();

72

led=on;

delay_ms(200);

lcd_gotoxy(0,0);lcd_putsf(" E: SET_PID ");

lcd_gotoxy(0,1);lcd_putchar(0b01111110);

lcd_gotoxy(2,1);lcd_putsf("F: Cek_Motor ");

while(down){if(!up){goto lima;} if(!ok){while (ok==0){ok=1;}; goto cek;;};}

while(down==0){down=1;}

tujuh:

stop();

lcd_clear();

led=on;

delay_ms(200);

lcd_gotoxy(0,0);lcd_putchar(0b01111110);

lcd_gotoxy(2,0);lcd_putsf("H: start ");

while(down){if(!up){goto enam;} if(!ok){while (ok==0){ok=1;}; goto

jalan;};}

while(down==0){down=1;}

}

///////////////////Pengaturan kecepatan/////////////////////////

set_speed:

led=on;

lcd_clear();

delay_ms(200);

lcd_gotoxy(0,0);

lcd_putsf(" MAX MIN TS ");

lcd_gotoxy(1,0);lcd_putchar(0b01111110);

while(1)

{

if(!up){MAXSpeed++;delay_ms(100);}

if(!down){MAXSpeed--;delay_ms(100);}

if(!ok){goto speed_min;}

lcd_gotoxy(2,1);

73

view(MAXSpeed);

lcd_gotoxy(7,1);

view(MINSpeed);

lcd_gotoxy(12,1);

view(Topspeed);

}

speed_min:

lcd_clear();

delay_ms(200);

lcd_gotoxy(0,0);

lcd_putsf(" MAX MIN TS ");

lcd_gotoxy(6,0);lcd_putchar(0b01111110);

while(1)

{

if(!up){MINSpeed++;delay_ms(100);}

if(!down){MINSpeed--;delay_ms(100);}

if(!ok){goto speeda;}

if(!cancel){goto set_speed;}

lcd_gotoxy(2,1);

view(MAXSpeed);

lcd_gotoxy(7,1);

view(MINSpeed);

lcd_gotoxy(12,1);

view(Topspeed);

}

speeda:

lcd_clear();

delay_ms(200);

lcd_gotoxy(0,0);

lcd_putsf(" MAX MIN TS ");

lcd_gotoxy(11,0);lcd_putchar(0b01111110);

while(1)

74

{

if(!up){Topspeed++;delay_ms(100);}

if(!down){Topspeed--;delay_ms(100);}

if(!ok){lcd_clear(); goto satu;}

if(!cancel){goto speed_min;}

lcd_gotoxy(2,1);

view(MAXSpeed);

lcd_gotoxy(7,1);

view(MINSpeed);

lcd_gotoxy(12,1);

view(Topspeed);

}

////////////////// Perintah pengambilan data////////////////////////////

ambil_data:

led=on;

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf(" ambil data adc ");

delay_ms(1000);

cekback();

lihat:

led=on;

lcd_clear();

delay_ms(200);

lcd_gotoxy(0,0);

lcd_putsf("---cek sensor---");

while(1)

{

displaySensorBit();

if(Skib==1){lcd_gotoxy(0,0);lcd_putchar(0xff);}

else {lcd_gotoxy(0,0);lcd_putsf("_");}

//if(Skid==1){lcd_gotoxy(1,0);lcd_putchar(0xff);}

75

//else {lcd_gotoxy(1,0);lcd_putsf("_");}

//if(Skab==1){lcd_gotoxy(15,0);lcd_putchar(0xff);}

//else {lcd_gotoxy(15,0);lcd_putsf("_");}

//if(Skad==1){lcd_gotoxy(14,0);lcd_putchar(0xff);}

//else {lcd_gotoxy(14,0);lcd_putsf("_");}

if(!cancel){lcd_clear();goto tiga;}

if(!ok){goto jalan;}

}

///////////////////////Perintah membaca data ADC////////////////////////

data_adc:

led=on;

lcd_clear();

delay_ms(200);

while(1)

{

baca();

sprintf(Msg1,"%3d %3d %3d %3d",s[0],s[1],s[2],s[3]);

sprintf(Msg2,"%3d %3d %3d %3d",s[4],s[5],s[6],s[7]);

lcd_gotoxy(0,0);lcd_puts(Msg1);

lcd_gotoxy(0,1);lcd_puts(Msg2);

if(!ok){lcd_clear();goto empat;}

}

//////////////// Perintah seting PID/////////////////////////////

set_PID:

led=on;

delay_ms(200);

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf(" KP KD ");

lcd_gotoxy(1,0);lcd_putchar(0b01111110);

while(1)

{

76

if(!up){VarKp++;delay_ms(100);}

if(!down){VarKp--;delay_ms(100);}

if(!ok){goto Kd;}

lcd_gotoxy(2,1);

view(VarKp);

lcd_gotoxy(7,1);

view(VarKd);

}

Kd:

lcd_clear();

delay_ms(200);

lcd_gotoxy(0,0);

lcd_putsf(" KP KD ");

lcd_gotoxy(6,0);lcd_putchar(0b01111110);

while(1)

{

if(!up){VarKd++;delay_ms(100);}

if(!down){VarKd--;delay_ms(100);}

if(!ok){goto lima;}

if(!cancel){goto set_PID;}

lcd_gotoxy(2,1);

view(VarKp);

lcd_gotoxy(7,1);

view(VarKd);

}

////////// Perintah pengecekan motor//////////////

cek:

led=off;

lcd_clear();

lcd_gotoxy(0,0);lcd_putsf("-__Coba motor__-");

maju();lpwm=MAXSpeed;rpwm=MAXSpeed;

77

lcd_gotoxy(0,1);lcd_putsf("-__motor maju__-");

delay_ms(700);

mundur();lpwm=MAXSpeed;rpwm=MAXSpeed;

lcd_gotoxy(0,1);lcd_putsf("-_motor mundur_-");

delay_ms(700);

bkan();lpwm=MAXSpeed;rpwm=MAXSpeed;

lcd_gotoxy(0,1);lcd_putsf("-__motor Bkan__-");

delay_ms(700);

bkir();lpwm=MAXSpeed;rpwm=MAXSpeed;

lcd_gotoxy(0,1);lcd_putsf("-__motor Bkir__-");

delay_ms(700);

lcd_clear();

stop();

delay_ms(100);

goto enam;