Home

Sep 25, 2010

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;

No comments:

Post a Comment

Terima kasih telah berkunjung ke blog saya, dan telah sempat untuk membaca isi blog saya