Anda di halaman 1dari 19

BOEBOT ROBOT

Uraian Materi

Boe-bot merupakan singkatan dari Board of Education dimana banyak


digunakan di kelas robotik. Terdiri dari sirkuit utama (papan BOE) dan
breadboard, sebuah mikrokontroler p-Basic, dua servo, dan sasis alumunium.

101
Gambar 5.1. Robot BOE-BOT

1. Perakit Komponen BOE-BOT

Pembelajaran kali ini peserta belajar untuk mempelajari prinsip kerja BOE-BOT,
kemudian mengecek kebutuhan alat dan bahan untuk praktik. Selanjutnya
peserta diminta untuk merakit komponen mekanik dan elektronik robot BOE-BOT
dan menguji komponen system secara terintegrasi dan terakhir peserta belajar
untuk memprogram robot whisker dengan menggunakan bahasa C melalui
software Arduino IDE

Persiapkan alat dan bahan berikut untuk merakit komponen-komponen sehingga


membentuk system robot BOE-BOT.

Peralatan :

a. Obeng
b. Kunci pas
c. Tang runcing
d. Robot chassis
e. Standoff, mur, karet grommer
f. Servo dengan putaran kontinyu
g. Roda plastik berlapis karet
h. Bola roda
i. BOE-Shield board

102
Selanjutnya rakitlah chasis robot
BOE-BOT dengan komponen servo

103
Memasang servo pada chassis

104
Memasang wadah baterai pada chassis Memasang roda pada chassis

105
Memasang papan BOE-Shield

106
2. Menguji Manuver Dasar BOE Shield-bot

a. Gerakan maju
Untuk membuat gerakan maju pada robot BOEBOT, maka putaran motor
satu harus dibuat berkebalikan. Hal ini karena pemasangan posisi motor
pada roda saling berlawanan, untuk itu motor kanan harus diputar kiri
sedangkan motor kiri harus diputar kanan.

/ Robotics with the BOE Shield - ForwardThreeSeconds


/ Make the BOE Shield-Bot roll forward for three seconds, then
stop.

#include <Servo.h> // Include servo


library

Servo servoLeft; // Declare left and


right servos
Servo servoRight;

void setup() // Built-in


initialization block
{
tone(4, 3000, 1000); // Play tone for 1
second
delay(1000); // Delay to finish
tone

107
servoLeft.attach(13);
to pin 13

// Attach left signal


servoRight.attach(12); // Attach right
signal to pin 12

// Full speed forward


servoLeft.writeMicroseconds(1700); // Left wheel
counterclockwise
servoRight.writeMicroseconds(1300); // Right wheel
clockwise
delay(3000); // ...for 3 seconds

servoLeft.detach(); // Stop sending servo


signals
servoRight.detach();
}

void loop() // Main loop auto-


repeats
{ // Empty, nothing
needs repeating

b. Menyetel Manuver dasar


Cobalah untuk menulis program pada sketch yang menginstruksikan BOE
Shield-Bot untuk berjalan maju dengan kecepatan penuh selama lima belas
detik. Kemudian amati apakah gerakan robot sedikit melenceng ke arah kiri
atau kanan? Gerakan robot yang melenceng dapat disebabkan dua hal yaitu
mekanik yang kurang tepat atau karena kecepatan kedua motor sedikit
berbeda. Jika gerakan melenceng tersebut karena kesalahan mekanik maka
dapat diperbaiki dengan menggunakan obeng atau tang. Akan tetapi jika
gerakan melenceng tersebut dikarenakan perbedaan kecepatan anatara
kedua motor, maka hal tersebut dapat diperbaiki dengan menyesuaikan
kecepatan kedua motor dengan mengubah program pada mikrokontroller

108
c. Menyesuaikan kecepatan Servo untuk meluruskan jalan BOE
Shield-Bot
Jika gerakan BOE Shield-Bot melenceng dikarenakan kecepatan kedua
motor berbeda, maka kita dapat merubah program untuk memperlambat
roda yang lebih cepat. Ingat dari grafik kurva transfer servo bahwa Anda
memiliki kontrol kecepatan terbaik atas servo di kisaran 1400-1600 µs.

/ Robotics with the BOE Shield - ForwardTenSeconds


/ Make the BOE Shield-Bot roll forward for ten seconds, then
stop.

#include <Servo.h> // Include servo


library

Servo servoLeft; // Declare left and


right servos
Servo servoRight;

void setup() // Built-in


initialization block
{
tone(4, 3000, 1000); // Play tone for 1
second
delay(1000); // Delay to finish
tone

servoLeft.attach(13); // Attach left signal


to pin 13
servoRight.attach(12); // Attach right
signal to pin 12

// Full speed forward


servoLeft.writeMicroseconds(1700); // Left wheel
counterclockwise
servoRight.writeMicroseconds(1300); // Right wheel
clockwise
delay(10000); // ...for 10 seconds

servoLeft.detach(); // Stop sending servo


signals

109
servoRight.detach();
}

void loop() // Main loop auto-


repeats
{ // Empty, nothing
needs
}

3. Menghitung Jarak

Dalam banyak dunia Robotika, semakin presisi navigasi robot berarti nilai yang
dihasilkan akan lebih baik. Dalam proyek Robotika sederhana sering kali
dijumpai tugas untuk membuat robot menuju ke suatu lokasi yang telah
ditentukan dan kemudian kembali ke tempat semula.

>> Cara menghitung untuk BOE-Shield

110
/ Robotics with the BOE Shield - ForwardOneSecond
/ Make the BOE Shield-Bot roll forward for one seconds, then
stop.

#include <Servo.h> // Include servo


library

Servo servoLeft; // Declare left and


right servos
Servo servoRight;

void setup() // Built-in


initialization block
{
tone(4, 3000, 1000); // Play tone for 1
second
delay(1000); // Delay to finish
tone

servoLeft.attach(13); // Attach left signal


to pin 13
servoRight.attach(12); // Attach right
signal to pin 12
// Full speed forward
servoLeft.writeMicroseconds(1700); // Left wheel
counterclockwise
servoRight.writeMicroseconds(1300); // Right wheel
clockwise
delay(1000); // ...for 1 second

111
servoLeft.detach();
signals

// Stop sending servo


servoRight.detach();
}

void loop() // Main loop auto-


repeats
{ // Empty, nothing
needs
}

4. Menjalankan Manuver

Diagram di bawah menunjukkan contoh tentang bagaimana meningkatkan


kecepatan sampai dengan kecepatan penuh. Untuk loop menyatakan sebuah
variabel int bernama “speed”, melakukan perulangan hingga 50 kali ( kelipatan 2
dari 0 hingga 100). Dengan masing-masing pengulangan loop, nilai kecepatan
meningkat 2 satuan karena sintaks + = 2 . Kecepatan robot dipengaruhi variable
“speed” dalam setiap panggilan “writeMicroseconds” setiap kali untuk mengulang
loop. Delay 20 ms pada setiap perulangan akan membuat program mengulangi
di rentang 50 kali per detik. Artinya dibutuhkan 100 kali perulangan program
menambahkan kecepatan dalam 1 detik, dan pada saat itu, kedua servos akan
melaju dengan kecepatan penuh.

Mari kita lihat proses loop pada diagram tersebut

a. Pertama jalan: variable “speed” adalah 0, sehingga kedua panggilan


writeMicroseconds berakhir dengan parameter 1500.

112
b. Perulangan kedua: variable “speed” adalah 2, jadi kita memiliki
servoLeft.writeMicroseconds(1502) dan
servoRight.writeMicroseconds(1498).
c. Perulangan ketiga: variable “speed” adalah 4, jadi kita memiliki
servoLeft.writeMicroseconds(1504) dan
servoRight.writeMicroseconds(1496).

/ Robotics with the BOE Shield - StartAndStopWithRamping


/ Ramp up, go forward, ramp down.

#include <Servo.h> // Include servo


library

Servo servoLeft; // Declare left and


right servos
Servo servoRight;

void setup() // Built-in


initialization block
{
tone(4, 3000, 1000); // Play tone for 1
second
delay(1000); // Delay to finish tone

servoLeft.attach(13); // Attach left signal


to pin 13
servoRight.attach(12); // Attach right signal
to pin 12

for(int speed = 0; speed <= 100; speed += 2 // Ramp up to full


speed.
{
servoLeft.writeMicroseconds(1500+speed); // us =
1500,1502,...1598,1600
servoRight.writeMicroseconds(1500-speed); // us =
1500,1498,...1402,1400
delay(20); // 20 ms at each
speed
}

113
delay(1500);
1.5 seconds

// Full speed for

for(int speed = 100; speed >= 0; speed -= 2) // full speed to


stop
{
servoLeft.writeMicroseconds(1500+speed) // us =
; 1500,1502,...1598,1600
servoRight.writeMicroseconds(1500- // us =
speed); 1500,1498,...1402,1400
delay(20); // 20 ms at each
speed
}

servoLeft.detach(); // Stop sending


servo signals
servoRight.detach();
}

void loop() // Main loop auto-


repeats
{ // Empty, nothing
to repeat
}

114
5. Menyederhanakan navigasi dengan fungsi

Salah satu cara untuk memudahkan untuk menjalankan program manuver


adalah dengan membuat fungsi sub program(). BOE Shield-Bot melakukan
manuver untuk menghindari rintangan dengan mengeksekusi sub program()
manuver tersebut.

Fungsi setup dan loop di dalam bahasa C pada Arduino adalah komponen
utama, tapi Anda dapat menambahkan lebih banyak fungsi untuk melakukan
tugas-tugas tertentu dengan membuat program bagian berupa sub program().
Pembelajaran kali ini memperkenalkan bagaimana menambahkan fungsi sub
program untuk mengeksekusi program menjalan BOE BOT.

/ Robotics with the BOE Shield – SimpleFunctionCall


/ This sketch demonstrates a simple function call.

void setup() {
Serial.begin(9600);

Serial.println("Before example function call.");


delay(1000);

example(); // This is the function


call

Serial.println("After example function call.");


delay(1000);
}

void loop() {
}

void example() // This is the function


{
Serial.println("During example function call.");
delay(1000);
}

115
6. Fungsi Manuver Kustom

Perhatikan aturan-aturan untuk speedLeft dan speedRight di bawah ini. Sub


program maneuver memiliki tiga variabel komponen. void maneuver(int
speedLeft, int speedRight, int msTime), variable speedLeft adalah variable
untuk mengatur laju putaran motor kiri, variable speedRight untuk mengatur laju
putaran motor kanan dan variable msTime untuk mengatur lama waktu program
berjalan. Perhatikan aturan penulisan variable tersebut dibawah ini:

a. Nilai positif untuk mengatur gerak maju robot


b. Nilai negatif untuk mengatur gerak mundur robot
c. 200 untuk kecepatan penuh maju ke depan
d. -200 untuk kecepatan penuh mundur ke belakang
e. 0 untuk berhenti
f. 100 sampai -100 rentang untuk kendali linier merubah kecepatan

Aturan untuk msTime adalah :

a. Nilai positif pada ms untuk menjalankan manuver


b. -1 untuk menonaktifkan sinyal servo

Berikut adalah contoh fungsi untuk maju-mundur-kiri-kanan-berhenti

maneuver(200, 200, 2000); / maju 2 detik


maneuver(-200, 200, 600); / kiri 0.6 detik
maneuver(200, -200, 600); / kanan 0.6 detik
maneuver(-200, -200, / mundur 2 detik
2000); maneuver(0, 0, -1); / Disable servos

/ Robotics with the BOE Shield - TestManeuverFunction


/ Move forward, left, right, then backward with maneuver
function.

#include <Servo.h> // Include servo


library

Servo servoLeft; // Declare left and


right servos

116
Servo servoRight;

void setup() // Built-in


initialization block
{
tone(4, 3000, 1000); // Play tone for 1
second
delay(1000); // Delay to finish
tone

servoLeft.attach(13); // Attach left signal


to pin 13
servoRight.attach(12); // Attach right
signal to pin 12

maneuver(200, 200, 2000); // Forward 2 seconds


maneuver(-200, 200, 600); // Left 0.6 seconds
maneuver(200, -200, 600); // Right 0.6 seconds
maneuver(-200, -200, 2000); // Backward 2 seconds
maneuver(0, 0, -1); // Disable servos
}

void loop() // Main loop auto-


repeats
{ // Empty,
}

void maneuver(int speedLeft, int speedRight, int msTime)


{
/ speedLeft, speedRight ranges: Backward Linear Stop
Linear Forward
// -200 -
100......0......100 200
servoLeft.writeMicroseconds(1500 + // Set Left
speedLeft); servo speed
servoRight.writeMicroseconds(1500 - speedRight); // Set right
servo speed
if(msTime==-1) // if msTime =
-1
{

117
servoLeft.detach();
signals

// Stop servo
servoRight.detach();
}
delay(msTime); // Delay for
msTime
1. Buatlah perintah bagaimana BOE-Shield bot mundur dengan kecepatan
penuh selama 2,5 detik
2. Bagaimana membuat BOE-Shield bot jalan maju, kemudian berputar-putar di
tempat lalu kemudian jalan lurus lagi
3. Setelah dlakukan percobaan, servo memerlukan waktu 1,2 detik untuk belok
memutar 180o. Dengan informasi ini, buatlah BOE-Shield bot dengan
putaran 30o, 45o dan 60o

Anda mungkin juga menyukai