F
BELAJAR ROBOT LINE
FOLLOWER
SMK Muhammadiyah
04 Boyolali
BELAJAR ROBOT LINE FOLLOWER DIGITAL
Keterangan Gambar:
1. Gambar 1 menunjukkan IR memantul karena media pantulnya putih.
2. Gambar 2 IR tidak memantul karena media pantulnya hitam.
3. Gambar 3
a. Ketika IR memantul pada media putih output sensor IR (PD) berlogika 0 (GND)
b. IR mengenai warna hitam output IR berlogika 1 (+5V).
Sensor IR sisi kanan untuk menggerakkan motor DC sisi kiri, sedangkan sensor IR sisi kiri untuk
menggerakan motor DC sisi kanan, dan apabila ke-2 sensor membaca garis ke-2 motor akan
berputar sehingga robot akan mengikuti garis tersebut.
Page 1
BELAJAR ROBOT LINE FOLLOWER DIGITAL
Robot Line Follower Digital teori dasarnya sama dengan Robot Line Follower Analog hanya saja
untuk mengatur motornya menggunakan program Arduino Nano dengan memanfaatkan PWM
untuk mangatur kecepatan motor. Nilai PWM dari 0 s/d 255, semakin besar nilai PWM-nya maka
motor semakin cepat putaranya.
LANGKAH PRAKTEK
1. Ketik program line follower berikut ini, kemudian Anda upload.
/* ====================================
Program Tutorial Robot EDUROBO V2
PROGRAM : ROBOT LINE FOLLOWER
www.tokotronik.com
=====================================*/
word rat0, rat1, rat2, rat3, rat4, rat5;
int a, f_l, f_r;
word s0, s1, s2, s3, s4, s5;
const int L1 = 2;
const int L2 = 3;
const int R1 = 4;
const int R2 = 7;
const int L = 5;
const int R = 6;
Page 2
BELAJAR ROBOT LINE FOLLOWER DIGITAL
void setup()
{
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(R1, OUTPUT);
pinMode(R2, OUTPUT);
pinMode(L, OUTPUT);
pinMode(R, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
//Serial.begin(9600);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
Page 3
BELAJAR ROBOT LINE FOLLOWER DIGITAL
delay(100);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
Page 4
BELAJAR ROBOT LINE FOLLOWER DIGITAL
delay(100);
}
rat0 = rat0/3;
rat1 = rat1/3;
rat2 = rat2/3;
rat3 = rat3/3;
rat4 = rat4/3;
rat5 = rat5/3;
}
//Serial.print(rat0);
//Serial.print(" ");
//Serial.print(rat1);
//Serial.print(" ");
//Serial.print(rat2);
//Serial.print(" ");
//Serial.print(rat3);
//Serial.print(" ");
//Serial.print(rat4);
//Serial.print(" ");
//Serial.println(rat5);
rat0 = rat0 + 200;
rat1 = rat1 + 200;
rat2 = rat2 + 200;
rat3 = rat3 + 200;
rat4 = rat4 + 200;
rat5 = rat5 + 200;
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
Page 5
BELAJAR ROBOT LINE FOLLOWER DIGITAL
// STOP
digitalWrite(L1, LOW);
digitalWrite(L2, LOW);
digitalWrite(R1, LOW);
digitalWrite(R2, LOW);
analogWrite(L, 0);
analogWrite(R, 0);
delay(3000);
}
void loop()
{
s0 = analogRead(0);
if (s0>rat0) s0=1;
else s0=0;
s1 = analogRead(1);
if (s1>rat1) s1=1;
else s1=0;
s2 = analogRead(2);
if (s2>rat2) s2=1;
else s2=0;
s3 = analogRead(3);
if (s3>rat3) s3=1;
else s3=0;
s4 = analogRead(4);
if (s4>rat4) s4=1;
else s4=0;
s5 = analogRead(5);
if (s5>rat5) s5=1;
else s5=0;
a=(a<<1)+s5;
a=(a<<1)+s4;
a=(a<<1)+s3;
a=(a<<1)+s2;
Page 6
BELAJAR ROBOT LINE FOLLOWER DIGITAL
a=(a<<1)+s1;
a=(a<<1)+s0;
digitalWrite(LED1,s0);
digitalWrite(LED2,s1);
digitalWrite(LED3,s2);
digitalWrite(LED4,s3);
digitalWrite(LED5,s4);
digitalWrite(LED6,s5);
// Serial.println(a,BIN);
if(a == 0b100000)
{
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
analogWrite(L, 200);
analogWrite(R, 180);
}
if(a == 0b110000)
{
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 200);
analogWrite(R, 80);
}
Page 7
BELAJAR ROBOT LINE FOLLOWER DIGITAL
digitalWrite(L2, LOW);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 200);
analogWrite(R, 100);
}
if(a==0b011100)
{
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 230);
analogWrite(R, 200);
}
if(a==0b001110)
{
digitalWrite(L1, LOW);//KANAN BERHENTI
digitalWrite(L2, HIGH);
digitalWrite(R1, HIGH); //KANAN BERHENTI
digitalWrite(R2, LOW);
analogWrite(L, 200);
Page 8
BELAJAR ROBOT LINE FOLLOWER DIGITAL
analogWrite(R, 230);
}
if(a==0b000011)
{
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 80);
analogWrite(R, 200);
}
if(a == 0b000001)
{
digitalWrite(L1, LOW);
digitalWrite(L2, HIGH);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 180);
analogWrite(R, 200);
}
if(s0==1) f_l++;
Page 9
BELAJAR ROBOT LINE FOLLOWER DIGITAL
if(s5==1)f_r++;
if(a == 0b000000 && f_r>0)
{
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
analogWrite(L, 180);
analogWrite(R, 200);
f_r=0;
}
delay(1);
a=0;
}
2. Buat lintasan dulu gunakan lantai berwarna putih atau bisa gunakan banner sebagai
background-nya. Kemudian buat lintasan menggunakan lakban hitam. Seperti contoh dibawah
ini (atau Anda bisa membuat model lain):
Page 10
BELAJAR ROBOT LINE FOLLOWER DIGITAL
Contoh lintasan
3. Koneksikan kabel sensor sesuai urutanya dari CN10 (ER-1) ke CN1 (ER-2) dan pasang jumper
sesuai gambar dibawah ini.
Page 11
BELAJAR ROBOT LINE FOLLOWER DIGITAL
Pembahasan Program:
Awal program hanya sebagai keterangan saja ya (komentar) dan tidak berpengaruh
terhadap program. Awal komentar diawali dengan /* dan diakhiri dengan */
/* ====================================
Program Tutorial Robot EDUROBO V2
PROGRAM : ROBOT LINE FOLLOWER
www.inkubator-teknologi.com
=====================================*/
Untuk memudahkan pemrograman, kita buat koneksi antara sensor & driver motor dengan pin
Arduino seperti dibawah ini (Perhatikan skematik).
const int L1 = 2;
const int L2 = 3;
const int R1 = 4;
const int R2 = 7;
const int L = 5;
const int R = 6;
Tentukan pin sebagai output untuk mengontrol putaran motor dan mengontrol ON/OFF LED.
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(R1, OUTPUT);
pinMode(R2, OUTPUT);
pinMode(L, OUTPUT);
pinMode(R, OUTPUT);
Page 12
BELAJAR ROBOT LINE FOLLOWER DIGITAL
delay(100);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
delay(100);
Page 13
BELAJAR ROBOT LINE FOLLOWER DIGITAL
}
rat0 = rat0/3;
rat1 = rat1/3;
rat2 = rat2/3;
rat3 = rat3/3;
rat4 = rat4/3;
rat5 = rat5/3;
}
Setelah kalibrasi maka mendapatkan nilai rata rata pembacaan dari masing masing sensor. Nilai
rata rata di tambah dengan 200 yang artinya setiap nilai yang lebih kecil dari nilai rata rata di
anggap sebagai pembacaan warna putih, sedangkan jika nilai pembacaan sensor di atas nilai rata
rata maka dianggap membaca warna hitam.
rat0 = rat0 + 200;
rat1 = rat1 + 200;
rat2 = rat2 + 200;
rat3 = rat3 + 200;
rat4 = rat4 + 200;
rat5 = rat5 + 200;
Page 14
BELAJAR ROBOT LINE FOLLOWER DIGITAL
a=(a<<1)+s3;
a=(a<<1)+s2;
a=(a<<1)+s1;
a=(a<<1)+s0;
Hasil pembacaan sensor pada variable a apabila dikonversi ke dalam data biner maka akan
menjadi 6 data.
Sebelumnya kita pahami dulu posisi sensor, lihat gambar dibawah ini:
S0 S2 S3 S4
S0 S5
Page 15
BELAJAR ROBOT LINE FOLLOWER DIGITAL
Kondisi 1:
if(a == 0b100000)
{
Jika kondisi 1 terpenuhi maka ubah arah putaran roda kanan mundur sedangkan roda kiri maju.
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
Selanjutnya atur nilai PWM seperti tabel supaya robot berbelok ke arah kanan:
analogWrite(L, 200);
analogWrite(R, 180);
Kondisi 2:
if(a == 0b110000)
{
Jika kondisi 2 terpenuhi maka robot berjalan maju dengan mengatur nilai PWM kanan lebih kecil
daripada PWM kiri sehingga robot berbelok ke kanan.
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
Page 16
BELAJAR ROBOT LINE FOLLOWER DIGITAL
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 200);
analogWrite(R, 80);
Kondisi 3 s/d 6:
if(a==0b111100 || a==0b111000 || a == 0b010000 || a==0b011000)
{
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 200);
analogWrite(R, 100);
}
Kondisi 7:
if(a==0b011100)
{
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 230);
analogWrite(R, 200);
}
Page 17
BELAJAR ROBOT LINE FOLLOWER DIGITAL
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 255);
analogWrite(R, 255);
}
Kondisi 11:
if(a==0b001110)
{
digitalWrite(L1, LOW);//KANAN BERHENTI
digitalWrite(L2, HIGH);
digitalWrite(R1, HIGH); //KANAN BERHENTI
digitalWrite(R2, LOW);
analogWrite(L, 200);
analogWrite(R, 230);
}
Kondisi 16:
if(a==0b000011)
{
digitalWrite(L1, HIGH);
Page 18
BELAJAR ROBOT LINE FOLLOWER DIGITAL
digitalWrite(L2, LOW);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 80);
analogWrite(R, 200);
}
Kondisi 17:
if(a == 0b000001)
{
digitalWrite(L1, LOW);
digitalWrite(L2, HIGH);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 180);
analogWrite(R, 200);
}
Kanan Kiri
Tampak Bawah
Jika sensor sisi kanan membaca warna hitam maka variable f_l ditambah 1, fungsi dari variable
tersebut untuk menanggulangi saat semua sensor membaca warna putih sehingga robot akan
membelok ke kanan:
if(s0==1) f_l++;
Jika semua sensor membaca warna putih dan variable f_l lebih besar dari 0, maka robot berbelok
ke kanan:
if(a == 0b000000 && f_l>0)
Page 19
BELAJAR ROBOT LINE FOLLOWER DIGITAL
{
digitalWrite(L1, LOW);
digitalWrite(L2, HIGH);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
analogWrite(L, 180);
analogWrite(R, 200);
f_l=0;
f_r=0;
}
Jika semua sensor membaca warna putih dan variable f_r lebih besar dari 0, maka robot berbelok
ke kiri:
if(s5==1)f_r++;
if(a == 0b000000 && f_r>0)
{
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
analogWrite(L, 180);
analogWrite(R, 200);
f_l=0;
f_r=0;
}
Page 20
Page 21
+5V
1
+5V +7,4V MOTOR DC
470 U2
VIN (7-12V) TX1 2 16
GND RX0 7 1A VCC1 8
RST RST 10 2A VCC2
10K 10K 10K 10K 10K 10K 3A
+5V GND 15 3 MG1
A7 2/INT 4A 1Y 6
LED2 PD2
A6 3/INT/PWM 1 2Y 11
2
A5 (SCL) 4/SDA 9 1,2EN 3Y 14
A4 (SDA) 5/SCL/PWM 3,4EN 4Y
1
A3 6/PWM
GND
GND
GND
GND
A2 7 MOTOR DC
A1 8
A0 9/PWM
AREF 10/SS/PWM
13
12
L293D
4
5
LED3 PD3 +5V R1 1K D17 red 3V3 11/MOSI/PWM
13/SCK 12/MISO MG2
2
J5
+5V
2
1
+5V
LED4 PD4
470 1K
Skematik:
LED5 PD5
1K
6 LED
LED6 PD6
BELAJAR ROBOT LINE FOLLOWER DIGITAL
Flowchart Program:
Start
Inisialisasi PORT
Kalibrasi Sensor
Ya
Roda Kanan : Mundur PWM L : 200
Kondisi 1 ?
Roda Kiri : Maju PWM R : 180
tdk
Ya Roda Kanan : Maju PWM L : 200
Kondisi 2 ?
Roda Kiri : Maju PWM R : 80
tdk
Ya Roda Kanan : Maju PWM L : 200
Kondisi 3/4/5/6 ? Roda Kiri : Maju PWM R : 100
tdk
Ya
Roda Kanan : Maju PWM L : 230
Kondisi 7 ?
Roda Kiri : Maju PWM R : 200
tdk
Ya Roda Kanan : Maju PWM L : 255
Kondisi 8/9/10 ?
Roda Kiri : Maju PWM R : 255
tdk
Ya
Roda Kanan : Maju PWM L : 200
Kondisi 11 ? Roda Kiri : Maju PWM R : 230
tdk
Ya
Kondisi Roda Kanan : Maju PWM L : 100
12/13/14/15 ? Roda Kiri : Maju PWM R : 200
tdk
Ya
Roda Kanan : Maju PWM L : 80
Kondisi 16 ?
Roda Kiri : Maju PWM R : 200
tdk
Ya
Roda Kanan : Maju PWM L : 180
Kondisi 17 ?
Roda Kiri : Mundur PWM R : 200
tdk
Page 22