IMKONTROL.COM- Robot Ultrasonic ini dapat berjalan dengan bebas tanpa pengawasan atau kontrol dari manusia secara manual. Robot Ultrasonic ini menggunakan Sensor ultrasonik yang akan mendeteksi benda di depannya. Robot Ultrasonic menggunakan Arduino sebagai mikrokontroler sehingga Anda dapat menyesuaikan robot Anda berfungsi untuk perintah spesifik Anda. Menyediakan jam menyenangkan untuk pemula atau robotician menengah.Alat dan Bahan yang dibutuhkan :
- 1x Arduino
- 1x Motor Servo
- 1x Motor Shield
- 2x Motor DC / Motor Gearbox
- 2x Roda (Bila diperlukan)
- Kabel jumper secukupnya
Konfigurasi PIN :
- Motor DC Kanan dihubungkan ke M2
- Motor DC Kiri dihubungkan Ke M3
- Pin Trig pada Sensor Ultrasonik Dihubungkan ke pin 13
- Pin Echo pada Sensor Ultrasonik Dihubungkan ke pin 11
- Pin PWM Servo Dihubungkan ke pin 7
Baca Juga Mengontrol 2 Motor DC Menggunakan HP Android
#include <AFMotor.h>
#include <Servo.h>
#define trigPin 13
#define echoPin 11
AF_DCMotor motor2(2,MOTOR12_8KHZ);
AF_DCMotor motor3(3, MOTOR34_8KHZ);
Servo myservo;
void setup() {
Serial.begin (9600);
myservo.attach(7);
Serial.begin(9600);
Serial.println("Motor test!");
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
motor2.setSpeed(255);
motor3.setSpeed (225);
}
void sweepServo(){
myservo.write(180);
delay(200);
myservo.write(90);
delay(100);
myservo.write(90);
delay(100);
myservo.write(1);
delay(100);
myservo.write(1);
delay(100);
myservo.write(90);
delay(100);
myservo.write(90);
delay(100);
myservo.write(180);
delay(100);
myservo.write(180);
delay(100);
myservo.write(90);
delay(1000);
}
void loop() {
sweepServo();
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 25) {
Serial.println ("Close Obstacle detected!" );
Serial.println ("Obstacle Details:");
Serial.print ("Distance From Robot is " );
Serial.print ( distance);
Serial.print ( " CM!");
Serial.println (" The obstacle is declared a threat due to close distance. ");
Serial.println (" Turning !");
motor2.run(FORWARD);
motor3.run (BACKWARD);
}
else {
Serial.println ("No obstacle detected. going forward");
delay (15);
motor2.run(FORWARD);
motor3.run(FORWARD);
}
}
Libraries :
AFMotor[embed width="" height=""]https://www.youtube.com/watch?v=6ruf4tQKUiw[/embed]
REVISI

Coding
#include <AFMotor.h>
#include <Servo.h>
#include <NewPing.h>
#define TRIG_PIN A4 //A4
#define ECHO_PIN A5 //A5
#define MAX_DISTANCE_POSSIBLE 1000
#define MAX_SPEED 150 //
#define MOTORS_CALIBRATION_OFFSET 3
#define COLL_DIST 20
#define TURN_DIST COLL_DIST+10
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE_POSSIBLE);
AF_DCMotor leftMotor(4, MOTOR12_8KHZ);
AF_DCMotor rightMotor(3, MOTOR12_8KHZ);
Servo neckControllerServoMotor;
int pos = 0;
int maxDist = 0;
int maxAngle = 0;
int maxRight = 0;
int maxLeft = 0;
int maxFront = 0;
int course = 0;
int curDist = 0;
String motorSet = "";
int speedSet = 0;
void setup() {
neckControllerServoMotor.attach(10);
neckControllerServoMotor.write(90);
delay(2000);
checkPath();
motorSet = "FORWARD";
neckControllerServoMotor.write(90);
moveForward();
}
void loop() {
checkForward();
checkPath();
}
void checkPath() {
int curLeft = 0;
int curFront = 0;
int curRight = 0;
int curDist = 0;
neckControllerServoMotor.write(144);
delay(120);
for(pos = 144; pos >= 36; pos-=18)
{
neckControllerServoMotor.write(pos);
delay(90);
checkForward();
curDist = readPing();
if (curDist < COLL_DIST) {
checkCourse();
break;
}
if (curDist < TURN_DIST) {
changePath();
}
if (curDist > curDist) {maxAngle = pos;}
if (pos > 90 && curDist > curLeft) { curLeft = curDist;}
if (pos == 90 && curDist > curFront) {curFront = curDist;}
if (pos < 90 && curDist > curRight) {curRight = curDist;}
}
maxLeft = curLeft;
maxRight = curRight;
maxFront = curFront;
}
void setCourse() {
if (maxAngle < 90) {turnRight();}
if (maxAngle > 90) {turnLeft();}
maxLeft = 0;
maxRight = 0;
maxFront = 0;
}
void checkCourse() {
moveBackward();
delay(500);
moveStop();
setCourse();
}
void changePath() {
if (pos < 90) {lookLeft();}
if (pos > 90) {lookRight();}
}
int readPing() {
delay(70);
unsigned int uS = sonar.ping();
int cm = uS/US_ROUNDTRIP_CM;
return cm;
}
void checkForward() { if (motorSet=="FORWARD") {leftMotor.run(FORWARD); rightMotor.run(FORWARD); } }
void checkBackward() { if (motorSet=="BACKWARD") {leftMotor.run(BACKWARD); rightMotor.run(BACKWARD); } }
void moveStop() {leftMotor.run(RELEASE); rightMotor.run(RELEASE);}
void moveForward() {
motorSet = "FORWARD";
leftMotor.run(FORWARD);
rightMotor.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)
{
leftMotor.setSpeed(speedSet+MOTORS_CALIBRATION_OFFSET);
rightMotor.setSpeed(speedSet);
delay(5);
}
}
void moveBackward() {
motorSet = "BACKWARD";
leftMotor.run(BACKWARD);
rightMotor.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)
{
leftMotor.setSpeed(speedSet+MOTORS_CALIBRATION_OFFSET);
rightMotor.setSpeed(speedSet);
delay(5);
}
}
void turnRight() {
motorSet = "RIGHT";
leftMotor.run(FORWARD);
rightMotor.run(BACKWARD);
delay(400);
motorSet = "FORWARD";
leftMotor.run(FORWARD);
rightMotor.run(FORWARD);
}
void turnLeft() {
motorSet = "LEFT";
leftMotor.run(BACKWARD);
rightMotor.run(FORWARD);
delay(400);
motorSet = "FORWARD";
leftMotor.run(FORWARD);
rightMotor.run(FORWARD);
}
void lookRight() {rightMotor.run(BACKWARD); delay(400); rightMotor.run(FORWARD);}
void lookLeft() {leftMotor.run(BACKWARD); delay(400); leftMotor.run(FORWARD);}
Libraries :
AFMotor dan
NewPing[embed width="" height=""]https://www.youtube.com/watch?v=jQwYBc7YBXs[/embed]