Anda di halaman 1dari 11

Robot Obstacle Arduino

Hiiii… Sahabat Keiro

Tahukah apa itu Robot Obstacle?

Bagi sebagian besar kalangan hobi robot pasti sudah tahu apa itu robot Obstacle. Tapi untuk
sahabat Keiro yang belum tahu, Keiro akan berbagi dalam Project 1st – yaitu Membuat Robot
Obstacle Arduino (Basic) menggunakan Arduino board.

Robot Obstacle adalah robot yang secara otomatis bisa ngeles(“kalau orang jawa bilang”)
atau menghindar kalau ada suatu benda atau penghalang yang menghalangi jalannya robot,
penghalang tersebut bisa berupa dinding, pintu atau benda-benda lain. Dengan adanya
penghalang tersebut secara otomatis robot akan mencari jalan dengan cara berbelok ke kanan,
kekiri ataupun mundur.

Untuk membuat Robot Obstacle dibutuhkan komponen dan alat bantu (tools) seperti dibawah
ini

Komponen

Arduino (Clone): 1bh Prototype Shield: 1bh Arduino Jumper Cables


Micro Servo: 1bh Motor DC dan Roda: 2bh Caster: 1bh

Spacer: lupa hehehe… IC Motor Driver LM293: 1pcs GP2D12 IR Sensor: 1bh

Untuk komponen yang lain dibutuhkan 4buah Capacitor 100pf. Dan untuk Casis Robot
menggunakan Acrylic ukuran 10cmx10cm dengan tebal 3mm sebanyak 3bh, kemudian
dibentuk dengan cara di potong menggunakan gergaji triplek.

Penampakan komponen Robot ketika belum terpasang

Tools
Pengupas kabel Solder Adaptor

alat yang laen gergaji triplek dan pemotong kable. Sorry enggak ada fotonya… hehehe…

Langkah perakitan

Step 1 “Paling Capek”

Membuat casis robot menggunakan bahan acrylic, yaitu dengan cara dimal diatas acrylic
menggunakan spidol waterproof, kemudian dipotong sesui mal yang kita inginkan. Untuk
Robot Obstacle ini Keiro memakai bentuk bujur sangkar berukuran 10cmx10cm dengan tebal
3mm. Untuk sahabat Keiro yang menginginkan dengan bentuk casis yang lain silahkan bebas
berkreasi menggunakan imaginasi, entah mau bentuk robotnya seperti kodok, kadal atau apa,
pokok men bebas… hehehe..

Komponen casis robot sebelum dipasang


Casis Robot setelah dirakit

Step 2 “Enjoy brooo”

Step ke-2 adalah menyusun board Arduino dan Prototype Shied seperti dalam foto dibawah
ini

Arduino, Prototype dan Casis


Prototype terpasang diatas Arduino, WOW... IC apaan tu?..

kemudian mulai memasang kabel jumper di atas prototype, jadinya begini…

Rangkaian kabel jumper... Kaya mie goreng ya, hehehe...

terus motor mini Micro Servo dipasang kemudian GP2D12 IR Sensor dipasang diatasnya…
lihat penampakannya… KUEEERRREEEEN kan.. hehehe..:)
Jangan gembira dulu sahabat Keiro… Robot diatas emang kueren cuman masih bodo…
karena Arduino sebagai mikrokontroler belum diisi program. Lanjut ke step berikutnya yaitu
step pusing…

Step 3 “Pusiiiiing”

Untuk menjalankan robot Obstacle, sahabat Keiro diharuskan membuat program/sketch


menggunakan bahasa pemrograman C yang sudah disederhanakan. Sketch tersebut dibuat
menggunakan software yang dapat didownload disini untuk Window, Mac OS X, Linux32
dan Linux64, setelah sketch selesai diramu, kemudian hasil ramuan di isikan (load) ke dalam
mikrokontroler Arduino dengan cara Robot Obstacle dihubungkan ke komputer melalui USB.
And done…. kalau enggak error hehehe…

view sourceprint?
001.// Compact, a small Obstacle Robot with Arduino
002.// 2 micro motors 100:1 and small wheels,
003.// one micro servo, one Sharp IR sensor,
004.// <a
href="htt://www.blog.kedairobot.com">htt://www.blog.kedairobot.com<;/a>
005.//
006.// Arduino pinout:
007.//
008.// Shield Funct Arduino ATmega328 Arduino Funct Shield
009.// +-----\/----+
010.// Reset 1| PC6 PC5 |28 D19 A5 SCL
011.// Rx D0 2| PD0 PC4 |27 D18 A4 SDA
012.// Tx D1 3| PD1 PC3 |26 D17 A3
013.// Int0 D2 4| PD2 PC2 |25 D16 A2
014.// Int1 D3 5| PD3 PC1 |24 D15 A1
015.// M1B D4 6| PD4 PC0 |23 D14 A0 IR sensor
016.// 7| VCC GND |22
017.// 8| GND AREF |21
018.// Xtal 9| PB6 AVCC |20
019.// Xtal 10| PB7 PB5 |19 D13 SCK LED
020.// M1A OC0B D5 11| PD5 PB4 |18 D12 MISO Pan servo
021.// M2A OC0A D6 12| PD6 PB3 |17 D11 OC2A MOSI
022.// M2B D7 13| PD7 PB2 |16 D10 OC1B
023.// D8 14| PB0 PB1 |15 D 9 OC1A
024.// +-----------+
025.//
026.
027.#include <Servo.h>
028.
029.//Inputs/outputs
030.#define Motor_1_PWM 3 // digital pin 5 // Right Motor
031.#define Motor_1_Dir 4 // digital pin 4
032.#define Motor_2_PWM 5 // digital pin 6 // Left Motor
033.#define Motor_2_Dir 6 // digital pin 7
034.
035.#define IR_Pin 14 // digital pin 14 (analog pin 0)
036.#define PanPin 12
037.#define LedPin 13
038.
039.#define SR 1 //Sharp Short Range sensor
040.#define MR 2 //Sharp Medium Range sensor
041.#define LR 3 //Sharp Long Range sensor
042.
043.#define center 90
044.
045.//Variables
046.byte dir=0;
047.byte speed1=250; //250
048.byte speed2=255; //255
049.int turn90=600; //110
050.int turn45=300; //55
051.int straight=500;
052.int stopTime=200;
053.int IRdistance=0;
054.int treshold=20; //20cm min distance
055.
056.Servo Pan;
057.
058.//---------------------------------------------------------------------
--------
059.
060.void <strong>setup</strong>() {
061.// set motor pins as output and LOW so the motors are breaked
062.pinMode(Motor_1_PWM, OUTPUT);
063.pinMode(Motor_1_Dir, OUTPUT);
064.pinMode(Motor_2_PWM, OUTPUT);
065.pinMode(Motor_2_Dir, OUTPUT);
066.Stop();
067.
068.Pan.attach(PanPin);
069.Pan.write(center); //90
070.StepDelay();
071.
072.pinMode(LedPin, OUTPUT);
073.digitalWrite(LedPin, LOW);
074.
075.<strong>Serial</strong>.begin (19200);
076.<strong>Serial</strong>.println("start");
077.
078.Forward();
079.}
080.
081.void <strong>loop</strong>(){
082.Drive();
083.//square(); //use this function to adjust the timings for turns
084.//and to make sure the robot is driving in straight lines
085.}
086.
087.void square(){
088.Forward();
089.delay(straight);
090.Stop();
091.delay(stopTime);
092.Right();
093.delay(turn90);
094.Stop();
095.delay(stopTime);
096.Forward();
097.delay(straight);
098.Stop();
099.delay(stopTime);
100.Right();
101.delay(turn90);
102.Stop();
103.delay(stopTime);
104.Forward();
105.delay(straight);
106.Stop();
107.delay(stopTime);
108.Right();
109.delay(turn90);
110.Stop();
111.delay(stopTime);
112.Forward();
113.delay(straight);
114.Stop();
115.delay(stopTime);
116.Right();
117.delay(turn90);
118.Stop();
119.delay(stopTime);
120.}
121.
122.//--------------------------
123.
124.void Drive(){
125.IRdistance=Read_Sharp_Sensor(MR, IR_Pin);
126.<strong>Serial</strong>.print("IRdistance ");
127.<strong>Serial</strong>.println(IRdistance);
128.if (IRdistance<10){
129.Stop();
130.StepDelay();
131.TurnAround();
132.}
133.if (IRdistance<treshold){
134.Stop();
135.StepDelay();
136.Avoid();
137.Forward();
138.}
139.delay(50);
140.}
141.
142.void TurnAround(){
143.Reverse();
144.Pan.write(center);
145.StepDelay();
146.Stop();
147.Left();
148.delay(turn90);
149.delay(turn90);
150.Stop();
151.StepDelay();
152.Forward();
153.}
154.
155.void Avoid(){
156.int prev=0;
157.dir=2;
158.for (byte i=0; i<5; i++){
159.Pan.write(i*45);
160.StepDelay();
161.StepDelay();
162.IRdistance=Read_Sharp_Sensor(MR, IR_Pin);
163.if (IRdistance>prev){
164.dir=i;
165.prev=IRdistance;
166.}
167.}
168.Pan.write(center);
169.StepDelay();
170.switch (dir){
171.case 0:
172.Right();
173.delay(turn90);
174.Stop();
175.StepDelay();
176.break;
177.case 1:
178.Right();
179.delay(turn90); //turn45
180.Stop();
181.StepDelay();
182.break;
183.case 2:
184.Forward();
185.break;
186.case 3:
187.Left();
188.delay(turn90); //turn45
189.Stop();
190.StepDelay();
191.break;
192.case 4:
193.Left();
194.delay(turn90);
195.Stop();
196.StepDelay();
197.break;
198.}
199.delay(500);
200.}
201.
202.// Read Sensors
203.
204.int Read_Sharp_Sensor(byte model, byte pin) {
205.int value = 0;
206.value = analogRead(pin);
207.switch (model) {
208.case SR: //short range, aka GP2D120 (4-30cm)
209.return (2914/(value+5))-1;
210.break;
211.case MR: //medium range, aka GP2D12 (10-80cm)
212.return 5*1384.4*pow(value,-.9988); //I had to multiply by 5, different
sensor
213.break;
214.case LR: //long range, aka GP2Y0A02YK (20-150cm)
215.return 11441*pow(value,-.9792);
216.break;
217.}
218.}
219.
220.void StepDelay() {
221.for (byte t=0; t<10; t++){
222.delay(20);
223.}
224.}
225.
226.//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++
227.
228.void Forward(){
229.digitalWrite(Motor_1_Dir, LOW); // forward
230.digitalWrite(Motor_2_Dir, LOW); // forward
231.analogWrite(Motor_1_PWM, speed1); //
232.analogWrite(Motor_2_PWM, speed2); //
233.return;
234.}
235.
236.void Reverse(){
237.digitalWrite(Motor_1_Dir, HIGH); // reverse
238.digitalWrite(Motor_2_Dir, HIGH); // reverse
239.analogWrite(Motor_1_PWM, 255-speed1); //
240.analogWrite(Motor_2_PWM, 255-speed2); //
241.return;
242.}
243.
244.void Right(){
245.digitalWrite(Motor_1_Dir, HIGH); // reverse
246.digitalWrite(Motor_2_Dir, LOW); // forward
247.analogWrite(Motor_1_PWM, 255-speed1); //
248.analogWrite(Motor_2_PWM, speed2); //
249.return;
250.}
251.
252.void Left(){
253.digitalWrite(Motor_1_Dir, LOW); // forward
254.digitalWrite(Motor_2_Dir, HIGH); // reverse
255.analogWrite(Motor_1_PWM, speed1); //
256.analogWrite(Motor_2_PWM, 255-speed2); //
257.return;
258.}
259.
260.void Stop()
261.{
262.digitalWrite(Motor_1_PWM, LOW);
263.digitalWrite(Motor_1_Dir, LOW);
264.digitalWrite(Motor_2_PWM, LOW);
265.digitalWrite(Motor_2_Dir, LOW);
266.return;
267.}

WOooooo puanjang amat yaaaaa….. Capek deh

Step 4 “Paling demen nih”

Upload Video…. To be continued… hehehe… capek…


Salam Robotik Indonesia Jaya…

Kata kunci untuk artikel ini:

 membuat robot dengan arduino


 komponen robot
 arduino project
 membuat robot arduino
 membuat arduino
 cara membuat robot dengan arduino
 hobi robot
 cara menggunakan arduino uno
 cara membuat robot bagi pemula
 buku belajar arduino

Anda mungkin juga menyukai