Project kali ini kita akan membuat robot pengikut garis. Saya membuat robot pengikut garis ini dengan 3 buah sensor dan berpenggerak 2 roda. Ini adalah robot yang berjalan mengikuti garis hitam yang membawa robot ke tujuan tertentu. Dengan kemampuan 3 buah sensor, robot ini juga dapat mendeteksi garis 90 derajat dan garis 40 derajat yang membuatnya tetap berjalan.
Bahan-bahan yang Dibutuhkan
Untuk membuat robot dengan tiga buah sensor proximity line follower ini kita membutuhkan beberapa komponen.
- 3 buah sensor infra merah
- 2 buah Motor gir dan roda
- Arduino Uno/Nano
- L298N Motor Driver
- roda caster depan
- Battery 12/9 Volt
- Kabel Jumper
- Chassis
Merakit Chasis
- Pertama pasang sensor jarak ke bagian depan sasis menghadap ke bawah.
- Sensor kiri di Pojok Kiri Chassis.
- sensor tengah di tengah Chassis.
- Sensor kanan di Pojok Kanan Chassis.
- Pasang Arduino Uno ke Tengah Chassis.
- Pasang Driver Motor ke sedikit bagian belakang Arduino Uno.
Skema Rangkaian
Sensor kiri >> Arduino Uno
VCC >> 5V
GND >> GND
OUTPUT >> 7
Sensor tengah >> Arduino UnoVCC >> 5V
GND >> GND
OUTPUT >> 8
Sensor kanan >> Arduino UnoVCC >> 5V
GND >> GND
OUTPUT >> 9
L298N >> Arduino Uno
EA >> 10
INPUT 1 >> 2
INPUT 2 >> 3
INPUT 3 >> 4
INPUT 4 >> 5
EB >> 11
5Volt >> 5Volt
GND >> GND
Berikan 12Volt ke 12Volt L298N.
Source Code
Source code bisa didownload disini.
#include <Arduino.h>
int E_A = 11;
int IN_1 = 2;
int IN_2 = 3;
int IN_3 = 4;
int IN_4 = 5;
int E_B = 10;
int L_S = 7;
int C_S = 8;
int R_S = 9;
void setup() {
pinMode(IN_1,OUTPUT);
pinMode(IN_2,OUTPUT);
pinMode(IN_3,OUTPUT);
pinMode(IN_4,OUTPUT);
pinMode(E_A,OUTPUT);
pinMode(E_B,OUTPUT);
pinMode(L_S,INPUT);
pinMode(C_S,INPUT);
pinMode(R_S,INPUT);
analogWrite(E_A, 160);
analogWrite(E_B, 160);
delay(100);
}
void loop() {
if ((digitalRead (L_S) == 0)&&(digitalRead (C_S) == 1)&&(digitalRead (R_S) == 0))//FORWARD
digitalWrite(IN_1, HIGH);
digitalWrite(IN_2, LOW);
digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
if ((digitalRead (L_S) == 1)&&(digitalRead (C_S) == 1)&&(digitalRead (R_S) == 0)) //90 DEGREE LEFT TURN
digitalWrite(IN_1, HIGH);
digitalWrite(IN_2, LOW);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, HIGH);
if ((digitalRead (L_S) == 1)&&(digitalRead (C_S) == 0)&&(digitalRead (R_S) == 0))//LEFT TURN
digitalWrite(IN_1, HIGH);
digitalWrite(IN_2, LOW);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, LOW);
if ((digitalRead (L_S) == 0)&&(digitalRead (C_S) == 1)&&(digitalRead (R_S) == 1))//90 DEGREE RIGHT TURN
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, HIGH);
digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
if ((digitalRead (L_S) == 0)&&(digitalRead (C_S) == 0)&&(digitalRead (R_S) == 1))//RIGHT TURN
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, LOW);
digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
if ((digitalRead (L_S) == 1)&&(digitalRead (C_S) == 1)&&(digitalRead (R_S) == 1))//STOP
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, LOW);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, LOW);
}