Introduction: Arduino HC-SR04 Ultrasonic Rover
Simple Arduno Rover with HC-SR04 Ultrasonic sensor.
Step 1:
YOU will need to build this:
HC-SR04 Ultrasonic sensor
Battery holder for 6 AA batteries
6 AA batteries
Arduino UNO (I use UNO R2)
Motor Shield for Arduino (L293)
9g Servo
2 gear motors with wheels
CD box
4 male-to-male cables
4 female-to-female cables
few cable ties
I buy all components for this rover on ebay.
First you will need 2pcs Plastic Tire Wheel + DC 6V Gear Motor 48:1.
I solder 2 male-to-male cables and 104 capacitors.
I used slim CD box as a chassis, I made 2 holes on each side of CD box and then fixed gear motors with cable tie.
Step 2:
You can see all the components you need on this photo.
- HC-SR04 Ultrasonic sensor
- Battery holder for 6 AA batteries
- 6 AA batteries
- Arduino UNO (I use UNO R2)
Motor Shield for Arduino (L293)
- 9g Servo
- 2 gear motors with wheels on CD box chassis.
- 4 male-to-male cables
- 4 female-to-female cables
- few cable ties
Step 3:
Сonnection scheme is very easy.
- Connect 9g servo to SERVO_2 pins on motorshield
- Left motor to M4
- Right motor to M1
- Echo - pin A4
- Trig - pin A5
- Vcc - pin +5 ; Gnd - Gnd
I fix servo on battery box with cable tie
Step 4:
Final result and video.
Faster version without servo http://youtu.be/hBHpOV5TOY8
Step 5:
Put AFMotor.h and AFMotor.cpp to folder AFMotor in libraries folder Aduino.

Participated in the
Full Spectrum Laser Contest

Participated in the
123D Circuits Contest
66 Comments
Question 2 years ago
hallo,thanks a lot for the article it really helped me.,but i have a different situation here .i have a nodemcu ESP8266 and BMT DUAL DC MOTOR SHIELD L298P.Iam builting a rc car with 1 motor for the rear wheels forward and reverse and 1 servor to control the steering..the motor driver shield i have is compatible with Arduino uno,i am finding difficulties in connecting it to nodemcu.
any help i will appreciate
thank you.
Question 3 years ago
Can I use a L298N control,if I can please put the code in the comments .
thanks.
👍👍
4 years ago
no sirve tu mierda hijo de puta
6 years ago
hello I have made it but it couldn't work. when I operate it the servo once starts and then stops
Reply 5 years ago
it only means that you did not follow all the direction carefully...
6 years ago
I make the connections correctly but still it goes crazy, the servant stays looking to one side and goes forward and back without stopping other times it seems to work well but then it goes back malfunctioning.
6 years ago
Hi, i've seen the codes guy's i need a code of ultrasonic sensor to stop the object on which it's implemented after sensing the obstacle can anyone help?
9 years ago on Introduction
I checked the code it will not compile :(
Reply 9 years ago on Introduction
Ок, I uploaded correct version of the code. It works. Try it.
Reply 6 years ago
where is the code
Reply 9 years ago on Introduction
Okay looks good it compiles okay. I will let you know how it turns out. I am waiting for another HC-SR04. You might want to mention they will need to install the NewPing library. You can find it here --> http://forum.arduino.cc/index.php?topic=106043.0
Thanks for sharing !
6 years ago
Hi,
Can i have circuit diagram for this project?
Thanks
7 years ago
Hi,
The Ultrasonic sensor doesn't work for me when I connect it to pins A4,A5 in the MotorShield board. Can anyone explain me how does it make sense to use them, if they are "Analog In" pins, wheras the UltraSonic sensor requires "Digital In" & "Digital Out" pins ?!
Reply 6 years ago
pinMode(pinTrig, OUTPUT);
pinMode(pinEcho, INPUT);
thise for configuration
-----
digitalWrite(pinTrig, LOW);
digitalWrite(pinTrig, HIGH);
digitalWrite(pinTrig, LOW);
duration=pulseIn(pinEcho,HIGH);
distance=(duration/2)*Vson;
Serial.print(distance);
Serial.println("cm");
and this on for mesur distance (#define Vson 0.034 // cm/us)
6 years ago
i tried this but my bot keeps circling. i didnt change the code and followed each and every instruction properly. please help
6 years ago
hey pleasee help earliest mine isnt working it just keeps on rotating i have to submit it by tommorrow help help help
i have
arduino ide 1.6.9
arduino uno rev3
afmotorsheild is same using 12v and 1ah
hcsro4
heeellllp
6 years ago
well done
7 years ago
please van you send me a code without the sensor ?
7 years ago
Hi. Great job! I will try it. Would it work with Hg7881 HG7881CP? I already boutht it
8 years ago on Introduction
a
Hi guys, I would like to ask on how to stabilize my ultrasonic sensor mounted in a servo motor. It is because everytime an "Out of Range" displays in the serial monitor it gives current to the servo motor causing it to sweep. The possibility of sweeping the servo left or right only is when there is an object being detected. BTW, the ultrasonic sensor is mounted above the servo mtor.
Here is my code://
#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10
#include <Servo.h>
int pos = 0; // variable to store the servo position
int defPOS = 0;
Servo myservo;
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
myservo.attach(9);
myservo.write(0);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin, HIGH);
// delayMicroseconds(1000); - Removed this line
delayMicroseconds(10); // Added this line
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
//0 Left
//1 Center
//2 Right
int buttonState1 = digitalRead(led); //red
int buttonState2 = digitalRead(led2); //green
if( (buttonState1 == 0 && buttonState2 == 1) && (defPOS != 1))
{
delay(2000);
if(defPOS == 2)
{
for(pos = 0; pos <= 90; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(2); // waits 15ms for the servo to reach the position
}
}
else if(defPOS == 0)
{
for(pos = 0; pos <= 90; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(2); // waits 15ms for the servo to reach the position
}
}
defPOS = 1;
}
if (distance < 30) { // This is where the LED On/Off happens
digitalWrite(led,HIGH); // When the Red condition is met, the Green LED should turn off
digitalWrite(led2,LOW);
if(defPOS == 0)
{
for(pos = 90; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(2); // waits 15ms for the servo to reach the position
}
defPOS = 2;
}
else if(defPOS == 2)
{
for(pos = 0; pos <= 90; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(2); // waits 15ms for the servo to reach the position
}
defPOS = 1;
}
else if(defPOS == 1)
{
for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(2); // waits 15ms for the servo to reach the position
}
defPOS = 0;
}
//myservo.write(180);
// delay(1000);
//myservo.write(0);
}
else {
digitalWrite(led,LOW);
digitalWrite(led2,HIGH);
}
if (distance >= 400 || distance <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distance);
Serial.println(" cm");
}
delay(500);
}