Prototipe Robot Line Follower Print
Prototipe Robot Line Follower Print
Di susun Oleh :
Adhi Setiabudhi
: 41187003130048
Agus Apriyanto
: 41187003130045
Muhamad Saipudin
: 41187003130018
M. Ulin Nuha
: 41187003150005
Mustofa Kamal
: 41187003130051
Novianto
: 41187003130003
Setiyaji
: 41187003130037
Triyono Sutanto
: 41187003130002
Yayang Alferdian
: 41187003130024
PROGRAMSTUDITEKNIKELEKTRO FAKULTASTEKNIK
UNIVERSITAS ISLAM 45 BEKASI
2016
A. JUDUL
Prototipe Robot Line Follower Untuk Penyapu Jalan Berbasis Modul
Arduino Nano
B. LATAR BELAKANG
Perkembangan teknologi begitu pesat dan penerapan mikrokontroler
pada bidang robotika terus mengalami perkembangan yang sangat pesat pula.
Banyak negara maju (Amerika, Jerman, Inggris, Jepang, Perancis) berlombalomba
untuk
menciptakan
robot-robot cerdas
dengan
keistimewaan-
membantu
menyelesaikan
pekerjaan manusia
ataupun
untuk
line follower
sensor
proximity
sering digunakan
untuk mendeteksi ada atau tidaknya suatu garis untuk gerak robot.
Dengan demikian sensor proximity difungsikan sebagai sensor garis. Sensor ini
dapat dibuat dari pasangan LED (Light Emitting Diode) dan Photodioda yang
dipasang secara sejajar dan berdampingan. Jika pancaran LED memantul pada
garis dan diterima oleh basis Photodioda maka Photodioda menjadi saturasi
(off) sehingga tegangan keluaran mendekati 0 volt, yang didefinisikan sebagai
logika 0 atau low. Sebaliknya jika tidak terjadi pantulan, artinya pancaran
dari LED diserap oleh garis, maka Photodioda menjadi cut-off dimana
tegangan keluaran sama dengan Vcc (5 volt). Kondisi ini didefinisikan sebagai
logika 1 atau high. Robot jenis line follower bergerak menggunakan
aktuator berupa motor DC. Motor DC merupakan suatu motor penggerak yang
dikendalikan dengan arus searah.
Jenis penggerak robot line follower, biasanya memiliki 2 buah motor
DC yang diapasang di sebelah kiri dan kanan robot, kedua motor bergerak
secara diferensial. Untuk dapat menggerakan robot maka masing-masing motor
DC harus diatur arah putar dan kecepatannya lewat sebuah rangkaian driver
motor. Prinsip kerja dari driver ini hanya dengan melewatkan arus pada motor
dan menghentikan arus yang melewati motor serta mengatur arah arusnya.
Pengaturan kecepatan kedua motor DC tersebut dapat diaplikasikan sebagai
steering sekaligus penggerak robot line follower. Pengaturan kecepatan
masing-masing motor sangat menentukan tingkat kestabilan robot dalam
bergerak.
Pada robot yang sangat berperan dalam pengaturan arah dan
kecepatan kedua motor DC adalah sistem navigasi dari robot itu sendiri. Sistem
navigasi inilah yang merupakan otak dari robot. Otak robot diprogram oleh
manusia sesuai dengan keinginannya, kemudian ditanamkan ke dalam sebuah
chip mikrokontroler. Mikrokontroler pada robot difungsikan sebagai unit
pemroses data, sistem monitoring, dan sistem kontrol, dimana piranti
kontrol konvensional tidak dapat melakukannya.
Sistemnavigasirobot
menggunakan
C. TUJUAN
Tujuan utama dari penulisan laporan ini adalah :
1.
2.
3.
4.
5.
D. DESAIN RANCANGAN
1. Rancangan Hardware
a) Spesifikasi :
1. 8 sensor
2. Chip Microcontroller Arduino Nano
3. LCD 16X2
4. 5 button control
5. Driver motor
6. Gearbox Motor DC Custom
Berikut pada gambar 1 ditunjukan model robot line follower :
Berikut pada gambar dibawah ini ditunjukan rangkaian robot line follower :
2. Rancangan Software
Berikutadalahrancangan code software
/* Define motor controll inputs */
const int motorRPin1 = 2; // signal pin 1 for the right motor, connect to IN1
const int motorRPin2 = 3; // signal pin 2 for the right motor, connect to IN2
const int motorREnable = 5; // enable pin for the right motor (needs to be
PWM enabled)
const int motorLPin1 = 4; // signal pin 1 for the left motor, connect to IN3
(was 5 - need to change)
const int motorLPin2 = 7; // signal pin 2 for the left motor, connect to IN4
const int motorLEnable = 6; // enable pin for the left motor (needs to be
PWM enabled)
/* Define the pins for the IR receivers */
const int irPins[6] = {A0, A1, A2, A3, A4, A5};
/* Define values for the IR Sensor readings */
// an array to hold values from analogRead on the ir sensor (0-1023)
int irSensorAnalog[6] = {0,0,0,0,0,0};
// an array to hold boolean values (1/0) for the ir sensors, based on the analog
read and the predefined treashold
int irSensorDigital[6] = {0,0,0,0,0,0};
// the value above which we determine an IR sensor reading indicates the
sensor is over a line
int treashold = 700;
// binary representation of the sensor reading from left to right
int irSensors = B000000;
// sensors detecting the line
int count = 0;
// a score to determine deviation from the line [-180 ; +180]. Negative means
the robot is left of the line.
int error = 0;
// store the last value of error
int errorLast = 0;
// a coorection value, based on the error that is used to change motor speed
with PWM
int correction = 0;
// keep track of the laps
int lap = 0;
/* Set up maximum speed and speed for turning (to be used with PWM) */
// PWM to control motor speed [0 - 255]
int maxSpeed = 50;
/* variables to keep track of current speed of motors */
int motorLSpeed = 0;
int motorRSpeed = 0;
void setup() {
/* Set up motor controll pins as output */
pinMode(motorLPin1,OUTPUT);
pinMode(motorLPin2,OUTPUT);
pinMode(motorLEnable,OUTPUT);
pinMode(motorRPin1,OUTPUT);
pinMode(motorRPin2,OUTPUT);
pinMode(motorREnable,OUTPUT);
/* Set-up IR sensor pins as input */
for (int i = 0; i < 6; i++) {
pinMode(irPins[i], INPUT);
}
/* Change the PWM frequency of digital pins 5 and 6 (timer0) to Phasecorrect PWM of 31.250 kHz
from the default of ~500Hz. Using code from Adjusting PWM Frequencies
http://playground.arduino.cc/Main/TimerPWMCheatsheet
This requires a separate change in the wiring.c function in the Arduino
program files
hardware\arduino\cores\arduino\wiring.c from:
#define
MICROSECONDS_PER_TIMER0_OVERFLOW
(clockCyclesToMicroseconds(64 * 256))
to:
#define
MICROSECONDS_PER_TIMER0_OVERFLOW
(clockCyclesToMicroseconds(1 * 510))
Without the change to wiring.c time functions (millis, delay, as well as
libraries using them
will not work corectly.
*/
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM01) |
_BV(WGM00);
TCCR0B = _BV(CS00);
}
void loop() {
Scan();
UpdateError();
UpdateCorrection();
Drive();
}
void Scan() {
// Initialize counters, sums etc.
count = 0;
irSensors = B000000;
for (int i = 0; i < 6; i++) {
irSensorAnalog[i] = analogRead(irPins[i]);
if (irSensorAnalog[i] >= treashold) {
irSensorDigital[i] = 1;
}
else {irSensorDigital[i] = 0;}
Serial.print(irSensorAnalog[i]);
Serial.print("|");
count = count + irSensorDigital[i];
int b = 5-i;
irSensors = irSensors + (irSensorDigital[i]<<b);
}
}
void UpdateError() {
errorLast = error;
switch (irSensors) {
case B000000:
error = -120;
break;
case B011000:
error = -60;
break;
case B001100:
error = 0;
break;
case B000110:
error = 60;
break;
case B000011:
error = 120;
break;
/* 3 Sensors on the line */
case B111000:
case B011100:
error = -150;
break;
case B000111:
case B001110:
error = 150;
break;
default:
error = errorLast;
}
}
void UpdateCorrection() {
if (error >= 0 && error < 30) {
correction = 0;
}
else if (error >=30 && error < 60) {
correction = 15;
}
else if (error >=60 && error < 90) {
correction = 40;
}
else if (error >=90 && error < 120) {
correction = 55;
}
else if (error >=120 && error < 150) {
correction = 75;
}
else if (error >=150 && error < 180) {
correction = 255;
}
if (correction >= 0) {
motorRSpeed = maxSpeed - correction;
motorLSpeed = maxSpeed;
}
else if (correction < 0) {
motorRSpeed = maxSpeed;
motorLSpeed = maxSpeed + correction;
}
}
void Drive() {
if (motorRSpeed > 255) {motorRSpeed = 255;}
else if (motorRSpeed < -255) {motorRSpeed = -255;}
if (motorLSpeed > 255) {motorLSpeed = 255;}
else if (motorLSpeed < -255) {motorLSpeed = -255;}
if (motorRSpeed > 0) { // right motor forward (using PWM)
analogWrite(motorREnable, motorRSpeed);
digitalWrite(motorRPin1, HIGH);
digitalWrite(motorRPin2, LOW);
}
else if (motorRSpeed < 0) {// right motor reverse (using PWM)
analogWrite(motorREnable, abs(motorRSpeed));
digitalWrite(motorRPin1, LOW);
digitalWrite(motorRPin2, HIGH);
}
E. LANGKAH PEMBUATAN
1. Desain Layout
2. Menyablon Layout Pada PCB
3. Pelarutan PCB
4. Pemasangan Komponen dan Penyolderan
5. Memrogram Mikrokontroller
6. Menyatukan Elektronik dan Mekanik
7. Finishing
8. Uji Coba Rangkaian
F. PENGUJIAN
Setelah melakukan perancangan dan pembuatan alat, maka tahap yang
harus dilakukan selanjutnya adalah melakukan pengujian pada alat yang
telahdibuat.Pengujiandanpengamatandilakukan
pada
dankeseluruhansistemyangterdapatdalamperalatan
dilakukandengancaramelakukanpengukuranpada
sehinggadidapat perbandinganantarahasilpengujian
ini.
tiap
perangkat
keras
Pengujian
blok
sistem
ini
alat,
yang didapatdengan
2. Perancangandilakukanberdasarkanblok
per
dari
setiap
rangkaian,dimanatiap-tiapblokmempunyaifungsimasing-masing
dan
blokrangkaianyangsatudenganblokrangkaian
satukesatuanyangsalingterkaitdan
blok
yang
berhubungan
lain
serta
merupakan
membentuk
komponen
penting
yaitu,
konstruksi
fisik,
rangkaianelektronis,dansoftwarepengontrol.
2. Mikrokontroler adalah sebuah chip yang berfungsi sebagai pengontrol
rangkaian elektronik dan
dalamnya.
3. Pengaturan jarak deteksi sensor dapat dilakukan dengan mengatur
besarnya nilai penguatan pada photodioda.
4. Kendali pada line follower robot ini diterapkan menggunakan software
LabVIEW 7.1 dengan metode ON/OFF.
5. Penggunaan kendali ON/OFFpada LabVIEW 7.1 yangdihubungan
melaluiportpararel memangtidakpraktis,tetapidalam
perancangannya
dimaksudkan untuk
SARAN
fisik,
komponen
elektronik,
dan
terlebih
pada
software