bab iv hasil dan pembahasan 4.1 hasil -...
Post on 22-Feb-2018
215 Views
Preview:
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;
top related