Project 2nd – Kendali Servo Via Ethernet WIFI

Kendali Servo Via Ethernet WIFI

Hi… Sobat KeiRo penggemar Arduino…
ketemu lagi kita

Pernahkan Sobat ngebayangin bisa ngendaliin robot via internet… nah untuk Project yang 2nd..

Keiro akan berbagi kepada sobat pencinta Arduino… bagaimana caranya ngendaliin servo via WIFI menggunakan DFRduino Ethernet Shield dan browse Firefox atau yg lain yang. Pembahasan kali ini dapat dijadikan atau dikembangkan sebagai dasar untuk pengendalian robot via intranet atau internet…

WOW kayaknya menarik deh…

Ok enggak usah lama2 sudah enggak sabar nih… mari kita mulai…

Pertama yang kelengkapan yang perlu disiapin adalah seperti penampakan foto di bawah ini:

Kendail Arduino Via Ethernet WIFI
Komponen yang dipakai

Komponen yang digunakan dapat di lihat di kedarobot.com

Arduino (Clone)
Arduino: 1bh
DFRduino Ethernet Shield
Ethernet Shield
Arduino Jumper Cables
Arduino Jumper Cables
Arduino Jumper Cables
Micro Servo 2 bh
Prototyping Shield
Prototyping Shield: 1bh

1bh kabel UTP

loh WIFI Shielnya mana… hehehe…
Emang enggak ada Sobat Keiro… Keiro coba siasati pake AP dari Prolink di set ke client AP (WIFI produk Prolink Model WNR1004… karena WIFI shield utuk Arduino mahal jhe… “Oooooo… begitu tho”
Alasan Keiro menggunakan model tersebut karena bentuk dan ukurannya kecil(seukuran Arduino), dengan daya 3.3Volt/1.5A (Wow tinggal colok di Arduino dong) dan sudah draft-N lho… dan satu lagi harganya lebih murah dan masih dapat dimanfaatkan untuk yang lain… CMIIW..

Ok… lanjut…

Skenario kayak gini…

Keiro buat skenario seperti ini

Browse HTML –>Laptop<–WIFI Router/Acces Point–>Prolink WIFI–>Ethernet Shield–>Arduino–>Prototype–>Servo

Pertama Setting Jaringan

Setting IP address adan Gateway (bebas atau sesuaikan dengan jaringan Ethernet yang Sobat punya)

misalnya:

Wifi Router
IP : 192.168.1.1;  Gateway : 192.168.1.1;  Subnet : 255.255.255.0
 
Laptop di set atau desktop
IP : 192.168.1.2;  Gateway : 192.168.1.1;  Subnet : 255.255.255.0
 
Prolink WIFI atau client AP
IP : 192.168.1.3;  Gateway : 192.168.1.1;  Subnet : 255.255.255.0
 
Ethernet Shield
IP : 192.168.1.110;  Gateway : 192.168.1.1;  Subnet : 255.255.255.0

Ke-dua

Copas kode HTML ke Notepad, edit IP sesuaikan dengan setting jaringan intranet Sobat Keiro, kemudian save as dengan ekstensen file *.html dengan penamaan file bebas/terserah Sobat.
Copas juga kode sket arduino ke Arduino IDE (ver 019 keatas). Sebelum di Upload ke Arduino Board, dicek pengkablena dan kemudian diverifikasi terlebih dahulu dengan cara click verifikasi di menu Arduino IDE. Jika semuanya sudah beres jalankan upload.

Ke-tiga

Buka code HTML yang Sobat buat menggunakan browse internet…

Lebih jelasnya lihat di Video dibawah

Kode Sketch

//zoomkat 10-22-10
//routerbot code
//for use with Arduino IDE 0021
//open serial monitor to see what the arduino receives
//http://www.lynxmotion.net/viewtopic.php?f=20&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;t=6343&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;sid=09a5d8aced0d27367afd6cab542532fe&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;start=15
//

#include
#include
#include

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 110 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
Server server(84); //server port

String readString, servo1, servo2;

Servo myservo1; // create servo object to control a servo
Servo myservo2;
//////////////////////

void setup(){

//start Ethernet
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();

//enable serial data print
Serial.begin(9600);
myservo1.attach(7);
myservo2.attach(6);
Serial.println("bot1"); // so I can keep track of what is loaded
}

void loop(){
// Create a client connection
Client client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();

//read char by char HTTP request
if (readString.length() 0) {
Serial.println(readString);

servo1 = readString.substring(7, 11);
servo2 = readString.substring(12, 16);

Serial.println(servo1);
Serial.println(servo2);

int n1;
int n2;

char carray1[6];
servo1.toCharArray(carray1, sizeof(carray1));
n1 = atoi(carray1);

char carray2[6];
servo2.toCharArray(carray2, sizeof(carray2));
n2 = atoi(carray2);

myservo1.writeMicroseconds(n1);
myservo2.writeMicroseconds(n2);

//myservo.write(n);
readString="";
}
///////////////////

//now output HTML data header
client.println("HTTP/1.1 204 Zoomkat");
client.println();
client.println();
delay(1);
//stopping client
client.stop();

/////////////////////
//clearing string for next read
readString="";

}}}}}

Selalu pastikan rangkaian dibreadbord dan sketch sudah dicek dengan seksama, sebelum Arduino board dihubungkan ke komputer. Kalau sudah dicek dan dipastikan oke, segera hubungkan dan upload sketch ke Arduino Board… and done..!

Kode HTML

Zoomkat's Routerbot Control Page
Foward-*Stop*-Reverse
<a href="http://192.168.1.110:84/?-1000-2000" target="inlineframe">F-F</a>|
<a href="http://192.168.1.110:84/?-1450-1550" target="inlineframe">S-F</a>|
<a href="http://192.168.1.110:84/?-1500-1500" target="inlineframe">*-Stop-*</a>|
<a href="http://192.168.1.110:84/?-1550-1450" target="inlineframe">S-R</a>|
<a href="http://192.168.1.110:84/?-2000-1000" target="inlineframe">F-R</a>|

Turn-L-*Stop*-Turn-R

<a href="http://192.168.1.110:84/?-1000-1000" target="inlineframe">F-L</a>|
<a href="http://192.168.1.110:84/?-1450-1450" target="inlineframe">S-L</a>|
<a href="http://192.168.1.110:84/?-1500-1500" target="inlineframe">*-Stop-*</a>|
<a href="http://192.168.1.110:84/?-1550-1550" target="inlineframe">S-R</a>|
<a href="http://192.168.1.110:84/?-2000-2000" target="inlineframe">F-R</a>|

Atau bisa langsung dikontrol dari sini

Ket: IP Arduino Shiled di 192.168.1.110

Zoomkat’s Routerbot Web Control Page

Foward-*Stop*-Reverse
F-F|
S-F|
*-Stop-*|
S-R|
F-R|

Turn-L-*Stop*-Turn-R
F-L|
S-L|
*-Stop-*|
S-R|
F-R|

 

Video

 

Artikel Keiro ambil dari Forum www.lynxmotion.net

Selamat mencoba dan bereksplorasi….

Advertisements
Project 2nd – Kendali Servo Via Ethernet WIFI

Project 1st – Membuat Robot Obstacle Arduino

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)
Arduino (Clone): 1bh
Prototype Shield
Prototype Shield: 1bh
Arduino Jumper Cables
Arduino Jumper Cables
Micro Servo
Micro Servo: 1bh
Motor DC dan Roda
Motor DC dan Roda: 2bh
Caster
Caster: 1bh
Spacer
Spacer: lupa hehehe…
IC Motor Driver LM293
IC Motor Driver LM293: 1pcs
GP2D12 IR Sensor
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
Pengupas kabel
Solder
Solder
Adaptor
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…

// Compact, a small Obstacle Robot with Arduino
// 2 micro motors 100:1 and small wheels,
// one micro servo, one Sharp IR sensor,
// <a href="//www.blog.kedairobot.com">htt://www.blog.kedairobot.com</a>
//
// Arduino pinout:
//
// Shield Funct Arduino ATmega328 Arduino Funct Shield
// +-----/----+
// Reset 1| PC6 PC5 |28 D19 A5 SCL
// Rx D0 2| PD0 PC4 |27 D18 A4 SDA
// Tx D1 3| PD1 PC3 |26 D17 A3
// Int0 D2 4| PD2 PC2 |25 D16 A2
// Int1 D3 5| PD3 PC1 |24 D15 A1
// M1B D4 6| PD4 PC0 |23 D14 A0 IR sensor
// 7| VCC GND |22
// 8| GND AREF |21
// Xtal 9| PB6 AVCC |20
// Xtal 10| PB7 PB5 |19 D13 SCK LED
// M1A OC0B D5 11| PD5 PB4 |18 D12 MISO Pan servo
// M2A OC0A D6 12| PD6 PB3 |17 D11 OC2A MOSI
// M2B D7 13| PD7 PB2 |16 D10 OC1B
// D8 14| PB0 PB1 |15 D 9 OC1A
// +-----------+
//

#include 

//Inputs/outputs
#define Motor_1_PWM 5 // digital pin 5 // Right Motor
#define Motor_1_Dir 4 // digital pin 4
#define Motor_2_PWM 6 // digital pin 6 // Left Motor
#define Motor_2_Dir 7 // digital pin 7

#define IR_Pin 14 // digital pin 14 (analog pin 0)
#define PanPin 12
#define LedPin 13

#define SR 1 //Sharp Short Range sensor
#define MR 2 //Sharp Medium Range sensor
#define LR 3 //Sharp Long Range sensor

#define center 90

//Variables
byte dir=0;
byte speed1=250; //250
byte speed2=255; //255
int turn90=600; //110
int turn45=300; //55
int straight=500;
int stopTime=200;
int IRdistance=0;
int treshold=20; //20cm min distance

Servo Pan;

//-----------------------------------------------------------------------------

void <strong>setup</strong>() {
// set motor pins as output and LOW so the motors are breaked
pinMode(Motor_1_PWM, OUTPUT);
pinMode(Motor_1_Dir, OUTPUT);
pinMode(Motor_2_PWM, OUTPUT);
pinMode(Motor_2_Dir, OUTPUT);
Stop();

Pan.attach(PanPin);
Pan.write(center); //90
StepDelay();

pinMode(LedPin, OUTPUT);
digitalWrite(LedPin, LOW);

<strong>Serial</strong>.begin (19200);
<strong>Serial</strong>.println("start");

Forward();
}

void <strong>loop</strong>(){
Drive();
//square(); //use this function to adjust the timings for turns
//and to make sure the robot is driving in straight lines
}

void square(){
Forward();
delay(straight);
Stop();
delay(stopTime);
Right();
delay(turn90);
Stop();
delay(stopTime);
Forward();
delay(straight);
Stop();
delay(stopTime);
Right();
delay(turn90);
Stop();
delay(stopTime);
Forward();
delay(straight);
Stop();
delay(stopTime);
Right();
delay(turn90);
Stop();
delay(stopTime);
Forward();
delay(straight);
Stop();
delay(stopTime);
Right();
delay(turn90);
Stop();
delay(stopTime);
}

//--------------------------

void Drive(){
IRdistance=Read_Sharp_Sensor(MR, IR_Pin);
<strong>Serial</strong>.print("IRdistance ");
<strong>Serial</strong>.println(IRdistance);
if (IRdistance&lt;10){
Stop();
StepDelay();
TurnAround();
}
if (IRdistance&lt;treshold){
Stop();
StepDelay();
Avoid();
Forward();
}
delay(50);
}

void TurnAround(){
Reverse();
Pan.write(center);
StepDelay();
Stop();
Left();
delay(turn90);
delay(turn90);
Stop();
StepDelay();
Forward();
}

void Avoid(){
int prev=0;
dir=2;
for (byte i=0; iprev){
dir=i;
prev=IRdistance;
}
}
Pan.write(center);
StepDelay();
switch (dir){
case 0:
Right();
delay(turn90);
Stop();
StepDelay();
break;
case 1:
Right();
delay(turn90); //turn45
Stop();
StepDelay();
break;
case 2:
Forward();
break;
case 3:
Left();
delay(turn90); //turn45
Stop();
StepDelay();
break;
case 4:
Left();
delay(turn90);
Stop();
StepDelay();
break;
}
delay(500);
}

// Read Sensors

int Read_Sharp_Sensor(byte model, byte pin) {
int value = 0;
value = analogRead(pin);
switch (model) {
case SR: //short range, aka GP2D120 (4-30cm)
return (2914/(value+5))-1;
break;
case MR: //medium range, aka GP2D12 (10-80cm)
return 5*1384.4*pow(value,-.9988); //I had to multiply by 5, different sensor
break;
case LR: //long range, aka GP2Y0A02YK (20-150cm)
return 11441*pow(value,-.9792);
break;
}
}

void StepDelay() {
for (byte t=0; t&lt;10; t++){
delay(20);
}
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

void Forward(){
digitalWrite(Motor_1_Dir, LOW); // forward
digitalWrite(Motor_2_Dir, LOW); // forward
analogWrite(Motor_1_PWM, speed1); //
analogWrite(Motor_2_PWM, speed2); //
return;
}

void Reverse(){
digitalWrite(Motor_1_Dir, HIGH); // reverse
digitalWrite(Motor_2_Dir, HIGH); // reverse
analogWrite(Motor_1_PWM, 255-speed1); //
analogWrite(Motor_2_PWM, 255-speed2); //
return;
}

void Right(){
digitalWrite(Motor_1_Dir, HIGH); // reverse
digitalWrite(Motor_2_Dir, LOW); // forward
analogWrite(Motor_1_PWM, 255-speed1); //
analogWrite(Motor_2_PWM, speed2); //
return;
}

void Left(){
digitalWrite(Motor_1_Dir, LOW); // forward
digitalWrite(Motor_2_Dir, HIGH); // reverse
analogWrite(Motor_1_PWM, speed1); //
analogWrite(Motor_2_PWM, 255-speed2); //
return;
}

void Stop()
{
digitalWrite(Motor_1_PWM, LOW);
digitalWrite(Motor_1_Dir, LOW);
digitalWrite(Motor_2_PWM, LOW);
digitalWrite(Motor_2_Dir, LOW);
return;
}

WOooooo puanjang amat yaaaaa….. Capek deh

Step 4 “Paling demen nih”

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

Salam Robotik Indonesia Jaya…

 

 

Project 1st – Membuat Robot Obstacle Arduino