DESAIN PROTEUS & PROGRAM Code Vision AVR ROBOT LINE FOLLOWER DIGITAL RA04 Posted on 3/20/2013 06:39:00 PM
by Mada Sanjaya Ws
Silahkan download file pdf berikut: Robot autonomous line follower bolabot Untuk yang membutuhkan simulasi Robot Line Follower Digital, silahkan download File berikut: 1. Desain Proteus dan Code Vision AVR Line Follower ATMega 16 2. Desain Proteus dan Code Vision AVR Line Follower ATMega 8 Line follower Robot (Robot Pengikut Garis) adalah robot yang dapat berjalan mengikuti sebuah lintasan, ada yang menyebutnya dengan Line Tracker, Line Tracer Robot dan sebagainya. Garis yang dimaksud adalah garis berwarna hitam diatas permukaan berwarna putih atau sebaliknya, ada juga lintasan dengan warna lain dengan permukaan yang kontras dengan warna garisnya. Ada juga garis yang tak terlihat yang digunakan sebagai lintasan robot, misalnya medan magnet.
Gambar 1. Ilustrasi robot line follower dengan posisi sensor di atas permukaan putih
Seperti layaknya manusia, bagaimana manusia dapat berjalan mengikuti jalan yang ada tanpa menabrak dan sebagainya, tentunya karena manusia memiliki “mata” sebagai penginderanya. Begitu juga robot line follower ini, dia memiliki sensor garis yang berfungsi seperti “mata” pada manusia. Sensor garis ini mendeteksi adanya garis atau tidak pada permukaan lintasan robot tersebut, dan informasi yang diterima sensor garis kemudian diteruskan ke prosesor untuk diolah sedemikian rupa dan akhirnya hasil informasi hasil olahannya akan diteruskan ke penggerak atau motor agar motor dapat menyesuaikan gerak tubuh robot sesuai garis yang dideteksinya.
Gambar 2. Diagram blok robot line follower
Untuk merangkai rangkaian elektroniknya kita perlu tahu dulu diagram blok sistem yang akan kita bangun, dengan demikian akan menjadi mudah mengerjakannya. Blok sistem yang akan kita bagun paling tidak tampak seperti gambar berikut. Sistemnya terdiri dari sensor garis, rangkaian komparator, sistem minimum AT Mega dan motor driver.
ROBOT
LINE
FOLLOWER
DIGITAL
MIKROKONTROLER
ATMEGA
16
Desain berikut menggunakan mikrokontroler ATmega 16, LCD 2x 16, 2 buah sensor phototransistor Skema Lengkap Line follower Digital IC Komparator Pada skema lengkap robot line follower didesain dengan posisi sensor di atas permukaan putih. Dua buah sistem sensor di pasang pada pin B.0 dan B.1, sedangkan sistem actuator motor DC dipasang pada Port D.0 dan D.1 untuk motor kiri, D.2 dan D.3 untuk motor kanan. Prinsip kerja robot line follower berikut adalah saat sistem sensor berada
di
atas
permukaan
putih,
akan
ada
pantulan
cahaya
dari
LED
yang
akan
mengenai sensor cahaya LDR sehingga resistansi sensor LDR berkurang sehingga arus bergerak melalui LDR. Kondisi tersebut menyebabkan arus output sensor menuju IC komparator LM 393 menjadi minimum, oleh IC LM 393, arus di non-inverting sehingga output menuju pin mikrokontroler menjadi LOW (0). Sebaliknya, saat sistem sensor berada di atas garis hitam, tidak akan ada pantulan cahaya dari LED yang akan mengenai sensor cahaya LDR sehingga resistansi sensor LDR sangat besar sehingga arus tidak akan melalui LDR. Kondisi tersebut menyebabkan arus output sensor menuju IC komparator LM 393 menjadi maksimum, oleh IC LM 393, arus di non-inverting sehingga output menuju pin mikrokontroler menjadi HIGH (1). Oleh mikrokontroler data
logika
bergerak
pin
jika
tersebut
kedua
pin
kemudian motor
diolah
tersebut
untuk
memiliki
mengerakan beda
motor,
polaritas.
motor
mengenai logika gerak robot dapat dilihat pada Tabel 1 dan 2.
Tabel 1. Kondisi Gerak Motor dan pengaruh Sensor Kondisi
B.0 = 0
B.0 =1
B.1 = 0
Maju
Belok Kiri
B.1 = 1
Belok Kanan
Mati
Tabel 2. Kondisi Gerak Motor dan Kondisi Logika Tiap Pin Motor Kondisi
akan
Selengkapnya
D.0
D.1
D.2
D.3
Maju
0
1
0
1
Belok Kiri
1
0
0
1
Belok Kanan
0
1
1
0
Mati
1
1
1
1
Gambar 3. Skema lengkap robot line follower menggunakan AT Mega 16
PROGRAM ROBOT LINE FOLLOWER DIGITAL ATMEGA 16 MENGGUNAKAN CODE VISION AVR
/***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Professional Automatic Program Generator © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Robot Line follower Version : I Date : 11/8/2012 Author : Mada Sanjaya WS, Ph.D Company : Bolabot Techno Robotic School Comments: www. bolabot. com Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 12.000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/
#include <mega16.h> # include <delay.h> //tambahan program untuk membuat waktu tunda // Alphanumeric LCD Module functions #include
// Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00; DDRA=0x00; // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x30; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x00; TCNT0=0x00; OCR0=0x00; // // // // //
Timer/Counter 1 initialization Clock source: System Clock Clock value: 11.719 kHz Mode: Fast PWM top=0x00FF OC1A output: Non-Inv.
// OC1B output: Non-Inv. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0xA1; TCCR1B=0x0D; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // USART initialization // USART disabled UCSRB=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC disabled ADCSRA=0x00;
// SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00; // // // // // // // // // // //
Alphanumeric LCD initialization Connections specified in the Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: RS - PORTC Bit 0 RD - PORTC Bit 1 EN - PORTC Bit 2 D4 - PORTC Bit 4 D5 - PORTC Bit 5 D6 - PORTC Bit 6 D7 - PORTC Bit 7 Characters/line: 16
lcd_init(16); // Tambahan kode mendefinisikan input output DDRB.0=0; // input sensor kiri DDRB.1=0; // input sensor kanan DDRD.0=1; // output motor kiri DDRD.1=1; // output motor kiri DDRD.2=1; // output motor kanan DDRD.3=1; // output motor kanan // Tambahan kode mendefinisikan kecepatan motor PWM OCR1A=200;// kecepatan dapat diubah sesuai kebutuhan OCR1B=200;// kecepatan dapat diubah sesuai kebutuhan // Tambahan kode mendefinisikan kondisi awal PORTB.0=1; //sensor kiri PORTB.1=1; //sensor kanan PORTD.0=0; PORTD.1=0; PORTD.2=0; PORTD.3=0; while (1) { if (PINB.0==1 & PINB.1==0) // Tambahan kode sensor kiri hitam, kanan putih, maka belok kiri { PORTD.0=1; PORTD.1=0; PORTD.2=0; PORTD.3=1; lcd_clear ();
lcd_gotoxy(0,0); lcd_putsf("B0=1 B1=0");
lcd_gotoxy(0,1); lcd_putsf("BELOK KIRI"); delay_ms(100); } else if (PINB.0==0 & PINB.1==1) // Tambahan kode sensor kiri putih, kanan hitam, maka belok kanan { PORTD.0=0; PORTD.1=1; PORTD.2=1; PORTD.3=0; lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("B0=0 B1=1"); lcd_gotoxy(0,1); lcd_putsf("BELOK KANAN"); delay_ms(100); } else if (PINB.0==1 & PINB.1==1) // Tambahan kode sensor kiri hitam, kanan hitam, maka mati { PORTD.0=0; PORTD.1=0; PORTD.2=0; PORTD.3=0; lcd_clear (); lcd_gotoxy(0,0); lcd_putsf("B0=1 B1=1"); lcd_gotoxy(0,1); lcd_putsf("MATI"); delay_ms(100); } else // Tambahan kode sensor kiri putih, kanan putih, maka bergerak maju { PORTD.0=0; PORTD.1=1;
PORTD.2=0; PORTD.3=1; lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("B0=0 B1=0"); lcd_gotoxy(0,1); lcd_putsf("MAJU"); delay_ms(100); } } }
ROBOT LINE FOLLOWER DIGITAL SEDERHANA DENGAN ATMEGA 8
Jika desain diatas dibuat menggunakan mikrokontroler AT mega 8, maka berikut ini merupakan desain robot line follower digital menggunakan mikrokontroler ATmega 8, dan 2 buah sensor phototransistor yang lebih sederhana.
Gambar 4. Skema lengkap robot line follower menggunakan AT Mega 8
PROGRAM ROBOT LINE FOLLOWER DIGITAL ATMEGA 8 MENGGUNAKAN CODE VISION AVR
/***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Professional Automatic Program Generator © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com
Project : Bolabot Line Follower Digital AT Mega 8 Version : I Date : 3/3/2013 Author : Mada Sanjaya WS, Ph.D Company : Bolabot Techno Robotic Institute Comments: Semangat!!
Chip type : ATmega8 Program type : Application AVR Core Clock frequency: 12.000000 MHz Memory model : Small External RAM size :0 Data Stack size : 256
*****************************************************/
#include <mega8.h>
// Declare your global variables here
void main(void) { // Declare your local variables here
// Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=In // State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=T PORTB=0x00; DDRB=0x06;
// Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00;
// Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00;
// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00;
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 11.719 kHz // Mode: Fast PWM top=0x00FF // OC1A output: Non-Inv. // OC1B output: Non-Inv. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off TCCR1A=0xA1; TCCR1B=0x0D; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00;
// External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;
// USART initialization // USART disabled UCSRB=0x00;
// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00;
// ADC initialization // ADC disabled ADCSRA=0x00;
// SPI initialization // SPI disabled SPCR=0x00;
// TWI initialization // TWI disabled TWCR=0x00; DDRD.5=1; // ke motor DDRD.6=1; // ke motor DDRD.7=1; // ke motor DDRB.0=1; // ke motor
DDRC.4=0; DDRC.3=0;
// input sensor // input sensor
PORTD.5=1; PORTD.6=1; PORTD.7=1; PORTB.0=1;
OCR1A=150; // kecepatan motor dapat diatur sesuai kebutuhan OCR1B=150; // kecepatan motor dapat diatur sesuai kebutuhan while (1) { if (PINC.3==1 & PINC.4==0 ) { PORTD.5=1; PORTD.6=0; PORTD.7=0; PORTB.0=1; } else if (PINC.3==0 & PINC.4==1) { PORTD.5=0; PORTD.6=1; PORTD.7=1; PORTB.0=0; } else { PORTD.5=1; PORTD.6=0; PORTD.7=1; PORTB.0=0; }
} }
Berikut adalah video robot line follower digital sederhana karya Bolabot menggunakan ATMega 8 dan 2 sensor cahaya Phototransistor
Profesor
Membuat Robot Line Follower Dengan AVR ATMega8535 Tuesday, October 2nd, 2012 - Microcontroller
Robot line follower atau robot line tracert merupakan robot pengikut garis yang dapat bergerak atau berjalan mengikuti suatu lintasan hitam diatas background putih atau sebaliknya. Untuk membuat rangkaian robot line follower dapat
menggunakanmicrocontroller.
salah
satu
microcontroller
yang
dapat
digunakan
untuk
membuat rangkaian robot line follower adalah AVR ATMega8535. “Robot Line Follower” merupakan robot yang di desain untuk mengikuti jejak (bisa garis bisa garis putus2 atau bahkan titik titik). Membuat Robot Line Follower menggunakan prosesor mikrokontroler AVR ATMega 8535 sangat mungkin dan sangat bisa diandalkan. Karena dalam desain suatu Robot Line Follower perlu kita pikirkan bahwa jejak yang akan di ikuti atau langkah2 yang akan dilakukan Robot Line Follower terhadap track atau lintasan yang di lewati Robot Line Follower tersebut. Dan dari kebutuhan Robot Line Follower tersebut feature2 yang dimiliki oleh mikrokontroler AVR ATMega 8535 sangat mencukupi dan memenuhi kebutuhan dari Robot Line Follower. Blok Diagram Robot Line Follower Dengan AVR ATMega8535
Fungsi Bagian Blok Diagram Robot Line Follower Dengan AVR ATMega 8535
Sensor pada Robot Line Follower dapat menggunakan foto dioda atau foto transistor, bagian ini berfungsi mendeteksi keberadaan lintasan track.
Keypad, Bagian ini berupa tombol yang berfungsi untuk start/stop Robot Line Follower dan sebagai pemilih konfigurasi seting Robot Line Follower terhadap medan yang di akan di lalui.
Display, merupakan bagian yang berfungsi untuk menampilkan pilihan seting dan hasil seting (cukup itu saja yg perlu di tampilan) bagian ini bisa menggunakan LCD atau penampil 7 segmen.
Driver Motor, bagian ini berupa rangkaian H Bridge driver motor DC. Bagian ini yang mengendalikan putaran motor secara langsung. Bagian ini merupakan interface anatara mikrokontroler AVR ATMega dengan motor DC. Saya suka menggunakan IC keluarga L298 untuk driver motor.
Mikrokontroler AVR ATMega8535, bagian ini merupakan bagian yang menentukan kemana robot akan di bawa berdasarkan data dari sensor. Bagian ini yang mengatur langkah2 Robot Line Follower dalam menaklukan lintasan.
Blok diagram rangkaian robot line follower diatas merupakan gambaran umum dari pembuatan robot line follower yang dapat dipilih program kerja yang akan dijalankan olehrobot line follower tersebut. Dengan keypad tersebut dapat dimasukan seting kecepatan, program jalannya robot dan laiannya. Share Membuat Robot Line Follower Dengan AVR ATMega8535
Membuat Robot Line Follower dengan Mikrokontroler Posted Mei 1, 2010 by Fahmizal in Robotika. Tagged: ATmega 8535 pada line follower, digital line follower, line follower berbasis mikrokontroler, line follower dengan ATmega 8535, line follower dengan mikrokontroler Atmega 8535, line follower digital, Membuat Robot Line Follower dengan Mikrokontroler, membuat robot line follower mikro, mendesain robot line follower mikro, merancang robot line follower mikro, pemrograman line follower, rangkaian line follower mikrokontroler, rangkaian robot line follower dengan mikrokontroler. 82 Komentar
Membuat Robot Line Follower dengan Mikrokontroler Jika beberapa artikel yang lalu q bercerita tentang Robot Line Follower Analog, maka kali ini pengen bercerita tentang line follower digital,… yups kali ini q pengen memberikan artikel tentang cara membuat robot line follower dengan mikrokontroler… semoga bermanfaat…ya…ok :D Nah jika pada artikel robot line follower analog, kita gak perlu mikirin yang namanya software… tapi kali ini berbeda… temen-temen semua dituntut untuk dapat menggunakan software dalam pengoperasian robot… tapi bagi yang belum paham software gak perlu khawatir,… tenang ja,.. dunia lum kiamat… kalian masih dapat mempelajarinya hehehee … :) Hmmm software apa ja sich yang digunakan pada robot line follower dengan mikrokontroler? Yang pertama ialah software pemrograman bahasanya,…. ada banyak bahasa yang dapat digunakan diantaranya assembly (angel tenan….) pascal( rodok angel…) C (rodok gampang…)BASIC (gampang buanget…).
Ada banyak bahasa yang apat digunakan, mulai dari bahasa yang susah dan mudah, nach dengan adanya bahasa yang mudah lebih baik kita pelajari dulu yang mudah-mudah (kayak ngerjain soal ujian)…, seperti bahasa BASIC dan C. Kalian dapat mempelajari bahasa basic dan c dari buku yang beredar…. banyak banget dipasaran,… oiya di blog ini juga terdapat penjelasan tentang cara mempelajari mikrokontroler Atmega8535, nach disitu q udah berusaha menge-share semua tentang bahasa basic dari awal….hingga tak berakhir… Yang kedua ialah software downloader mikro, maksudnya ialah suatu perangkat lunak yang berfungsi memasukkan program ke dalam mikrokontroler tersebut…. nach Cuma dua software ini untuk merancang robot line follower mikrokontroler… guampangkan…. Nach perhatikan blok sistem dari robot line follower mikrokontroler dibawah ini:
Dengan mengacu kepada blok diagram sistem, terdiri dari bagian masukan, bagian kendali, bagian keluaran dan bagian catu daya (baterai). Pada bagian masukan berupa delapan buah sensor photodiode dengan untai pengkondisi sinyal berupa komparator (IC LM324) dan tombolkeypad yang berfungsi untuk memasukan data pengendali robot, contoh dengan kendali PID,Hybrid PID-Fuzzy dan lain sebagainya. Pada bagian keluaran berupa penampil LCD 2*16 dandriver motor (IC L293D) sebagai aktuator (penggerak) robot. Gambaran Umum Sistem Cara kerja dari sistem robot line follower secara umumialah dimulai dari pembacaan lintasan atau garis oleh sensor photodiode berserta LED superbright yang mana intensitas pantulan sinar LEDsuperbright akan berbeda jika terkena bidang pantul yang gelap dengan bidang pantul yang lebih terang, dari perbedaan inilah dimanfaatkan sebagai pendeteksi lintasan atau garis dan selanjutnya diteruskan pada rangkaian untai pengkondisi sinyal (komparator). Rangkaian komparator (IC LM324) berfungsi untuk membandingkan nilai yang dibaca sensor photodiode dengan nilai referensi komparator sehingga perbedaan terlihat sangat kontras saat sensor photodiodemendeteksi objek pantul gelap maupun terang. Hasil keluaran komparator kemudian diteruskan dan diproses oleh rangkaian pengendali utama yakni IC mikrokontroler Atmega16. Pada bagian kendali utama inilah semua logika pembacaan sensor yang telah dikondisikan oleh komparator diproses. Bagian mikrokontroler ini terdiri dari dua masukan dan dua keluaran. Pada bagian masukan berupa sensor dengan untai komparator dan keypad kendali yang berfungsi untuk mengatur algoritma kendali yang akan digunakan pada robot line follower. Pada bagian keluaran berupadisplay (penampil) dengan menggunakan LCD dan PWM mikrokontroler Atmega16 yang diteruskan ke driver motor (IC l293D) untuk mengendalikan motor kiri dan kanan dari robot line follower. Untuk skematic rangkaiannya dapat didownload disini Untuk contoh program dalam bentuk bahasa BASIC dengan editor BASCOM-AVR dapat didownload disini dan bahasa C dengan editor CodeVision-AVR disana. Semoga bermanfat :) Nach ni dia galery foto robot LINE FOLLOWER ku…. ( tapi ini udah tinggal kenangan, robotnya dah dipreteli ma anak2 mikro club dte UGM :D )
nach ni dia kalo pengen liat video robotku klik disini…. dan disana…
sistem pergerakan robot ROBOT LINE FOLLOWER dengan Kendali PID Posted Mei 8, 2010 by Fahmizal in PID kontrol, Robotika. Tagged: Kendali PID pada line follower, kendali pid robot pengikut garis, kontrol line tracer pid, kontrol PID pada line follower, line follower based PID controller, line follower berbasis kendali PID, line follower berbasis kontroler PID, line follower berbasis PID, line follower dengan pid, line follower with pid control, line tracer pid, membuat robot line follower mikro, PID control based line follower, PID control line follower, PID controller implementation on line follower, PID implementation on line follower, pid programming for line follower, PID robot Pengikut Garis, Robot line follower dengan kendali PID, robot pengikut garis dengan PID,setting pid line follower, tutorial line follower pid. 82 Komentar
57 Votes ROBOT LINE FOLLOWER dengan Kendali PID Bergerak smooth-nya robot sangat tergantung dari aksi kontrol robot tersebut, jika hanya menngunakan kontrol onofff (diskontinyu) akan sangat berbeda dengan aksi kontrol kontinyuPID. Kontrol PID saat ini banyak digunakan dalam aksi-aksi di dunia industri dan juga kontrol robot ^_^ Jika kita berbicara kontrol robot line follower dengan PID maka bukanlah kontrol PID yang sebenarnya… sebab (kata dosenku) pada robot line follower elemen ukur (sensor) tidak terdapat pada plant (motor penggerak) dari robot, yang serharusnya ialah sensor terdapat di plant(motor penggerak), dengan contoh tachometer sebagai sensor pada motor, encoder atau yang laennya yang terletak pada plant. sedangkan pada robot line follower sensor berupa pendeteksi garis (tidak terletak pada plant) dan dari hasil kondisi garis tersebut barulah dikontrol ke motor (plant), namun walaupun begitu kontrol PID masih dapat diterapkan untuk mengendalikan robot line follower. Blok aksi kontrol PID:
Formula matematis dari PID:
Dari formula tersebut dapat dirumuskan menjadi pendigitalization PID dengan berbagai metode, kalo di kul dengan cara transformasi Z, ZOH, bilinier transformartion, Eulers method.. wah susah pokoknya…. Sehingga diperoleh bentuk digital diskritnya menjadi persamaan dibawah ini…. Bentuk kontroler PID diskrit:
menjadi….
Nach…jika
kita
terapkan
dalam
bahasa
Dimana; Ts ialah time sampling, error ialah nilai kesalahan dan last_error ialah nilai errorsebelumnya. Berikut ilustrasi penerapan kontrol PID pada robot line follower:
dari blok iliustrasi tersebut dapat q jelasin sebagai berikut: S1,S2…,S8 merupakan sensor dengan pemberian bobot Present Value (PV) PV=0, PV=-1, PV= 1 dst….
pemrograman
Deviasi/simpangan antar variabel terukur (PV) dengan nilai acuan (SP) disebut error (galat)
Nach nilai error dari pembacaan sensor ini yang dijadikan aksi perhitungan kendali PID, lalu nilai perhitungan PID tersebut dijumlahkan dengan setpoint PWM untuk dijadikan sebagai nilai aktual PWM motor dari robot line follower, berikut formula perhitungan nilai PWM kiri dan kanan dari robotku:
Untuk dapat lebih mudah memahami algoritma kendali PID robot line follower ku download diagram alir programnya disini… Untuk cara tunning kontrol PID dan sample coding (BASCOM AVR dan CODEVISION AVR) pada robot line follower ku dapat di lihat disini… dan pengen lihat video robotku disini….dan disana… Dan berikut aplikasi kontroler PID pada Robot-Wall Follower ato yg lebih dikenal dengan robot telusur dinding: Semoga bermanfaat :D =============================================================== bacaan terkait di blog ini: 1. tuning-kontrol-pid-pada-robot-line-follower klik disini 2. robot line follower dengan multiplekser-ADC klik disini
Pengaturan Kecepatan Motor Dc Dengan Mikrokontroler [open-loop] Posted Juli 27, 2010 by Fahmizal in Kuliah Kontrol, Mikrokontroler. Tagged: aplikasi pwm Atmega 8535, kendali motor dc, kontrol kecepatan motor dc dengan bascom, mengatur duty cycle, Pengaturan Kecepatan Motor Dc, Pengaturan Kecepatan Motor Dc Berbasis Atmega8535, Pengaturan Kecepatan Motor Dc Dengan Mikrokontroler, PWM (Pulse Width Modulation) adalah, PWM Atmega8535, PWM Bascom AVR, PWM berbasis mikrokontorler, PWM pada motor dc. 87 Komentar
Penggunaan motor DC dewasa ini sudah sangatlah umum, salah satu kelebihan motor DC adalah relatif gampang didapat dan mudah diatur kecepatan putarnya. Secara umum pengaturan kecepatan motor DC adalah dengan menggunakan cara analog. Pada artikel kali ini akan dibahas contoh cara mengatur kecepatan motor DC dengan menggunakan mikrokontroller. Mikrokontroler yang digunakan adalah Tipe AVR dari Atmel seperti mikrokontroler Atmega 8535, 16, 32. Informasi kecepatan motor akan ditampilkan pada modul LCD HD4480. Sedangkan sebagai driver motor menggunakan modul driver motor IC L298. Cara pengaturan kecepatan yang digunakan adalah dengan menggunakan teknik PWM (Pulse Width Modulation), salah satu teknik untuk mengatur kecepatan motor DC yang umum digunakan. Dengan menggunakan PWM kita dapat mengatur kecepatan yang diinginkan dengan mudah. Teknik PWM untuk pengaturan kecepatan motor adalah, pengaturan kecepatan motor dengan cara merubah-rubah besarnya duty cycle pulsa. Pulsa yang yang berubah ubah duty cycle-nya inilah yang menentukan kecepatan motor. Besarnya amplitudo dan frekuensi pulsa adalah tetap, sedangkan besarnya duty cycle berubah-ubah sesuai dengan kecepatan yang diinginkan, semakin besar duty cylce maka semakin cepat pula kecepatan motor, dan sebaliknya semakin kecilduty cycle maka semakin pelan pula kecepatan motor. Sebagai contoh bentuk pulsa yang dikirimkan adalah seperti pada gambar 1, pulsa kotak dengan duty cycle pulsa 50%. Sedangkan sebagai contoh bentuk pulsa PWM adalah seperti pada gambar 2.
Gambar 1
Gambar 2 Seperti pada gambar 1, semakin besar duty cycle pulsa kotak, maka semakin lama pula posisi logika high. Jika motor diatur agar berjalan ketika diberi logika high, maka jika memberi pulsa seperti pada gambar 1 diatas, maka motor akan berada pada kondisi “nyala-mati-nyala-mati” sesuai dengan bentuk pulsa tersesebut. Semakin lama motor berada pada kondisi “nyala” maka semakin cepat pula kecepatan motor tersebut. Motor akan berputar dengan kecepatan maksimum jika mendapat pulsa dengan duty cycle 100%. Dengan kata lain motor mendapat logika high terus menerus. Dengan mengatur besarnya duty cycle pulsa kotak yang dikirimkan, kita dapat mengatur banyaknya logika high yang diberikan pada motor, dengan kata lain mengatur lamanya waktu motor untuk berputar dalam satu periode pulsa. Jika lamanya waktu motor untuk berputar dalam satu periode pulsa ini berubah maka kecepatan purtaran motor juga akan berubah, sesuai denganduty cycle atau waktu motor untuk berputar dalam satu periode pulsa. Sumber :http://delta-electronic.com/article/wp-content/uploads/2008/09/an0082.pdf =============================================================== PENGATURAN KECEPATAN MOTOR DC Berbasis Atmega8535 Skema dengan proteus:
Hasil simulasi dengan proteus:
Program Pengaturan Kecepatan Motor DC dengan Bascom AVR $regfile = “m8535.dat” ‘menggunakan Atmega8535 sebagai preprosesor $crystal = 12000000 ‘menggunakan crystal clock 12 MHz $eeprom ‘menggunakan fasilitas eeprom Atmega8535 ‘—————————inisialisasi lcd———————————— Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0 Config Lcd = 16 * 2 : Cursor Off ‘—————————inisialisasi pwm———————————–
Config Timer1 = Pwm , Pwm = 10 , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up dengan settingan fast pwm 10 bit ‘—————————inisialisasi port——————————– ‘inisialisasi tombol Config Portb = Input ‘—————————pull up internal——————————– Portb.0 = 1 Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Config Portd = Output ‘alias logika motor M1a Alias Portd.0 M1b Alias Portd.1 M2a Alias Portd.2 M2b Alias Portd.3 ‘——————————alias——————————————– ‘alias tombol Sw_ok Alias Pinb.3 Sw_cancel Alias Pinb.2 Sw_down Alias Pinb.1 Sw_up Alias Pinb.0 ‘——————————————————————————Dim Pwm As Integer Dim Pwm_eprom As Eram Integer Home Lcd “Fahmizal_dte2006” Lowerline Lcd “Cek fungsi PWM” Wait 1 Do Pwm = Pwm_eprom If Sw_up = 0 Then : Incr Pwm : Waitms 10 End If If Sw_down = 0 Then : Decr Pwm : Waitms 10 End If If Pwm > 1023 Then : Pwm = 0 : Waitms 10 End If If Pwm < 0 Then : Pwm = 1023 : Waitms 10 End If Pwm_eprom = Pwm Cls Home Lcd “tes uji pwm” Lowerline Reset M1a Reset M2a Set M1b Set M2b Pwm1a = Pwm Pwm1b = Pwm Lcd “nilai pwm:” ; Pwm1a : Waitms 100 Loop End nach berikut hasil video pengaturan sinyal PWM nya ^_^ =============================================================== bacaan terkait di blog ini: 1. mudah-belajar-mikro-dengan-simulasi-program-proteus klik disini 2. aplikasi-pwm-mikrokontroler-atmega8535 klik disini ===============================================================
‘pwm
TUNING KONTROLER PID Pada Robot Line Follower Posted Agustus 24, 2010 by Fahmizal in PID kontrol, Robotika. Tagged: Controller PID on Line Follower, line follower based PID controller, line follower berbasis kendali PID, line follower berbasis kontroler PID, line follower berbasis PID,nilai pid line follower, parameter PID, parameter PID controller, PID control based line follower, PID controller implementation on line follower, PID Controller in Robot, PID implementation on line follower, pid pada line follower, pid programming for line follower, program PID pada line follower, setting pid line follower, TUNING KONTROL PID Pada Robot Line Follower, tuning PID controller, tunning nilai PID. 83 Komentar
41 Votes TUNING KONTROLER PID LINE FOLLOWER Tunning kontrol PID ini bertujuan untuk menentukan paramater aksi kontrol Proportional,Integratif, Derivatif pada robot line follower. 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 konstanta P-I-D pada formula PID hingga di peroleh hasil yang di inginkan, dengan mengacu pada karakteristik masing-masing kontrol P-I-D. Nach kalo kita menggunakan kendali PID artinya kita 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 line follower berikut ini:
Dari blok diagram diatas dapat q jelasin sebagai berikut 1. SP = Set point, secara simple maksudnya ialah suatu prameter nilai acuan atau nilai yang kita inginkan. 2. PV = Present Value, kalo yang ini maksudnya ialah nilai bobot pembacaan sensor saat ituatau variabel terukur yang di umpan balikan oleh senso r (sinyal feedback dari sensor). 3. Error = nilai kesalahan, nach kalo yang ini pengertiannya ialah Deviasi atau simpangan antar variabel terukur atau bobot sensor (PV) dengan nilai acuan (SP)
Setelah memahami alur pengendalian PID nach berikut ilustrasi pemberian bobot sensor (nilai kesalahan pembacaan sensor) pada robot line follower:
Dari blok iliustrasi tersebut dapat q jelasin sebagai berikut: Proses pemberian bobot sensor dapat dilakukan dengan proses (mapping) pembacaansensor terhadap garis, berikut salah satu sample proses mapping sensor: 11111110 (PV=-7) 11111000 (PV=-6) 11111100 (PV=-6) 11111101 (PV=-5) 11110001 (PV=-4) 11111001 (PV=-4) 11111011 (PV=-3) 11100011 (PV=-2) 11110011 (PV=-2) 11110111 (PV=-1) 11100111 (PV=0) 11101111 (PV=1) 11000111 (PV=2) 11001111 (PV=2) 11011111 (PV=3)
pemetaan
10001111 (PV=4) 10011111 (PV=4) 10111111 (PV=5) 00011111 (PV=6) 00111111 (PV=6) 01111111 (PV=7) 11111111 (PV=8 / -8) 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 line follower. Jika PV tidak sama dengan 0 berarti robot tidak berada pada kondisi ideal dan artinya ada sinyal kesalahan (error). Pada kondisi error inilah formula PID akan menentukan hasil sinyal kendalinya. Nach berikut ini penjelasan tentang penerapan PID pada robot line follower: Proporsional kontrol Kondisi ideal pada robot adalah bergerak maju lurus mengikuti garis, dengan kata lain PV = 0 (nilai sensor = 11100111). Dari sini dapat diasumsikan bahwa Set Point (SP) / kondisi ideal adalah saat SP = 0. Nilai sensor yang dibaca oleh sensor disebut Process Variable (PV) / nilai aktualpembacaan. Menyimpangnya posisi robot dari garis disebut sebagai error (e), yang didapat dari e = SP – PV. Dengan mengetahui besar error, mikrokontroler dapat memberikan nilai PWM motor kiri dan kanan yang sesuai agar dapat menuju ke posisi ideal (SP = 0). Besarnaya nilai PWM ini dapat diperoleh dengan menggunakan kontrol Proporsional (P), dimana P = e Kp (Kp adalah konstanta proporsional yang nilainya di set sendiri dari hasil tuning). Saat Sensor = 11111111 nilai PV dapat ditentukan dengan cara membandingkan kondisi PV sebelumnya, jika PV lebih besar dari 0, maka nilai PV dapat diasumsikan 30 dan jika PV kurang dari 0, maka nilai PV dapat diasumsikan -30 atau dengan cara menyimpan nilai error yang lalu. Dalam pemrograman robot line follower ini kodenya ditulis secara sederhana seperti berikut: If Sensor = &B11111111 Then If Pv < 0 Then : Pv = -30 End If If Pv > 0 Then : Pv = 30 End If End If Perhitungan Kontroler Proporsional Sp_sensor = 0 ‘setpoint sensor Error = Sp_sensor – Pv ‘nilai error P = Kp * Error ‘proporsional kontrol Aplikasi kontrol proporsional pada PWM ialah sebagai berikut: Pwm = Sp_kecepatan + P ‘motor kiri Pwm = Sp_kecepatan – P ‘motor kanan Derivatif kontrol Jika pergerakan robot masih terlihat bergelombang, bisa ditambahkan kontrol Derivatif (D). Kontrol D digunakan untuk mengukur seberapa cepat robot bergerak dari kiri ke kanan atau dari kanan ke kiri. Semakin cepat bergerak dari satu sisi ke sisi lainnya, maka semakin besar nilai D. Konstanta D (Kd) digunakan untuk menambah atau mengurangi imbas dari derivatif. Dengan mendapatkan nilai Kd yang tepat pergerakan sisi ke sisi yang bergelombang akibat dari kontrol proporsional bisa diminimalisasi. Nilai D didapat dari D = Kd/Ts * rate, dimana Ts ialah time sampling atau waktu cuplik dan rate = e(n) – e(n-1). Dalam program nilai error (SP – PV) saat itu menjadi nilai last_error, sehingga rate didapat dari error – last_error. Untuk menambahkan kontrol D, program dimodifikasi menjadi: Perhitungan Kontroler Proporsional + Derivatif Sp_sensor = 0 ‘setpoint sensor Error = Sp_sensor – Pv ‘nilai error P = Kp * Error ‘proporsional kontrol D1 = Kd * 10 ‘derivatif kontrol D2 = D1 / Ts D3 = Error – Last_error ‘rate D = D2 * D3 Last_error = Error ‘error lampau Pd = P + D ‘proporsional-derivatif kontrol Aplikasi kontrol proporsional dan drivatif pada PWM ialah sebagai berikut: Pwm = Sp_kecepatan + Pd ‘motor kiri Pwm = Sp_kecepatan – Pd ‘motor kanan Integratif kontrol Jika dengan P + D sudah membuat pergerakan robot cukup smooth, maka penambahan Integratif menjadi opsional. Jika ingin mencoba-coba bisa ditambahakan Integratif (I). I digunakan untukmengakumulasi error dan mengetahui durasi error. Dengan menjumlahkan error disetiap pembacaan PV akan memberikan akumulasi offset yang harus diperbaiki sebelumnya. Saat robot bergerak menjauhi garis, maka nilai error akan bertambah. Semakin lama tidak mendapatkan SP, maka semakin besar nilai I. Degan mendapatkan nilai Ki yang tepat, imbas dari Integratif bisa dikurangi. Nilai akumulasi error didapat dari: error + last_error. Untuk menambahkan kontrol I,maka program di modifikasi menjadi: Perhitungan Kontroler Proporsional + Integratif + Derivatif Sp_sensor = 0 ‘setpoint sensor Error = Sp_sensor – Pv ‘nilai error P = Kp * Error ‘proporsional kontrol D1 = Kd * 10 ‘derivatif kontrol D2 = D1 / Ts
D3 = Error – Last_error ‘rate D = D2 * D3 I1 = Ki / 10 ‘integratif kontrol I2 = Error + Last_error ‘akumulasi error I3 = I1 * I2 I = I3 * Ts Last_error = Error ‘error lampau Pd = P + D ‘proporsional-derivatif kontrol Pid = Pd+I ‘proporsional-integratif-derivatif Aplikasi kontrol proporsional, integratif dan drivatif pada PWM ialah sebagai berikut: Pwm = Sp_kecepatan + Pid ‘motor kiri Pwm = Sp_kecepatan – Pid ‘motor kanan Parameter Nilai Konstanta Kontroler P I D Nilai konstanta perhitungan PID di tuning secara trial and error, proses ini dilakukan dengan metode mencoba-coba (eksperimental) nilai proporsional, derivatif dan integratif pada formula PID hingga ditemukan hasil sistem yag stabil, adapun cara yang dilakukan untuk mentuning PID pada robot line follower ialah sebagai berikut: 1. Langkah awal gunakan kontrol proporsional terlebih dahulu, abaikan konstanta integratif dan derivatifnya dengan memberikan nilai nol pada integratif dan derivatif. 2. Tambahkan terus konstanta proporsional maksimum hingga keadaan stabil namun robot masih berosilasi. 3. Untuk meredam osilasi, tambahkan konstanta derivatif dengan membagi dua nilai proporsional, amati keadaan sistem robot hingga stabil dan lebih responsif. 4. Jika sistem robot telah stabil, kontrol integratif dapat menjadi opsional, dalam artian jika ingin mencoba-coba tambahkan kontrol integratif tersebut, namun pemberian nilai integratif yang tidak tepat dapat membuat sistem robot menjadi tidak stabil. 5. Nilai set point kecepatan dan nilai batas bawah/atas memberikan patokan kecepatan robot. 6. Nilai time sampling (waktu cuplik) juga mempengaruhi perhitungan PID, tentunnya saat penggunaan kontrol integratif dan derivatif. 7. Periksa kembali perfoma sistem hingga mendapatkan hasil yang memuaskan. Acuan penentuan parameter Kp, Ki dan Kd dapat diadopsi dari watak dari kontroler itu masing seperti yang dijelaskan pada tabel berikut ini:
Simulasi PID Parameter : klik here Dan berikut ini sample coding PID line followerku dengan pemrograman BASCOM AVR : $regfile = “m8535.dat” $crystal = 12000000 $eeprom ‘—————————inisialisasi pwm———————————— Config Timer1 = Pwm , Pwm = 10 , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down ‘pwm dengan settingan fast pwm 10 bit ‘—————————inisialisasi adc———————————— Config Adc = Single , Prescaler = Auto ‘—————————inisialisasi lcd———————————— Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0 Config Lcd = 16 * 2 : Cursor Off ‘——————————————————————————‘PENDEFINISIAN PIN MIKRO ‘——————————————————————————Config Portd = Output ‘alias logika motor M1a Alias Portd.0 M1b Alias Portd.1 M2a Alias Portd.2 M2b Alias Portd.3 Config Portb = Input Portb = 255 ‘alias tombol Sw_ok Alias Pinb.3 Sw_cancel Alias Pinb.2 Sw_down Alias Pinb.1 Sw_up Alias Pinb.0 Config Portc.3 = Output ‘——————————————————————————‘DEKLARASI VARIABEL ‘——————————————————————————-
Dim B1 As Bit , B2 As Bit , B3 As Bit , B4 As Bit , B5 As Bit , B6 As Bit , B7 As Bit , B8 As Bit, Dim S1 As Byte , S2 As Byte , S3 As Byte , S4 As Byte , S5 As Byte , S6 As Byte , S7 As Byte , S8 As Byte Dim Adc1 As Integer , Adc2 As Integer , Adc3 As Integer , Adc4 As Integer , Adc5 As Integer ,Adc6 As Integer , Adc7 As Integer , Adc8 As Integer, Dim S12 As Byte , S123 As Byte , S1234 As Byte , S12345 As Byte , S123456 As Byte , S1234567 As Byte , S12345678 As Byte Dim C As Byte Dim B As Byte Dim Sensor As Byte Dim Konversi_sensor As Byte Dim Data1 As Byte Dim Menu As Byte ‘——————————-declarasi variabel—————————— ‘variabel eeprom Dim Kp_eprom As Eram Integer Dim Ki_eprom As Eram Integer Dim Kd_eprom As Eram Integer Dim Ts_eprom As Eram Integer Dim Sp_kecepatan_eprom As Eram Integer Dim Up_eprom As Eram Integer Dim Lp_eprom As Eram Integer Dim Nos_eprom As Eram Integer Dim Hold_eprom As Eram Integer Dim Kp As Integer Dim Ki As Integer Dim Kd As Integer Dim Ts As Integer Dim Sp_sensor As Integer Dim Sp_kecepatan As Integer Dim Up As Integer Dim Lp As Integer Dim Nos As Integer Dim Hold As Integer Dim Error As Integer Dim Last_error As Integer Dim Pv As Integer Dim P As Integer Dim Pd As Integer Dim Pid As Integer Dim Pwm As Integer Dim I1 As Integer Dim I2 As Integer Dim I3 As Integer Dim I As Integer Dim D1 As Integer Dim D2 As Integer Dim D3 As Integer Dim D As Integer Dim N1 As Integer Dim N2 As Integer ‘——————————————————————————‘DEKLARASI SUBRUTIN ‘——————————————————————————Declare Sub Baca_sensor() Declare Sub Kiri_maju() Declare Sub Kanan_maju() Declare Sub Kiri_mundur() Declare Sub Kanan_mundur() Declare Sub Bantingkanan() Declare Sub Bantingkiri() Portc.3 = 0 ‘lcd on Cls : Home Lcd “ADC LINEfollower” Waitms 500 Lowerline Lcd “Fahmizal_dte2006” Waitms 1500 Portc.3 = 1 ‘lcd off Menu_utama: Cls Home : Lcd “‘menu'<<<<^>>>>>” Lowerline
Lcd “Please choice…” Do If Sw_up = 0 Then : Waitms 250 : Menu = 1 End If If Sw_down = 0 Then : Waitms 250 : Menu = 2 End If If Menu = 1 Then : Locate 2 , 1 : Lcd “Setting ROBOT…” If Sw_ok = 0 Then : Waitms 250 : Gosub Setting_pid : End If End If If Menu = 2 Then : Locate 2 , 1 : Lcd “Go……..Ready?” If Sw_ok = 0 Then : Waitms 250 : Gosub Go : End If End If Loop ‘——————————-menu Konstanta PID—————————— Setting_pid: Cls Menu_kp: Do Kp = Kp_eprom If Sw_up = 0 Then : Incr Kp : Waitms 10 End If If Sw_down = 0 Then : Decr Kp : Waitms 10 End If If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_ki End If If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_utama End If If Kp > 50 Then : Kp = 0 : Waitms 10 End If If Kp < 0 Then : Kp = 50 : Waitms 10 End If Home : Lcd “Tuning PID ^–^ “ : Locate 2 , 1 : Lcd “KP:” : Locate 2 , 4 : Lcd ” Kp_eprom = Kp Loop ‘——————————————— Menu_ki: Do Ki = Ki_eprom If Sw_up = 0 Then : Incr Ki : Waitms 10 End If If Sw_down = 0 Then : Decr Ki : Waitms 10 End If If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_kd End If If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_kp End If If Ki > 20 Then : Ki = 0 : Waitms 10 End If If Ki < 0 Then : Ki = 20 : Waitms 10 End If Home : Lcd “Tuning PID ^–^ “ : Locate 2 , 1 : Lcd “KI:” : Locate 2 , 4 : Lcd ” Ki_eprom = Ki Loop ‘——————————————— Menu_kd: Do Kd = Kd_eprom If Sw_up = 0 Then : Kd = Kd + 5 : Waitms 10 End If If Sw_down = 0 Then : Kd = Kd – 5 : Waitms 10 End If If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_ts End If If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_ki End If If Kd > 150 Then : Kd = 0 : Waitms 10 End If If Kd < 0 Then : Kd = 150 : Waitms 10 End If Home : Lcd “Tuning PID ^–^ “ : Locate 2 , 1 : Lcd “KD:” : Locate 2 , 4 : Lcd ” 100 Kd_eprom = Kd
“ : Locate 2 , 4: Lcd Kp : Waitms 100
“ : Locate 2 , 4: Lcd Ki : Waitms 100
“ : Locate 2 , 4: Lcd Kd : Waitms
Loop ‘——————————————— Menu_ts: Do Ts = Ts_eprom If Sw_up = 0 Then : Ts = Ts + 5 : Waitms 10 End If If Sw_down = 0 Then : Ts = Ts – 5 : Waitms 10 End If If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_sp_kecepatan End If If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_kd End If If Ts > 20 Then : Ts = 0 : Waitms 10 End If If Ts < 0 Then : Ts = 20 : Waitms 10 End If Home : Lcd “TimeSampling(ms)” : Locate 2 , 1 : Lcd “TS:” : Locate 2 , 4 : Lcd ” “ : Locate 2 , 4 : Lcd Ts : Waitms 100 Ts_eprom = Ts Loop ‘——————————————— Menu_sp_kecepatan: Do Sp_kecepatan = Sp_kecepatan_eprom If Sw_up = 0 Then : Sp_kecepatan = Sp_kecepatan + 50 : Waitms 10 End If If Sw_down = 0 Then : Sp_kecepatan = Sp_kecepatan – 50 : Waitms 10 End If If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_up End If If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_ts End If If Sp_kecepatan > 600 Then : Sp_kecepatan = 400 : Waitms 5 End If If Sp_kecepatan < 400 Then : Sp_kecepatan = 600 : Waitms 5 End If Home : Lcd “Set Point ^–^ “ : Locate 2 , 1 : Lcd “kecepatan:” : Locate 2 , 11 : Lcd ” “ : Locate 2 , 11 : Lcd Sp_kecepatan : Waitms 100 Sp_kecepatan_eprom = Sp_kecepatan Loop ‘——————————————— Menu_up: Do Up = Up_eprom If Sw_up = 0 Then : Up = Up + 50 : Waitms 10 End If If Sw_down = 0 Then : Up = Up – 50 : Waitms 10 End If If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_nos End If If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_sp_kecepatan End If If Up > 1000 Then : Up = 700 : Waitms 10 End If If Up < 700 Then : Up = 1000 : Waitms 10 End If Home : Lcd “TOP speed ROBOT “ : Locate 2 , 1 : Lcd “top:” : Locate 2 , 5 : Lcd ” “ : Locate 2 , 5 : Lcd Up : Waitms 100 Up_eprom = Up Loop ‘——————————————— Menu_nos: Do Nos = Nos_eprom If Sw_up = 0 Then : Nos = Nos + 100 : Waitms 10 End If If Sw_down = 0 Then : Nos = Nos -100 : Waitms 10 End If If Sw_ok = 0 Then : Waitms 250 : Gosub Menu_hold: End If
If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_up End If If Nos > 500 Then : Nos = 100 : Waitms 10 End If If Nos < 100 Then : Nos = 500 : Waitms 10 End If Home : Lcd “POWER ^–^ ROBOT” : Locate 2 , 1 : Lcd “start:” : Locate 2 , 7 : Lcd ” Nos : Waitms 100 Nos_eprom = Nos Loop ‘——————————————————————————Menu_hold: Do Hold = Hold_eprom If Sw_up = 0 Then : Hold = Hold + 5 : Waitms 10 End If If Sw_down = 0 Then : Hold = Hold – 5 : Waitms 10 End If If Sw_ok = 0 Then : Waitms 250 : Gosub Rampung_setting: End If If Sw_cancel = 0 Then : Waitms 250 : Gosub Menu_nos End If If Hold > 75 Then : Hold = 25 : Waitms 10 End If If Hold < 25 Then : Hold = 75 : Waitms 10 End If Home : Lcd “TressHold^SENSOR” : Locate 2 , 1 : Lcd “hold:” : Locate 2 , 6 : Lcd ” Hold : Waitms 100 Hold_eprom = Hold Loop ‘——————————————————————————‘——————————-tampilansaveepprom—————————— Rampung_setting: Cls Locate 1 , 1 : Lcd “Write’_to_EEPROM” Locate 2 , 1 : Lcd “=” : Waitms 200 Locate 2 , 2 : Lcd “=” : Waitms 180 Locate 2 , 3 : Lcd “=” : Waitms 155 Locate 2 , 4 : Lcd “=” : Waitms 125 Locate 2 , 5 : Lcd “=” : Waitms 90 Locate 2 , 6 : Lcd “=” : Waitms 70 Locate 2 , 7 : Lcd “=” : Waitms 50 Locate 2 , 8 : Lcd “=” : Waitms 35 Locate 2 , 9 : Lcd “=” : Waitms 20 Locate 2 , 10 : Lcd “=” : Waitms 15 Locate 2 , 11 : Lcd “=” : Waitms 13 Locate 2 , 12 : Lcd “=” : Waitms 11 Locate 2 , 13 : Lcd “=” : Waitms 9 Locate 2 , 14 : Lcd “=” : Waitms 7 Locate 2 , 15 : Lcd “=” : Waitms 5 Locate 2 , 16 : Lcd “=” : Waitms 300 Locate 2 , 1 : Lcd “writesucsesfully“ : Waitms 500 : Gosub Go: ‘——————————————————————————Go: Kp = Kp_eprom Ki = Ki_eprom Kd = Kd_eprom Ts = Ts_eprom Sp_kecepatan = Sp_kecepatan_eprom Up = Up_eprom Nos = Nos_eprom Hold = Hold_eprom Portc.3 = 0 ‘lcd on Cls Locate 2 , 5 : Lcd “Ready..!!” Locate 1 , 8 : Lcd “-“ : Waitms 150 Locate 1 , 8 : Lcd “3” : Waitms 150 Locate 1 , 8 : Lcd “2” : Waitms 150 Locate 1 , 8 : Lcd “1” : Waitms 150 Locate 1 , 8 : Lcd “-“ : Waitms 150 Cls : Locate 2 , 7 : Lcd “GO…” : Waitms 200 : Cls Do
“ :Locate 2 , 7 : Lcd
“ : Locate 2 , 6 : Lcd
Portc.3 = 1 ‘lcd off Call Baca_sensor() Sensor = Konversi_sensor If Sensor = &B00000001 Then : Pv = 20 : End If If Sensor = &B00000010 Then : Pv = 11 : End If If Sensor = &B00000100 Then : Pv = 5 : End If If Sensor = &B00001000 Then : Pv = 0 : End If If Sensor = &B00010000 Then : Pv = 0 : End If If Sensor = &B00100000 Then : Pv = -5 : End If If Sensor = &B01000000 Then : Pv = -11 : End If If Sensor = &B10000000 Then : Pv = -20 : End If If Sensor = &B00000011 Then : Pv = 16 : End If If Sensor = &B00000110 Then : Pv = 8 : End If If Sensor = &B00001100 Then : Pv = 2 : End If If Sensor = &B00011000 Then : Pv = 0 : End If If Sensor = &B00110000 Then : Pv = -2 : End If If Sensor = &B01100000 Then : Pv = -8 : End If If Sensor = &B11000000 Then : Pv = -16 : End If If Sensor = &B00000111 Then : Pv = 12 : End If If Sensor = &B00001110 Then : Pv = 6 : End If If Sensor = &B00011100 Then : Pv = 3 : End If If Sensor = &B00111000 Then : Pv = -3 : End If If Sensor = &B01110000 Then : Pv = -6 : End If If Sensor = &B11100000 Then : Pv = -12 : End If If Sensor = &B00001111 Then : Pv = 8 : End If If Sensor = &B00011110 Then : Pv = 2 : End If If Sensor = &B00111100 Then : Pv = 0 : End If If Sensor = &B01111000 Then : Pv = -2 : End If If Sensor = &B11110000 Then : Pv = -8 : End If If Sensor = &B00000000 Then Portc.3 = 0 ‘lcd on If Pv < -10 Then : Pv = -30 : Nos = Up / 2 End If If Pv > 10 Then : Pv = 30 : Nos = Up / 2 End If End If If Pv < 0 Then N1 = Up / 2 N2 = Nos / 3 Nos = N1 + N2 End If If Pv > 0 Then N1 = Up / 2 N2 = Nos / 3 Nos = N1 + N2 End If ‘setpoint sensor Sp_sensor = 0 ‘nilai error Error = Sp_sensor – Pv ‘proportional control P = Kp * Error ‘integrativ control I1 = Error + Last_error I2 = I1 / 2 I = Ki * I2 ‘derivative control D1 = Kd * 10 D2 = Error – Last_error D = D1 * D2 ‘error lampau Last_error = Error ‘proportional-derivative control Pd = P + D ‘proportional–integrativ-derivative control Pid = Pd + I ‘===== Hitung Kondisi Pertama=============’sebelah kiri Pwm = Sp_kecepatan + Pid If Pwm > 0 Then : Call Kiri_maju() : Locate 2 , 7 : Lcd “F” : End If If Pwm > Up Then : Pwm = Up : End If If Pwm < 0 Then : Call Kiri_mundur() : Pwm = 0 – Pwm : Locate 2 , 7 : Lcd “R” : End If
If Pv = 0 Then : Pwm = Nos : If Nos < Up Then : Nos = Nos + 25 : End If : End If Pwm1a = Pwm ‘=====Hitung Kondisi Kedua===============’sebelah kanan Pwm = Sp_kecepatan – Pid If Pwm > 0 Then : Call Kanan_maju() : Locate 2 , 16 : Lcd “F” : End If If Pwm > Up Then : Pwm = Up : End If If Pwm < 0 Then : Call Kanan_mundur() : Pwm = 0 – Pwm : Locate 2 , 16 : Lcd “R” : End If If Pv = 0 Then : Pwm = Nos : If Nos < Up Then : Nos = Nos + 25 : End If : End If Pwm1b = Pwm Locate 2 , 1 : Lcd “L:” : Locate 2 , 3 : Lcd ” “ : Locate 2 , 3 : Lcd Pwm1a : Locate 2 , 10 : Lcd “R:”: Locate 2 , 12 : Lcd ” “ : Locate 2 , 12 : Lcd Pwm1b Locate 1 , 11 : Lcd “PV:” : Locate 1 , 14 : Lcd ” “ : Locate 1 , 14 : Lcd Pv ‘selang waktu cuplik Waitms Ts ‘time sampling Loop End Sub Baca_sensor() Start Adc Adc1 = Getadc(0) : Adc1 = Adc1 / 5 Adc2 = Getadc(1) : Adc2 = Adc2 / 5 Adc3 = Getadc(2) : Adc3 = Adc3 / 5 Adc4 = Getadc(3) : Adc4 = Adc4 / 5 Adc5 = Getadc(4) : Adc5 = Adc5 / 5 Adc6 = Getadc(5) : Adc6 = Adc6 / 5 Adc7 = Getadc(6) : Adc7 = Adc7 / 5 Adc8 = Getadc(7) : Adc8 = Adc8 / 5 If Adc1 < Hold Then : S1 = &B00000000 : B1 = 0 : End If : If Adc1 > Hold Then : S1 = &B00000001 : B1 = 1 : End If If Adc2 < Hold Then : S2 = &B00000000 : B2 = 0 : End If : If Adc2 > Hold Then : S2 = &B00000010 : B2 = 1 : End If If Adc3 < Hold Then : S3 = &B00000000 : B3 = 0 : End If : If Adc3 > Hold Then : S3 = &B00000100 : B3 = 1 : End If If Adc4 < Hold Then : S4 = &B00000000 : B4 = 0 : End If : If Adc4 > Hold Then : S4 = &B00001000 : B4 = 1 : End If If Adc5 < Hold Then : S5 = &B00000000 : B5 = 0 : End If : If Adc5 > Hold Then : S5 = &B00010000 : B5 = 1 : End If If Adc6 < Hold Then : S6 = &B00000000 : B6 = 0 : End If : If Adc6 > Hold Then : S6 = &B00100000 : B6 = 1 : End If If Adc7 < Hold Then : S7 = &B00000000 : B7 = 0 : End If : If Adc7 > Hold Then : S7 = &B01000000 : B7 = 1 : End If If Adc8 < 120 Then : S8 = &B00000000 : B8 = 0 : End If : If Adc8 > 120 Then : S8 = &B10000000 : B8 = 1 : End If S12 = S1 Or S2 : S123 = S12 Or S3 : S1234 = S123 Or S4 : S12345 = S1234 Or S5 : S123456 = S12345 Or S6 : S1234567 = S123456 Or S7 : S12345678 = S1234567 Or S8 Konversi_sensor = S12345678 And &B11111111 Locate 1 , 1 : Lcd “s” Locate 1 , 2 : Lcd B1 Locate 1 , 3 : Lcd B2 Locate 1 , 4 : Lcd B3 Locate 1 , 5 : Lcd B4 Locate 1 , 6 : Lcd B5 Locate 1 , 7 : Lcd B6 Locate 1 , 8 : Lcd B7 Locate 1 , 9 : Lcd B8 End Sub Sub Kiri_maju() Reset M2a Set M2b End Sub Sub Kanan_maju() Reset M1a Set M1b End Sub Sub Kiri_mundur() Set M2a Reset M2b End Sub Sub Kanan_mundur() Set M1a Reset M1b End Sub =============================================================== Dan berikut ini sample coding PID line followerku dengan pemrogramanCODEVISION AVR : #include<mega8535.h> #include <delay.h> #define sensor PINB //===pwm motor alias #define motor_ki OCR1A //sip #define motor_ka OCR1B
#define m1a PORTD.0 #define m1b PORTD.1 #define m2a PORTD.2 #define m2b PORTD.3 void maju () { m1a=1;m1b=0; m2a=0;m2b=1; } void rem_kanan () { m1a=0;m1b=1; m2a=0;m2b=1; } void rem_kiri () { m1a=1;m1b=0; m2a=1;m2b=0; } //===Tombol Yang Digunakan====== #define sw_ok PINC.3 #define sw_cancel PINC.2 #define sw_down PINC.1 #define sw_up PINC.0 #asm .equ __lcd_port=0x1B ;PORTA #endasm #include #include <stdio.h> //====Variabel di eeprom===== eeprom int Kp = 0; eeprom int Ki = 0; eeprom int Kd = 0; eeprom int Ts= 0; eeprom int Upper= 0; eeprom int Lower= 0; eeprom int Set_point=0; //====Nilai-nilai eror======= eeprom int e0= 0; eeprom int e1 = 0; eeprom int e2 = 0; eeprom int e3 = 0; eeprom int e4 = 0; eeprom int e5 = 0; eeprom int e6 = 0; eeprom int e7 = 0; int error,error1,nil_pid,pwm,kode; char lcd_buff[33]; void seting_awal () { set: Kp=Kp; if(sw_up==0){Kp++;delay_ms(10);} if(sw_down==0){Kp=Kp-1;delay_ms(10);} if(Kp>100){Kp=0;delay_ms(10);} if(Kp<0){Kp=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“***************”); lcd_gotoxy(0,1); sprintf(lcd_buff,”Nilai Kp:%i”,Kp); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) { delay_ms(150);goto set1; } else goto set; //==================================== set1: Ki=Ki; if(sw_up==0) {Ki++;delay_ms(10);}
if(sw_down==0) {Ki=Ki-1;delay_ms(10);} if(Ki>100){Ki=0;delay_ms(10);} if(Ki<0) {Ki=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“***************”); lcd_gotoxy(0,1); sprintf(lcd_buff,”Nilai Ki:%i.%i”,Ki/10,Ki%10); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set2;} if(sw_cancel==0){delay_ms(150);goto set;} else goto set1; //====================================== set2: Kd=Kd; if(sw_up==0) {Kd++;delay_ms(10);} if(sw_down==0) {Kd=Kd-1;delay_ms(10);} if(Kd>100){Kd=0;delay_ms(10);} if(Kd<0) {Kd=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“***************”); lcd_gotoxy(0,1); sprintf(lcd_buff,”Nilai Kd:%i”,Kd); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set3;} if(sw_cancel==0){delay_ms(150);goto set1;} else goto set2; //======================================== set3: Ts=Ts; if(sw_up==0) {Ts++;delay_ms(10);} if(sw_down==0) {Ts=Ts-1;delay_ms(10);} if(Ts>100){Ts=0;delay_ms(10);} if(Ts<0) {Ts=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Time Sampling”); lcd_gotoxy(0,1); sprintf(lcd_buff,”Delay:%ims”,Ts); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set4;} if(sw_cancel==0){delay_ms(150);goto set2;} else goto set3; //============================================= set4: Ts=Ts; if(sw_up==0) {Set_point++;delay_ms(10);} if(sw_down==0) {Set_point=Set_point-1;delay_ms(10);} if(Set_point>255){Set_point=0;delay_ms(10);} if(Set_point<0) {Set_point=255;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Set Point”); lcd_gotoxy(0,1); sprintf(lcd_buff,”Kec:%i”,Set_point); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set5;} if(sw_cancel==0){delay_ms(150);goto set3;} else goto set4; //================================================= set5: Upper=Upper; if(sw_up==0) {Upper++;delay_ms(10);}
if(sw_down==0) {Upper=Upper-1;delay_ms(10);} if(Upper>255){Upper=0;delay_ms(10);} if(Upper<0) {Upper=255;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Limit Speed”); lcd_gotoxy(0,1); sprintf(lcd_buff,”Upper:%i”,Upper); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set6;} if(sw_cancel==0){delay_ms(150);goto set4;} else goto set5; //==================================================== set6: Lower=Lower; if(sw_up==0) {Lower++;delay_ms(10);} if(sw_down==0) {Lower=Lower-1;delay_ms(10);} if(Lower>255){Lower=0;delay_ms(10);} if(Lower<0) {Lower=255;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Limit Speed”); lcd_gotoxy(0,1); sprintf(lcd_buff,”Lower:%i”,Lower); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set7;} if(sw_cancel==0){delay_ms(150);goto set5;} else goto set6; //========Menampilkan Eror-Eror=============== set7: e0=e0; if(sw_up==0) {e0++;delay_ms(10);} if(sw_down==0) {e0=e0-1;delay_ms(10);} if(e0>100){e0=0;delay_ms(10);} if(e0<0) {e0=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Error 0”); lcd_gotoxy(0,1); sprintf(lcd_buff,”e0:%i”,e0); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set8;} if(sw_cancel==0){delay_ms(150);goto set6;} else goto set7; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //========Menampilkan Eror-Eror=============== set8: e1=e1; if(sw_up==0) {e1++;delay_ms(10);} if(sw_down==0) {e1=e1-1;delay_ms(10);} if(e1>100){e1=0;delay_ms(10);} if(e1<0) {e1=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Error 1”); lcd_gotoxy(0,1); sprintf(lcd_buff,”e1:%i”,e1); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set9;} if(sw_cancel==0){delay_ms(150);goto set7;} else goto set8; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //========Menampilkan Eror-Eror=============== set9:
e2=e2; if(sw_up==0) {e2++;delay_ms(10);} if(sw_down==0) {e2=e2-1;delay_ms(10);} if(e2>100){e2=0;delay_ms(10);} if(e2<0) {e2=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Error 2”); lcd_gotoxy(0,1); sprintf(lcd_buff,”e2:%i”,e2); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set10;} if(sw_cancel==0){delay_ms(150);goto set8;} else goto set9; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //========Menampilkan Eror-Eror=============== set10: e3=e3; if(sw_up==0) {e3++;delay_ms(10);} if(sw_down==0) {e3=e3-1;delay_ms(10);} if(e3>100){e3=0;delay_ms(10);} if(e3<0) {e3=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Error 3”); lcd_gotoxy(0,1); sprintf(lcd_buff,”e3:%i”,e3); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set11;} if(sw_cancel==0){delay_ms(150);goto set9;} else goto set10; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //========Menampilkan Eror-Eror=============== set11: e4=e4; if(sw_up==0) {e4++;delay_ms(10);} if(sw_down==0) {e4=e4-1;delay_ms(10);} if(e4>100){e4=0;delay_ms(10);} if(e4<0) {e4=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Error 4”); lcd_gotoxy(0,1); sprintf(lcd_buff,”e4:%i”,e4); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set12;} if(sw_cancel==0){delay_ms(150);goto set10;} else goto set11; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //========Menampilkan Eror-Eror=============== set12: e5=e5; if(sw_up==0) {e5++;delay_ms(10);} if(sw_down==0) {e5=e5-1;delay_ms(10);} if(e5>100){e5=0;delay_ms(10);} if(e5<0) {e5=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Error 5”); lcd_gotoxy(0,1); sprintf(lcd_buff,”e5:%i”,e5); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set13;} if(sw_cancel==0){delay_ms(150);goto set11;} else
goto set12; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //========Menampilkan Eror-Eror=============== set13: e6=e6; if(sw_up==0) {e6++;delay_ms(10);} if(sw_down==0) {e6=e6-1;delay_ms(10);} if(e6>100){e6=0;delay_ms(10);} if(e6<0) {e6=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Error 6”); lcd_gotoxy(0,1); sprintf(lcd_buff,”e6:%i”,e6); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto set14;} if(sw_cancel==0){delay_ms(150);goto set12;} else goto set13; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //========Menampilkan Eror-Eror=============== set14: e7=e7; if(sw_up==0) {e7++;delay_ms(10);} if(sw_down==0) {e7=e7-1;delay_ms(10);} if(e7>100){e7=0;delay_ms(10);} if(e7<0) {e7=100;delay_ms(10);} lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Error 7”); lcd_gotoxy(0,1); sprintf(lcd_buff,”e7:%i”,e7); lcd_puts(lcd_buff); delay_ms(100); if(sw_ok==0) {delay_ms(150);goto Magelang;} if(sw_cancel==0){delay_ms(150);goto set13;} else goto set14; //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Magelang: lcd_clear(); lcd_gotoxy(1,0); lcd_putsf(” Save To EEPROM”); delay_ms(200); Kp=Kp;Ki=Ki;Kd=Kd;Ts=Ts;Set_point=Set_point;Lower=Lower;Upper=Upper; e0=e0;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;e7=e7; } void tampilan_awal() { lcd_gotoxy(0,0); lcd_putsf(” C_Tools__! “); delay_ms(1000); lcd_gotoxy(6,1); lcd_putsf(“Present “); delay_ms(1000); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“Fahmizal_DTE_UGM”); delay_ms(500); lcd_gotoxy(0,1); lcd_putsf(” Line Follower “); delay_ms(1000); lcd_clear(); } //=====Perlihatkan Sensor========= //#define sensor PINA #define s0 PINB.0 #define s1 PINB.1 #define s2 PINB.2 #define s3 PINB.3 #define s4 PINB.4
#define s5 PINB.5 #define s6 PINB.6 #define s7 PINB.7 void show_sensor() { lcd_gotoxy(2,1); if (s7) lcd_putchar(‘1’); else lcd_putchar(‘0’); if (s6) lcd_putchar(‘1’); else lcd_putchar(‘0’); if (s5) lcd_putchar(‘1’); else lcd_putchar(‘0’); if (s4) lcd_putchar(‘1’); else lcd_putchar(‘0’); if (s3) lcd_putchar(‘1’); else lcd_putchar(‘0’); if (s2) lcd_putchar(‘1’); else lcd_putchar(‘0’); if (s1) lcd_putchar(‘1’); else lcd_putchar(‘0’); if (s0) lcd_putchar(‘1’); else lcd_putchar(‘0’); } //=====Tutup Perlihatkan Sensor==== void PID () { //***hitam=mati/0 & putih=nyala/1 //=====sensor mengarah ke Kiri if (sensor==0b11101110) {error=e0;} else if (sensor==0b11001110) {error=-e1;} else if (sensor==0b11011110) {error=-e2;} else if (sensor==0b10011110) {error=-e3;} else if (sensor==0b10111110) {error=-e4;} else if (sensor==0b00111110) {error=-e5;} else if (sensor==0b01111110) {error=-e6;kode=12;} //=====sensor mengarah ke Kanan else if (sensor==0b11101110) {error=e0;} else if (sensor==0b11100110) {error=e1;} else if (sensor==0b11110110) {error=e2;} else if (sensor==0b11110010) {error=e3;} else if (sensor==0b11111010) {error=e4;} else if (sensor==0b11111000) {error=e5;} else if (sensor==0b11111100) {error=e6;kode=24;} else if (sensor==0b11111110)//di putih semua { if (kode==12) { error=-e7; rem_kiri(); delay_ms(20); } else if (kode==24) { error=e7; rem_kanan(); delay_ms(20); } } maju(); nil_pid=((Kp*error)+((Ki/10)*(error+error1)*Ts)+((Kd/Ts)*(error-error1))); error1=error; //===== Hitung Kondisi Pertama============= pwm=Set_point-(nil_pid); if(pwm>Upper){pwm=Upper;} if(pwmUpper){pwm=Upper;} if(pwm
delay_ms(Ts); } void show_detail() { lcd_gotoxy(0,0); sprintf(lcd_buff,”e:%i”,error); lcd_puts(lcd_buff); lcd_gotoxy(5,0); sprintf(lcd_buff,”Ki%i”,motor_ki); lcd_puts(lcd_buff); lcd_gotoxy(11,0); sprintf(lcd_buff,”Ka%i”,motor_ka); lcd_puts(lcd_buff); } void inisialisasi_port() { //===Seting untuk sensor============ DDRB=0b00000000; PORTB=0b11111111; //===Seting untuk fungsi Tombol====== DDRC=0x00; PORTC=0xff; //===Seting motor==================== DDRD=0xff; PORTD=0x00; //——-inisialisasi PWM—–// TCCR1A=0xA3; TCCR1B=0x0B; TCNT1=0x0000;//PWM 16 bit// OCR1A=0x3FF; OCR1B=0x3FF; TIFR=0; } void main(void) { inisialisasi_port(); lcd_init(16); lcd_clear(); tampilan_awal(); seting_awal(); while(1) { lcd_clear(); PID(); show_sensor(); kode=0; show_detail(); delay_ms(Ts); } } Nach ni dia hasil tunning pid pada robotku disini….dan disana… Dan berikut aplikasi kontroler PID pada Robot-Wall Follower ato yg lebih dikenal dengan robot telusur dinding:
Blok sensor Robot Line Follower dengan Multiplekser-ADC Posted September 2, 2010 by Fahmizal in Robotika. Tagged: ADC line follower dengan multiplekser, line follower dengan multiplekser, line follower dengan multiplekser 4051, line follower dengan multiplekser 4067, line tracer dengan multiplekser, membuat multiplekser ADC robot line follower, merancang robot line follower dengan ADC, merancang sensor LF dengan multiplekser, multiplekser 4051, multiplekser 4067, program line follower dengan multiplekser,program multiplekser pada line follower, sensor garis dengan multiplekser. 45 Komentar
14 Votes Robot Line Follower dengan Multiplekser-ADC wah…gak bosen-bosen nich buat share tentang robot line follower…coz ane mang maniak banget nich dengan ni robot…kali ini ane mau ngeshare sedikit tentang merancang robot line follower dengan ADC dan termultipleks…tujuannya kita dapat merancang sensor lebih banyak…jika pada awalnya kita memanfaatkan fungsi porta mikrokontroler AVR sebagai I/O nach kali ini kita manfaatkan keistimewaan porta tersebut yaitu ADC (analog digital converter)…dengan menggunakan ADC maka isyarat analog dari sensor dapat kita olah tanpa bantuan komparator lagi…selain itu dengan penggunaaan ADC dapat menghemat komponen elektronika yang digunakan pada robot hanya saja jika menggunakan ADC kita harus dilebih menguasai pemrograman untuk mengolah proses perkonversian ADC tersebut…tapi tenang aja gak susah kok…di blog ane dah da cara mengolah ADC dan merancang multiplekser dengan IC 4051 tapi itu pemrogramannya pake Bascom AVR… menurut ane justru lebih gampang lo dari pada CodeVision AVR… Nach ni dia pengalaman ane merancang sensor line follower sebanyak 16 buah…ilustrasi perancangan sensornya perhatikan blok diagram berikut:
Dengan banyaknya sensor dampaknya logika pembacaan garis (mapping sensor terhadap garis akan semakin banyak) maka dari itu akan banyak kondisi yang dapat di mapping oleh sensor jadi kalo da garis perempatan, pertigaan dapat dengan mudah di mapping…dan memudahkan kita dalam merancang algoritma pemrograman. nach ni dia video pada robotku disini….dan disana… =============================================================== kalo mau liat artikel tentang: 1. robot-line-follower-dengan-kendali-pid klik disini 2. tuning-kontrol-pid-pada-robot-line-follower klik disini 3. merancang-multiplekser-adc klik disini
MAKALAH ROBOT LINE FOLOWER
( ROBOT PENGIKUT GARIS )
Nama : Is
Candra Rame
Kelas : XI EA No : 14
SMK NEGERI TEMBARAK Alamat : jln.Mantenan, Greges Tembarak Temanggung 56261. Telp : 0293-4903350 E-mail : [email protected]. Web : www.smkntembarak.sch.id
ABSTRAK
Dalam makalah ini akan dibahas mengenai robot Line Follower. Robot ini merupakan salah satu bentuk robot beroda yang memiliki komponen utama diantaranya, seperti resistor, dioda, transistor, Led yang dirangkai untuk menghasilkan jenis kendaraan yang berjalan secara otomatis dengan kecepatan tertentu mengikuti garis. Di dalam rangkaian Line Follower terdapat 3 bagian utama, yaitu bagian sensor, komparator dan driver. Untuk bagian sensor digunakan photodioda sebagai sensor cahaya, sedangkan komparatornya menggunakan IC LM 324 sebagai pembanding tegangan dan untuk drivernya digunakan 2 buah motor sebagai penggerak rodanya. Hasil uji coba rangkaian Line Follower ini menunjukkan performa yang mampu berjalan di beberapa medan, diantaranya medan lurus, belok, naik, dan menurun.
Kata kunci : Robot pengikut garis ( Line Follower )
KATA PENGANTAR
Puji syukur saya panjatkan ke hadirat Allah SWT Tuhan Yang Maha Esa, berkat rahmat dan karunia-Nya, saya atas nama: Is candra Rame dari kelas XI EA dapat menyelesaikan makalah dengan judul “LINE FOLOWER”, yang telah dipelajari disemester ketiga pada program Studi mulok produktif jurusan Teknik Elektronika industri. Tidak lupa kami ucapkan terima kasih kepada semua pihak yang telah membantu kami baik langsung maupun tidak langsung. Saya menyadari bahwa dalam pembuatan makalah ini masih banyak kekurangan, oleh sebab itu saya t mengharapkan kritik dan saran yang membangun. Dan semoga makalah ini bermanfaat . Amin.
Tembarak,13 desember 2013
( Is Candra.R. )
DAFTAR ISI ....................................................................i Kata Pengantar.............................................................ii Daftar Isi.................................................................. iii Daftar Gambar.............................................................iv Daftar Tabel...............................................................vi Abstrak
BAB I : PENDAHULUAN
.......................................................... 1 1.2. Rumusan Masalah....................................................... 1 1.3. Tujuan Masalah......................................................... 1 1.4. Batasan Masalah......................................................... 1 1.5. Ruang Lingkup.......................................................... 1 1.1. Latar Belakang
BAB II : LANDASAN TEORI
................................................. 2 2.2. Sensor Optocaupler....................................................... 3 2.3Relay..................................................................... 4 2.4 Komponen-komponen Line Follower....................................... 4 Resistor............................................................... 4 Transistor............................................................ 4 LED................................................................. 5 Photo Dioda......................................................... 5 IC.................................................................... 5 Motor Penggerak (Dinamo) ........................................... 6 2.1. Motor DC dan IC L293D
BAB III : PEMBAHASAN
......................................................... 7 3.2. Rangkaian Line Follower................................................. 8 3.1. Perancangan Alat
.................................................. 8 Prinsip kerja sensor.................................................... 8 Prinsip kerja komparator............................................... 10 Prinsip kerja Drivemator................................................ 11 3.3. Cara kerja Line Follower
3.4.
................................................................... 11 3.5. Cara kerja robot pengikut garis............................................. 11 3.6. Uji coba Line Follower.................................................... 13 3.7. Komponen yang dibutuhkan............................................... 14 3.8. Program Pada Mikrokontroler............................................... 14 Control
BAB IV : PENUTUP
................................................................15
4.1. Kesimpulan 4.2.
......................................................................15
Saran
Daftar Pustaka...............................................................15
DAFTAR GAMBAR Gambar 1. Konfigurasi Pin Mikrokontroler
....................................
AT89S51
2
Gambar 2. Konfigurasi Motor
.....................................................
DC
3
Gambar 3. Konfigurasi IC
.....................................................
L293D
3
Gambar 4. Konfigurasi Sensor Optocoupler
............................................
3
Gambar 5. Konfigurasi
.........................................................
4
Relay
Gambar 6. Blok Diagram
..................................................
7
Rangkaian
Gambar 7. Rangkaian
...................................................
7
Keseluruhan
Gambar 8. Layout Utama
............................................................
Gambar 9. Layout Sensor
............................................................
Gambar 10. Ilustrasi Kerja Sensor
.....................................................
9
Gambar 11. Letak Pemasangan Sensor
.................................................
10
Gambar 12. Prinsip Kerja Sensor
......................................................
10
Gambar 13. Rangkaian Sensor
........................................................
12
Gambar 14. Robot Pengikut
.....................................................
Garis
12
Gambar 2.1. Simbol Resistor
..........................................................
4
Gambar 2.2. Garis warna Resistor
.....................................................
4
Gambar 2.3. Bentuk Transistor
........................................................
4
Gambar 2.4. Simbol Transsistor
.......................................................
4
Gambar 2.5. Simbol
.............................................................
LED
5
Gambar 2.6. LED dan Superbright
.....................................................
5
Gambar 2.7. Simbol photo
......................................................
Dioda
5
Gambar 2.8. photo
.............................................................
Dioda
5
Gambar 2.9.
......................................................................
6
IC
Gambar 2.10. Op-AMP dalam rangkaian
.............................................
IC
6
Gambar 2.11. Motor
.................................................................
Gambar 3.1. Rangkaian line follower
................................................... 8
Gambar 3.2. Rangkaian sensor
......................................................... 9
Gambar 3.3. Rangkaian tidak terkena
............................................ 9
cahaya
Gambar 3.4. Rangkaian terkena
................................................
cahaya
9
Gambar 3.5. Rangkaian komparator
...................................................
10
Gambar 3.6. Rangkaian driver
........................................................
11
Gambar 3.7. Medan lurus
............................................................
13
Gambar 3.8. Medan naik
.............................................................
13
Gambar 3.9. Medan
............................................................
turun
13
Gambar 3.10. Medan blok
............................................................
13
Gambar 3.11. Medan
.......................................................
kombinasi
13
DAFTAR TABEL Tabel 1. Daftar
........................................................
Komponen
Tabel 2. Penggunaan Port Mikrokontroler
................................
AT89S51
11
Tabel 3. Hasil Analisa Kerja Robot Pengikut
.................................. 12
Garis
7
6
BAB I
I. PENDAHULUAN I.1. Latar Belakang Perkembangan teknologi elektronika saat ini sudah sedemikian pesatnya yang kadangkadang berawal dari rangkaian-rangkaian sederhana yang biasa kita jumpai dalam bukubuku hobby elektronika. Aplikasi dari Line Follower biasanya digunakan sebagai motor mainan anak-anak dan juga sebagai sarana transportasi di area pabrik.. Jadi dalam makalah ini akan dijelaskan rangkaian elektronika dari Line Follower beserta cara kerjanya.
1. 2. 3.
I.2. Rumusan masalah Berdasarkan latar belakang di atas, maka disusun rumusan masalah sebagai berikut : Komponen apa saja yang diperlukan dalam pembuatan Line Follower. Bagaimana prinsip kerja pada Line Follower r. Bagaimana cara membuat rangkaian Line Follower.
I.3. Tujuan dan Manfaat Mengetahui komponen-komponen elektonika yang menjadi fungsi-fungsinya sehingga dapat mengaplikasikannya dalam bentuk sebuah rangkaian. Mengetahui dan memahami sistem dan cara kerja Line Follower dengan segala kendala. Mengetahui bagaimana cara membuat rangkaian robot Line Follower. Mahasiswa mampu merancang dan mengimplementasikan suatu robot pengikut garis dengan menggunakan mikrokontroler AT89S51 dan sensor optocoupler.. Mahasiswa dapat memahami prinsip kerja robot pengikut garis berbasis mikrokontroler AT89S51.
I.4 Batasan Masalah Dalam penyusunan makalah ini kami hanya membatasi materi mengenai : 1. Fungsi tiap komponen dalam rangkaian Line Follower yang terdiri dari rangkaian sensor, komparator, dan driver. 2. Prinsip kerja dari Line Follower. 1.5. Ruang Lingkup Ruang lingkup pembuatan makalah ini, yaitu: pengenalan akan mekanisme dalam pembuatan robot pengikut garis, komponen-komponen yang digunakan, fungsi dan cara kerja sensor optocoupler, pengenalan akan IC mikrokontroler AT89S51, prinsip dan cara kerja robot pengikut garis.
BAB II DASAR TEORI Robot pengikut garis merupakan robot yang bergerak secara otomatis mengikuti suatu garis pandu yang telah ditentukan. Dalam perancangan dan implementasinya, masalahmasalah yang harus dipecahkan adalah sistem penglihatan robot, arsitektur perangkat keras yang meliputi perangkat elektronik dan mekanik, dan organisasi perangkat lunak untuk basis pengetahuan dan pengendalian secara waktu nyata. Untuk pembuatan robot pengikut garis berbasis mikrokontroler AT89S51 menggunakan beberapa komponen antara lain: Mikrokontroler AT89S51 Mikrokontroler AT89S51 merupakan suatu komponen elektronika yang di dalamnya terdapat rangkaian mikroprosesor, memori (RAM/ROM) dan I/O, rangkaian tersebut terdapat dalam level chip atau biasa disebut single chip microcomputer. Pada mikrokontroler sudah terdapat komponen-komponen mikroprosesor, dengan bus-bus internal yang saling berhubungan. Komponen-komponen tersebut adalah RAM, ROM, Timer, I/O pararel dan serial, serta interrupt control. Adapun keunggulan dari mikrokontroler adalah adanya system interupsi.
Mikrokontroler digunakan untuk keperluan control, atau kendali, biasa disebut dengan MCS, dan yang digunakan dalam robot pengikut garis. Mikrokontroler AT89S51 mempunyai 40 kaki, 32 kaki diantaranya digunakan sebagai port pararel. Satu Port pararel terdiri 8 kaki, dengan demikian 32 kaki tersebut membentuk 4 buah Port pararel, yang masing-masing dikenal sebagai Port 0, Port 1, Port 2, dan Port 3. Nomor dari masing-masing jalur (kaki) dari Port pararel mulai dari 0 sampai 7, jalur (kaki) pertama Port 0 disebut sebagai P0.0 dan jalur terakhir untuk Port 3 adalah P3.7 (Gambar 1).
Gambar 1. Konfigurasi Pin Mikrokontroler AT89S51 2.1. Motor DC dan IC L293D Motor DC adalah motor yang biasa digunakan pada perangkat elektronika dalam hal ini motor digunakan untuk menggerakan roda. Motor dapat bergerak kearah kanan dan kearah kiri jika motor DC dapat instruksi dari IC L293D. Konfigurasi motor DC dapat dilihat pada Gambar 2.
Gambar 2. Konfigurasi Motor DC Motor driver merupakan suatu rangkaian yang mengatur kerja motor atau biasa dikatakan sebagai suatu rangkaian penggerak motor sehingga motor tersebut bekerja atau beroperasi sesuai dengan apa yang kita kehendaki. Pada saat motor ini beroperasi atau bekerja biasanya terjadi induksi yang mengakibatkan tegangan menjadi sangat tinggi, sehingga diperlukan suatu rangkaian motor driver yang mengatur motor agar pada saat motor tersebut beroperasi dia tidak akan mengakibatkan gangguan kepada rangkaian-rangkaian lain yang berhubungan dengan motor. Pada pembuatan alat ini kami menggunakan IC L293D sebagai motor driver. IC L293D mempunyai empat pin input dan empat pin output, dapat dilihat pada Gambar 3. IC L293D merupakan rangkaian penyangga (buffer) pada system digital yang dapat mempertahankan
jumlah tegangan maupun arus sehingga dapat menggerakkan motor DC dengan stabil tanpa mempengaruhi rangkaian lainnya.
Gambar 3. Konfigurasi IC L293D 2.2. Sensor Optocoupler Sensor optocoupler tersusun atas LED inframerah sebagai transmitter dan photodioda sebagai receiver (Gambar 4). LED inframerah adalah dioda yang dapat memancarkan cahaya dengan panjang gelombang lebih panjang dari cahaya yang dapat dilihat, tetapi lebih pendek dari gelombang radio apabila LED inframerah tersebut dialiri arus. LED digunakan untuk memantulkan cahaya antara cahaya cerah dan gelap ke photodioda.Photodioda adalah sebuah dioda semikonduktor yang berfungsi sebagai sensor cahaya. Photodioda memiliki hambatan yang sangat tinggi pada saat dibias mundur. Hambatan ini akan berkurang ketika photodioda disinari cahaya dengan panjang gelombang yang tepat. Sehingga photodioda dapat digunakan sebagai detektor cahaya dengan memonitoring arus yang mengalir melaluinya.
Gambar 4. Konfigurasi Sensor Optocoupler 2.3. Relay Prinsip kerja pada relay adalah pada saat kumparan dialiri arus, maka akan menimbulkan magnet pada intinya, dengan adanya magnet pada intinya maka jangkar atau angker akan tertarik oleh inti. Dengan ditariknya jangkar oleh inti maka kontak-kontak relay berubah posisi dan menyebabkan relay akan terhubung (Gambar 5).
Gambar 5. Konfigurasi Relay 2.4. Komponen-komponen Line Follower Komponen-komponen pada rangkaian Line Follower terdiri dari : A. Resistor Penggunaan resistor dalam rangkaian berfungsi sebagai penghambatarus listrik, memperkecil arus dan membagi arus listrik dalam suatu rangkaian. Satuan yang dipakai untuk menentukan besar kecilnya nilai resistor adalah Ohm atau disingkat dengan Ω (Omega).
Gambar 2.1. Simbol resistor
Gambar 2.2. Garis warna resistor B. Transistor Transistor adalah suatu bahan yang dapat merubah bahan yang tidak dapat menghantarkan arus listrik menjadi bahan penghantar atau setengah menghantar arus listrik. Sifat ini disebut bahan semikonduktor.
Gambar 2.3. Bentuk transistor
( PNP )
( NPN ) Gambar 2.4. Simbol transistor Cara kerja transistor : Untuk NPN, jika ada arus yang mengalir dari basis menuju emitor maka akan ada arus yang mengalir dari collector menuju emitor. Untuk PNP, jika ada arus yang mengalir dari emitor menuju basis maka akan ada arus yang mengalir dari emitor menuju collector. B = Ic / Ib, dimana Ic >> Ib Dimana, B : besar penguatan
Ic : arus collector Ib : arus basis C. LED (Light Emiting Diode) dan LED Superbright LED biasa berfungsi sebagai lampu indikator pada saat sensor bekerja, dan bekerja pada bias forward. LED Superbright berfungsi sebagai pengirim cahaya ke garis untuk dibaca sensor. Kerjanya ketika sumber tegangan masuk pada battery on, maka arus masuk sehinnga Led superbrigth menyala dengan terang yang kemudian dibiaskan pada photodioda.
Gambar 2.5 Simbol Led
Gambar 2.6 Led dan Superbright D. Photo Dioda Photo dioda berfungsi sebagai sensor cahaya. Cara pemasangannya dengan LED indikator yaitu terbalik. Bekerja pada bias reverse.
Gambar 2.7. Simbol photo dioda
Gambar 2.8. Photo dioda E. IC (Integrated Circuit) Komponen IC memilki bentuk fisik kecil, terbuat dari bahan Silikon dan berwarna hitam. Komponen IC memiliki banyak kaki dan pada umumnya jumlah kakinya sangat tergantung dari banyaknya komponen yang membentuk komponen IC tersebut. Letak kakikaki disusun dalam bentuk dua baris atau Dual In Line (DIL). IC yang digunakan adalah IC LM 324. IC disini digunakan sebagai komparator. Yaitu membandingkan antara tegangan input dari sensor dengan tegangan input dari variable resistor. Pulsa outputnya adalah high sehingga tidak diperlikan adanya pull-up pada rangkaian output.
Gambar 2.9. IC
Gambar 2.10. Op-Amp dalam rangkaian IC F. Motor Penggerak (Dinamo) Motor adalah komponen yang mengubah energi listrik menjadi energi mekanik, dalam kasus perancangan robot, umumnya digunakan motor DC, karena jenis motor tersebut mudah untuk dikendalikan. Kecepatan yang dihasilkan oleh motor DC berbanding lurus dengan potensial yang diberikan. Untuk membalik arah putarnya cukup membalik polaritas yang diberikan.
Gambar 2.11. Motor
BAB III
III. PEMBAHASAN 3.1. Perancangan Alat Dalam perancangan robot pengikut garis, terdapat masukan berupa sensor cahaya yang diproses oleh mikrokontroler AT89S51 dan menghasilkan keluaran motor DC seperti Gambar 6.
Gambar 6. Blok Diagram Rangkaian Secara keseluruhan robot pengikut garis dirancang dengan menggunakan hardware(masukan berupa sensor dan keluaran berupa motor DC) dan software (kendali mikrokontroler). Masukan pada alat ini berupa sensor yang menghasilkan dua kondisi yaitu high dan low. Setelah masukan diproses maka keluaran motor DC akan aktif. Rangkaian keseluruhan dari perancangan digambarkan pada Gambar 7. Gambar 7. Rangkaian Keseluruhan Komponen-komponen yang digunakan adalah sebagai berikut:
Komponen utama Nama Komponen
Komponen Sensor Unit Nama Komponen Optocoupler/sensor IC Regulator 7805 1 J4209-01 Elco 1000µF/16V 1 Resistor 100Ω (R3) Resistor 1KΩ (R1) 1 Resistor 47KΩ (R4) Led 1 Transistor C5343 IC L293D + Socket 1 IC AT89S51 + Socket 1 X-Tal 11 Mhz 1 Kondensator Keramik 2 33pF/22pF Elco 10µF/16V 1 Resistor 4K7Ω (R2) 1 Relay 6V 2 Saklar 1 Tabel 1. Daftar Komponen
Unit 2 2 2 2
3.2. Rangkaian Line Follower Dari beberapa komponen diatas, maka dihasilkan sebuah rangkaian Line Follower. Rangkaian Line Follower terdiri dari tiga bagian utama, yaitu rangkaian sensor, rangkaian komparator (pembanding) dan rangkaian driver.
Gambar 3.1. Rangkaian Line Follower
3.3. Cara Kerja Line Follower Cara kerja dari rangkaian-rangkaian tersebut adalah sebagai berikut : A. Prinsip Kerja Sensor Sensor yang digunakan terdiri dari photo dioda. Sensor ini nilai resistansinya akan berkurang bila terkena cahaya dan bekerja pada kondisi riverse bias. Untuk sensor cahayanya digunakan LED Superbright, komponen ini mempunyai cahaya yang sangat terang, sehingga cukup untuk mensuplai cahaya ke photo dioda.
Gambar 3.2. Rangkaian sensor Cara kerjanya :
Gambar 3.3. Sensor tidak terkena cahaya Jika photo dioda tidak terkena cahaya, maka nilai resistansinya akan besar atau dapat kita asumsikan tak hingga. Sehingga arus yang mengalir pada komparator sangat kecil atau dapat diasumsikan dengan logika 0.
Gambar 3.4. Sensor terkena cahaya Jika photo dioda terkena cahaya, maka photo dioda akan bersifat sebagai sumber tegangan dan nilai resistansinya akan menjadi kecil, sehingga akan ada arus yang mengalir ke komparator dan berlogika 1. Sensor, dapat dianalogikan sebagai ‘mata’ sebuah robot yang berfungsi untuk ‘membaca’ garis hitam dari track robot. Sehingga robot mampu mengetahui kapan dia akan berbelok ke kiri, kapan dia berbelok ke kanan dan kapan dia berjalan lurus (Gambar 10). Dimana sensor sebelah kiri mengendalikan motor sebelah kanan, begitu sebaliknya sensor sebelah kanan mengendalikan motor sebelah kiri. Sensor yang digunakan adalah sensor optocoupler yang dipasang di bagian depan bawah robot (Gambar 11), sehingga mampu mengetahui garis gelap dari latar belakang terang.
Gambar 8. Ilustrasi Kerja Sensor
Gambar 9. Letak Pemasangan Sensor
Prinsip kerja dari sensor tersebut sederhana, ketika transmitter (infrared) memancarkan cahaya ke bidang berwarna putih, cahaya akan dipantulkan hampir semuanya oleh bidang berwarna putih tersebut. Sebaliknya, ketika transmitter memancarkan cahaya ke bidang berwarna gelap atau hitam, maka cahaya akan banyak diserap oleh bidang gelap tersebut, sehingga cahaya yang masuk ke receiver tinggal sedikit (Gambar 12).
Gambar10. Prinsip Kerja Sensor B. Prinsip Kerja Komparator Komparator pada rangaian ini menggunakan IC LM 324 yang didalamnya berisi rangkaian Op Amp digunakan untuk membandingkan input dari sensor. Dimana input akan dibandingkan dari Op Amp IC LM 324 yang output berpulsa high. Sehingga tidak perlu adanya pull up pada outputnya. IC ini dapat bekerja pad range 3 volt sampai 30 volt dan dapat bekerja dengan normal mulai tegangan 6 volt. Dalam rangkaian ini juga terdapat 4 LED, yang berfungsi sebagai indikator. Untuk mengatur tagangan pada pembanding, disambungkan Variable Resistor (VR) diantara kedua OP Amp IC LM 324.
Gambar 3.5. Rangkaian komparator ► Jika tidak ada arus yang mengalir dari rangkaian sensor ke rangkaian ini maka tegangan masukan untuk rangkaian ini adalah 0 Volt, akibatnya pada IC 1 tegangan di terminal (+) > (), maka LED-A on, sedangkan pada IC 2 sebaliknya LED-B off. ► Jika ada arus yang mengalir dari rangkaian sensor ke rangkaian ini maka tegangan masukan untuk rangkaian ini mendekati Vcc, akibatnya pada IC 2 tegangan di terminal (+) < (-), maka LED-B on, sedangkan pada IC 1 sebaliknya maka LED-A off. Kondisi antara titik A dan b akan selalu keterbalikan. C. Prinsip Kerja Driver Motor
Driver adalah rangkaian yang tersusun dari transistor yang digunakan untuk menggerakkan motor DC. Dimana komponen utamanya adalah transistor yang dipasang sesuai karakteristiknya.
Gambar 3.6. Rangkaian driver Pada saat input A berlogika 1, maka ada arus yang mengalir pada rangkaian, akibatnya transistor 1 dan 4 on karena basis terbias, sehingga motor berputar. Sehingga saat input A berlogika 1 maka input B akan berlogika 0, jadi transistor 2 dan 3 akan off. Pada saat input B berlogika 1, maka ada arus yang mengalir pada rangkaian, akibatnya transistor 2 dan 3 on karena basis terbias, sehingga motor berputar tapi dengan arah yang berlawanan. 3.4. Control Blok control ini merupakan jantung rangkaian sebagai pengontrol utama dari keseluruhan rangkaian, dimana sebagai pengontrol digunakan IC mikrokontroler AT89S51. Pada perancangan alat ini digunakakan P1.0, P1.1, P1.3, P1.4, P1.5, dan P1.6. Untuk lebih jelasnya penggunaan port mikrokontroler AT89S51 terlihat seperti Tabel 1. Port
Penggunaan
P1.0
Input Sensor 1
P1.1
Input Sensor 2
P1.3
IC L293D (In 4)
P1.4
IC L293D (In 3)
P1.5
IC L293D (In 2)
P1.6
IC L293D (In 1)
Tabel 2. Penggunaan Port Mikrokontroler AT89S51
3.5. Cara Kerja Robot Pengikut Garis Sistem robot pengikut garis yang dirancang mengacu pada sistem robot bergerak otonom, seperti digambarkan dalam blok diagram rangkaian yang ditunjukkan pada Gambar 7. Parameter yang ingin diamati oleh robot adalah keberadaan garis pandu melalui sensor (Gambar 14) dan menghasilkan sinyal digital. Sinyal digital tersebut kemudian dikirim ke IC mikrokontroler AT89S51 melalui port-port (P1.0 dan P1.1) untuk diolah berdasarkan basis pengetahuan yang diprogram dalam mikrokontroler sehingga dihasilkan perintah aksi
(output) yang harus dilakukan. Perintah ini kemudian diteruskan melalui port-port (P1.3, P1.4, P1.5 dan P1.6) ke IC L293D sebagai rangkaian pengendali motor dengan melalui relay sehingga akhirnya bagian aktuasi yang berupa motor DC bergerak sesuai dengan perintah. Dengan demikian pergerakan robot diharapkan dapat mengikuti garis sesuai dengan misi yang diembannya. Berikut di bawah ini adalah tabel hasil analisa kerja robot pengikut garis saat dijalankan pada lintasan Sensor Motor Kondisi garis Kanan Kiri Kanan Kiri Robot hitam/gela Hitam Hitam Berputar Berputar Jalan Lurus p dengan Hitam Putih Diam Berputar Belok Kanan latar Putih Putih Berputar Berputar Jalan Lurus belakang Putih Hitam Berputar Diam Belok Kiri putih/teran g: Tabel 3. Hasil Analisa Kerja Robot Pengikut Garis
Gambar 11. Rangkaian Sensor
Gambar 12. Robot Pengikut Garis
3.6. Uji Coba Line Follower Hasil uji coba Line Follower ini menunjukkan mampu berjalan di beberapa medan, dintaranya medan lurus, belok, naik, dan menurun. ► Hasil : 3 detik jarak =100 cm Gambar 3.7. Medan lurus ► Hasil : 4 detik
jarak =100 cm
Gambar 3.8. Medan naik ► Hasil : 2 detik
jarak =100 cm
Gambar 3.9. Medan turun ► Hasil : 5 detik
jarak =100 cm
Gambar 3.10. Medan belok ► Hasil : 15 detik
jarak =275 cm
Gambar 3.11. Medan kombinasi
3.7.Komponen Yang Dibutuhkan Dalam pembuatan rangkaian Line Follower ini dibutuhkan beberapa komponen-komponen elektronika, yaitu sebagai berikut : Komponen
Jumlah (buah)
1. IC LM 324 2. Resistor 33 KΩ 3. Resistor 10 KΩ 4. Resistor 560 Ω 5. Transistor (TR) 9013 6. Variable Resistor (VR) 7. LED Indikator 8. LED Superbright 9. Photodioda 10. Motor 3 Volt 11. PCB Metrik 12. Baterai 13. Saklar Togle
1 2 4 10 8 2 4 2 2 2 1 1 1
3.8. Program Pada Mikrokontroler Setelah merealisasikan rangkaian perangkat keras, maka langkah selanjutnya adalah membuat program untuk menjalankan alat tersebut. Karena sebuah mikrokontroler tidak akan bekerja bila tidak diberikan program kepadanya. Program tersebut memberitahukan mikrokontroler apa yang harus dilakukan. Program untukmikrokontroler AT89S51 ini dibuat menggunakan bahasa assembler ASM51. Sesudah di-compile menjadi file hexa (*.hex), program ini kemudian di-download ke dalammikrokontroler menggunakan mikrokontroler programmer. Listing programnya adalah sebagai berikut :
BAB IV PENUTUP Line Follower r adalah suatu robot rangkaian elektronik yang tersusun dari beberapa komponen-komponen elektronik. Dalam Line Follower terdapat 3 bagian rangkaian utama, yaitu ; rangkaian sensor (menggunakan photo dioda sebagai sensor cahaya), komparator (menggunakan IC LM 324 sebagai pembanding suatu tegangan) dan driver (digunakan sebagai penggerak roda). Hasil uji coba Line Follower ini menunjukkan mampu berjalan di beberapa medan, dintaranya medan lurus, belok, naik, dan menurun. 4.1. KESIMPULAN Pengujian robot pengikut garis dilakukan diatas garis gelap/hitam dengan latar belakang terang/putih. Dari hasil pengujian terlihat bahwa robot pengikut garis yang dibuat telah mampu mengikuti garis yang ditentukan. Akan tetapi robot tidak mampu mengikuti garis dengan belokkan yang tajam.
Robot pengikut garis akan berjalan lurus pada saat kedua sensor berada di atas garis gelap/hitam, dan juga pada saat kedua sensor berada di atas area terang/putih. Dan robot pengikut garis akan berbelok ke kanan pada saat sensor kanan berada di atas garis gelap/hitam dan sensor kiri berada di atas area terang/putih. Begitupun sebaliknya robot pengikut garis akan berbelok ke kiri pada saat sensor kiri berada di atas garis gelap/hitam dan sensor kanan berada di atas area terang/putih.
Kecepatan robot dalam mengikuti garis dipengaruhi oleh bentuk lintasan garis dan tegangan motor DC sebagai penggerak.
Mikrokontroler AT89C51 dapat digunakan sebagai pengendali robot pengikut garis dengan unjuk kerja yang baik.
Sensor optocoupler dapat digunakan untuk mendeteksi perbedaan warna berdasarkan tingkat penyerapan warna bahan dengan unjuk kerja yang baik. 4.2. Saran Berikut ini adalah beberapa tambahan yang diperlukan dalam meningkatkan kemampuan robot pengikut garis: Robot pengikut garis yang kami buat tidak bisa berhenti secara otomatis untuk itu bisa dimodifikasi dengan menuliskan program stop pada listing program.
Robot tidak mampu mengikuti garis dengan tikungan yang tajam, dikarenakan dari bentuk mekanisme robot yang kurang sempurna, juga karena kesensitifan sensor masih kurang, maka sebaiknya dibuat mekanisme yang fleksibel terhadap tikungan yang tajam, juga dengan menambahkan sensor sehingga akan lebih sensitif
V. DAFTAR PUSTAKA Dedy Rusmadi, Aneka Rangkaian Elektronika Alarm dan Bel Listrik, Pioner Jaya, Bandung, 2005. Politeknik Elektronika Negeri Surabaya, Pelatihan Line Tracer, ITS, 2006. http://www.te.ugm.ac.id/~bsutopo/stevanus.pdf http://papers.gunadarma.ac.id/index.php/industry/article/view/563/524 http://www.gunadarma.ac.id/library/articles/graduate/industrial-technology/2 Ø010/Artikel_10405805.pdf
https://fahmizaleeits.wordpress.com/2010/07/27/pengaturan-kecepatan-motor-dc-dengan-mikrokontroler/ https://fahmizaleeits.wordpress.com/2010/09/02/robot-line-follower-dengan-multiplekser-adc/ https://fahmizaleeits.wordpress.com/2010/05/08/robot-line-follower-dengan-kendali-pid/ https://fahmizaleeits.wordpress.com/2010/05/01/membuat-robot-line-follower-mikro/
http://e-belajarelektronika.com/membuat-robot-line-follower-dengan-avr-atmega8535/
http://profesorbolabot.blogspot.co.id/2013/03/desain-proteus-program-cv-avr-robot.html https://fahmizaleeits.wordpress.com/2010/08/24/tuning-kontrol-pid-pada-robot-line-follower/