Home

Sep 25, 2010

Line Follower dengan Kontrol PID

seperti biasa ini punyanya bang fahmizal http://fahmizaleeits.wordpress.com/2010/05/08/robot-line-follower-dengan-kendali-pid/

ni dia yg belum bisa aku ngerti2 ampe karang... ane cuma mau ngeshare ilmu aja

bergerak smooth-nya robot sangat tergantung dari aksi kontrol robot tersebut, jika hanya menngunakan kontrol on-offf (diskontinyu) akan sangat berbeda dengan aksi kontrol kontinyu PID. 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 pen-digitalization 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:

Nach…jika kita terapkan dalam bahasa pemrograman menjadi….

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….

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:


diagram alir PID



Line Follower dengan Microcontroler

hehehe, ini juga ngopy dari mas fahmizal punya.... http://fahmizaleeits.wordpress.com/2010/05/01/membuat-robot-line-follower-mikro/

Jika beberapa minggu 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 mikro… semoga bermanfaat…ya…ok

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…(apa maksudnya dengan kiamat).

Hmmm software apa ja sich yang digunakan pada robot line follower mikro…

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,… tentu saja di toko buku,.. bukan pasar ikan,..hehe. 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 mikro… guampangkan….

Nach perhatikan blok sistem dari robot line follower mikro 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 tombol keypad yang berfungsi untuk memasukan data pengendali robot, contoh dengan kendali PID, fuzzy dan lain sebagainya. Pada bagian keluaran berupa penampil LCD 2*16 dan driver motor (IC L293D) sebagai aktuator (penggerak) robot.

Gambaran Umum Sistem

Cara kerja dari sistem robot line follower secara umum ialah dimulai dari pembacaan lintasan atau garis oleh sensor photodiode berserta LED superbright yang mana intensitas pantulan sinar LED superbright 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 photodiode mendeteksi 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 berupa display (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.

contoh bahasa pemrograman Basic

'Program Line Follower

'Oleh: Fahmizal

'Mahsiswa Program Diploma Teknik Elektro

'Universitas Gadjah Mada

2007

'Program Line Follower dengan 8 sensor

'Oleh: Fahmizal

'Mahasiswa Program Diploma Teknik Elektro

'Universitas Gadjah Mada 2007

$regfile = "m8535.dat"

$crystal = 12000000

'-------------------------------------------------------------------------------

Dim B As Byte

Dim Data1 As Byte

'-------------------------------------------------------------------------------

'PENDEFINISIAN PIN MIKRO

'-------------------------------------------------------------------------------

Config Portb = Output

Dirleft1 Alias Portb.3

Dirleft2 Alias Portb.2

Dirright1 Alias Portb.1

Dirright2 Alias Portb.0

Config Pina.0 = Input

Config Pina.1 = Input

Config Pina.2 = Input

Config Pina.3 = Input

Config Pina.4 = Input

Config Pina.5 = Input

Config Pina.6 = Input

Config Pina.7 = Input

'-------------------------------------------------------------------------------

'KONFIGURASI PWM

'-------------------------------------------------------------------------------

Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up

Config Int0 = Rising

Config Int1 = Rising

'-------------------------------------------------------------------------------

'DEKLARASI RUTIN

'-------------------------------------------------------------------------------

Declare Sub Pwm(byval Kiri As Integer , Byval Kanan As Integer)

Declare Sub Maju()

Declare Sub Terus()

Declare Sub Kiri()

Declare Sub Bantingkiri()

Declare Sub Kanan()

Declare Sub Bantingkanan()

Declare Sub Mundur()

Declare Sub Ok()

'-------------------------------------------------------------------------------

'rutin utama

'-------------------------------------------------------------------------------

Do

Data1 = Pina

Select Case Data1

Case &B00000000 : Call Terus()

Case &B11100111 : Call Maju()

Case &B11110011 : Call Kiri()

Case &B11111001 : Call Kiri()

Case &B11111100 : Call Bantingkiri()

Case &B11111110 : Call Bantingkiri()

Case &B11111000 : Call Bantingkiri()

Case &B11110000 : Call Bantingkiri()

Case &B11100000 : Call Bantingkiri()

Case &B11001111 : Call Kanan()

Case &B10011111 : Call Kanan()

Case &B00111111 : Call Bantingkanan()

Case &B01111111 : Call Bantingkanan()

Case &B00011111 : Call Bantingkanan()

Case &B00001111 : Call Bantingkanan()

Case &B00000111 : Call Bantingkanan()

Case &B11111111 : Call Mundur()

' logika jalan terus walaupun ada rintangan

Case &B10011111 : Call Ok()

Case &B11001111 : Call Ok()

Case &B11100111 : Call Ok()

Case &B11110011 : Call Ok()

Case &B11111001 : Call Ok()

Case &B10001111 : Call Ok()

Case &B11000111 : Call Ok()

Case &B11100011 : Call Ok()

Case &B11110001 : Call Ok()

Case &B10000111 : Call Ok()

Case &B11000011 : Call Ok()

Case &B11100001 : Call Ok()

Case &B10000011 : Call Ok()

Case &B11000001 : Call Ok()

End Select

Loop

End

Sub Terus()

For B = 0 To 8

Reset Dirleft1

Reset Dirright1

Set Dirleft2

Set Dirright2

Call Pwm(1 , 1)

Next

End Sub

Sub Maju()

For B = 0 To 8

Reset Dirleft1

Reset Dirright1

Set Dirleft2

Set Dirright2

Call Pwm(1 , 1)

Next

End Sub

Sub Kiri()

For B = 0 To 8

Reset Dirleft1

Reset Dirright1

Set Dirleft2

Set Dirright2

Call Pwm(3 , 5)

Next

End Sub

Sub Bantingkiri()

For B = 0 To 8

Reset Dirleft1

Reset Dirright1

Set Dirleft2

Set Dirright2

Call Pwm(1 , 255)

Next

End Sub

Sub Kanan()

For B = 0 To 8

Reset Dirleft1

Reset Dirright1

Set Dirleft2

Set Dirright2

Call Pwm(5 , 3)

Next

End Sub

Sub Bantingkanan()

For B = 0 To 8

Reset Dirleft1

Reset Dirright1

Set Dirleft2

Set Dirright2

Call Pwm(255 , 1)

Next

End Sub

Sub Mundur()

For B = 0 To 8

Set Dirleft1

Set Dirright1

Reset Dirleft2

Reset Dirright2

Call Pwm(1 , 1)

Next

End Sub

Sub Ok()

For B = 0 To 8

Reset Dirleft1

Reset Dirright1

Set Dirleft2

Set Dirright2

Call Pwm(1 , 1)

Next

End Sub

'-------------------------------------------------------------------------------

' Rutin pengendali sinyal PWM

'-------------------------------------------------------------------------------

Sub Pwm(byval Kiri As Integer , Byval Kanan As Integer)

Pwm1a = Kiri 'portd.5

Pwm1b = Kanan 'portd.4

End Sub


Contoh Program dengan Bahasa C:

// PROGRAM LINE FOLLOWER

// OLEH : FAHMIZAL

// DIPLOMA TEKNIK ELEKTRO UGM 2007

#include

#include

unsigned char sensor;

void maju ();

void kanan_dikit ();

void kanan_banyak ();

void kiri_dikit ();

void kiri_banyak ();

void kanan_banyaki ();

void kanan_banyak2 ();

void kanan_banting ();

void kiri_banyak2 ();

void kiri_banting ();

void ada_garis ();

void cabang ();

void henti ();

void main(void)

{

DDRD=DDRB=0xFF;

DDRA=0x00;

//----inisialisasi pwm----//

TCCR1A=0xa3;

TCCR1B=0x0b;

TCNT1=0x0000;//000016 bit

OCR1A=0x03ff;

OCR1B=0x03FF;

TIFR=0;

//------------------------//

while (1)

{

// PORTA=0xff;// tambahan, jangan dipakai dlam sebenarnya

sensor=PINA;

sensor&=0b11111111;

switch(sensor)

{

case 0b11100111: maju (); // maju lurus

break;

case 0b11100011: kanan_dikit (); // nyalakan kanan (dikit)

break;

case 0b11110001: kanan_banyak (); // nyalakan kanan (banyak)

break;

case 0b11100001: kanan_banyaki (); // nyalakan kanan (banyak)

break;

case 0b11111000: kanan_banyak2 (); // nyalakan kanan (banyak)

break;

case 0b11110000: kanan_banting (); // nyalakan kiri (banyak)

break;

case 0b11000111: kiri_dikit (); // nyalakan kiri (dikit)

break;

case 0b10001111: kiri_banyak (); // nyalakan kiri (banyak)

break;

case 0b00011111: kiri_banyak2 (); // nyalakan kiri (banyak)

break;

case 0b00001111: kiri_banting (); // nyalakan kiri (banyak)

break;

case 0b00000000: ada_garis (); // nyalakan kiri (banyak)

break;

case 0b11000011: cabang (); // nyalakan kiri (banyak)

break;

case 0b11111111: henti();

break;// pilih orientasi kanan

}

};

}

//---maju---//

void maju ()

{PORTB=0b00001010;

OCR1A=0x3ff; //KANAN OCR1A

OCR1B=0x3ff;

}

//---kanan dikit---//

void kanan_dikit ()

{PORTB=0b00001010;

OCR1A=0x200;

OCR1B=0x2ee;

}

//---kanan banyak---//

void kanan_banyak ()

{PORTB=0b00001010;

OCR1A=0x100;

OCR1B=0x3ff;

}

void kanan_banyaki ()

{PORTB=0b00001010;

OCR1A=0x100;

OCR1B=0x3ff;

}

//---kanan banyak2---//

void kanan_banyak2 ()

{PORTB=0b00001001;

OCR1A=0x3ff;

OCR1B=0x3ff;

}

//---kanan banyak2---//

void kanan_banting ()

{PORTB=0b00001001;

OCR1A=0x3ff;

OCR1B=0x3ff;

}

//---kiri dikit---//

void kiri_dikit ()

{PORTB=0b00001010;

OCR1A=0x2ee;

OCR1B=0x200;

}

//---kiri banyak---//

void kiri_banyak ()

{PORTB=0b00001010;

OCR1A=0x2ee;

OCR1B=0x100;

}

void kiri_banyak2 ()

{PORTB=0b00000110;

OCR1A=0x3ff;

OCR1B=0x3ff;

}

//---kanan banyak2---//

void kiri_banting ()

{PORTB=0b00000110;

OCR1A=0x3ff;

OCR1B=0x3ff;

}

//---ada garis---

void ada_garis ()

{PORTB=0b00001010;

OCR1A=0x03ff;

OCR1B=0x03ff;

}

//---cabang---//

void cabang ()

{PORTB=0b00001010;

OCR1A=0x03ff;

OCR1B=0x0020;

}

//---henti

void henti ()

{PORTB=0b00000101;

OCR1A=0x03ff; //KANAN OCR1A

OCR1B=0x03ff;

Robot Line Tracer Analog

makasi buat mas fahmizal, saya juga ingin berbagi dengan yg laen... maaf ya saya mengcopy blognya itu .^^ http://fahmizaleeits.wordpress.com/2010/04/11/cara-membuat-robot-line-follower-analog/

nah… kali ini q mau share mengenai cara membuat robot line follower analog, apa sich maksudnya analog dan apa bedanya dengan digital…. robot line follower analog tidak perlu adanya pemrograman robot secara software (perangkat lunak) sedangkan line follower mikro (digital) melibatkan software…itu sich cuman salah satu dasar perbedaannya, untuk perbedaan yang laen…apa ya… pokoknya itu dech, hehe…

buat kamu-kamu yang baru saja tertarik pada dunia robot dan pengen banget membuat robot maka belajar lah dahulu dari yang dasar, nach membuat robot line follower analog merupakan dasar-dasar dari merancang robot…(q dulu belajarnya dari analog…) tentu saja nanti berkembang menuju digital…

apa saja sich komponen dasar dari sistem robot itu….? setau ku robot terdiri dari komponen input (masukkan, contohnya sensor), pengolah dan output (keluaran), nach sistem robot line follower analog belum lah kompleks jika dibandikan dengan robot seperti humanoid contoh ASIMO,… untuk dasar membuat robot kita gak perlu membuat robot asimo, hehe susah banget kali…., line follower analog juga dah bisa dikatakan robot, sebab dikatakan robot jika benda tersebut telah dapat begerak atw berjalan secara automatik tanpa bantuan operator.

komponen dasar dari sistem robot:

hmmm tulis apa lagi ya…. langsung aja dech nich q share salah satu rangkaian dari robot line follower analog….

rangkaian Line Follower Analog diatas 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 H- Bridge Transistor.

Cara kerja dari rangkaian-rangkaian Line Follower Analog 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 Rangkaian sensor

Cara kerjanya :

Gambar 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 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.

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 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 Rangkaian driver H-Bridge Transistor

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.