Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Complete Guide For Ultrasonic Sensor HC-SR04 With Arduino: Description

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Complete

Guide for Ultrasonic Sensor


HC-SR04 with Arduino
This article is a guide about the popular Ultrasonic Sensor HC – SR04. We’ll
explain how it works, show you some of its features and share an Arduino
project example you can follow to integrate in your projects. We provide a
schematic diagram on how to wire the ultrasonic sensor, and an example
sketch to use with the Arduino.

Description
The HC-SR04 ultrasonic sensor uses sonar to determine distance to an object
like bats do. It offers excellent non-contact range detection with high accuracy
and stable readings in an easy-to-use package. It comes complete with
ultrasonic transmitter and receiver modules.

Features
Here’s a list of some of the HC-SR04 ultrasonic sensor features and specs:
§ Power Supply :+5V DC
§ Quiescent Current : <2mA
§ Working Current: 15mA
§ Effectual Angle: <15°
§ Ranging Distance : 2cm – 400 cm/1″ – 13ft
§ Resolution : 0.3 cm
§ Measuring Angle: 30 degree
§ Trigger Input Pulse width: 10uS
§ Dimension: 45mm x 20mm x 15mm

How Does it Work?


The ultrasonic sensor uses sonar to determine the distance to an object.
Here’s what happens:

1. The transmitter (trig pin) sends a signal: a high-frequency sound.


2. When the signal finds an object, it is reflected and…
3. … the transmitter (echo pin) receives it.
The time between the transmission and reception of the signal allows us to
calculate the distance to an object. This is possible because we know the
sound’s velocity in the air.

HC-SR04 Ultrasonic Sensor Pinout

Pins
§ VCC: +5VDC
§ Trig : Trigger (INPUT)
§ Echo: Echo (OUTPUT)
§ GND: GND

Where to buy?
You can check the Ultrasonic Sensor HC-SR04 sensor on Maker Advisor to
find the best price.
Arduino with HC – SR04 Sensor
This sensor is very popular among the Arduino tinkerers. So, here we provide
an example on how to use the HC-SR04 ultrasonic sensor with the Arduino. In
this project the ultrasonic sensor reads and writes the distance to an object in
the serial monitor.

The goal of this project is to help you understand how this sensor works.
Then, you should be able to use this example in your own projects.

Note: There’s an Arduino library called NewPing that can make your life
easier when using this sensor.

Parts Required
Here’s a list of the parts required to follow the next tutorial:

§ Arduino UNO – read Best Arduino Starter Kits


§ Ultrasonic Sensor (HC-SR04)
§ Breadboard
§ Jumper wires
You can use the preceding links or go directly to MakerAdvisor.com/tools to
find all the parts for your projects at the best price!
Schematics
Follow the next schematic diagram to wire the HC-SR04 ultrasonic sensor to
the Arduino.

The following table shows the connections you need to make:

Ultrasonic Sensor HC-SR04 Arduino

VCC 5V

Trig Pin 11

Echo Pin 12

GND GND
Code
Upload the following code to your Arduino IDE.

/*
* created by Rui Santos, https://randomnerdtutorials.com
*
* Complete Guide for Ultrasonic Sensor HC-SR04
*
Ultrasonic sensor Pins:
VCC: +5VDC
Trig : Trigger (INPUT) - Pin11
Echo: Echo (OUTPUT) - Pin 12
GND: GND
*/

int trigPin = 11; // Trigger


int echoPin = 12; // Echo
long duration, cm, inches;

void setup() {
//Serial Port begin
Serial.begin (9600);
//Define inputs and outputs
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}

void loop() {
// The sensor is triggered by a HIGH pulse of 10 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Read the signal from the sensor: a HIGH pulse whose


// duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);

// Convert the time into a distance


cm = (duration/2) / 29.1; // Divide by 29.1 or multiply by 0.0343
inches = (duration/2) / 74; // Divide by 74 or multiply by 0.0135
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();

delay(250);
}
View raw code

How the Code Works


First, you create variables for the trigger and echo pin
called trigPin and echoPin, respectively. The trigger pin is connected to
digital Pin 11, and the echo pins is connected to digital Pin 12:
int trigPin = 11;
int echoPin = 12;
You also create three variables of type long: duration, cmand inch.
The duration variable saves the time between the emission and reception
of the signal. The cm variable will save the distance in centimeters, and
the inch variable will save the distance in inches.
long duration, cm, inches;
In the setup(), initialize the serial port at a baud rate of 9600, and set the
trigger pin as an output and the echo pin as an input.
//Serial Port begin
Serial.begin (9600);
//Define inputs and outputs
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
In the loop(), trigger the sensor by sending a HIGH pulse of 10
microseconds. But, before that, give a short LOW pulse to ensure you’ll get a
clean HIGH pulse:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
Then, you can read the signal from the sensor – a HIGH pulse whose duration
is the time in microseconds from the sending of the signal to the reception of
its echo to an object.
duration = pulseIn(echoPin, HIGH);
Finally, you just need to convert the duration to a distance. We can calculate
the distance by using the following formula:

distance = (traveltime/2) x speed of sound

The speed of sound is: 343m/s = 0.0343 cm/uS = 1/29.1 cm/uS

Or in inches: 13503.9in/s = 0.0135in/uS = 1/74in/uS


We need to divide the traveltime by 2 because we have to take into
account that the wave was sent, hit the object, and then returned back to the
sensor.
cm = (duration/2) / 29.1;
inches = (duration/2) / 74;
Finally, we print the results in the Serial Monitor:

Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();

Source code with NewPing


You can also use the the NewPing library. Download the library here.
After installing the NewPin library, you can upload the code provided below.

/*
* Posted on https://randomnerdtutorials.com
* created by http://playground.arduino.cc/Code/NewPing
*/

#include <NewPing.h>

#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200

// NewPing setup of pins and maximum distance


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
unsigned int distance = sonar.ping_cm();
Serial.print(distance);
Serial.println("cm");
}

View raw code

How the Code Works


Getting the distance to an object using the NewPing library is much simpler.

You start by including the NewPing library:

#include <NewPing.h>
Then, define the trigger and echo pin. The trigger pin is connected to the
Arduino digital Pin 11, and the echo to Pin 12. You also need to define
the MAX_DISTANCE variable to be able to use the library.
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
Then, you create a NewPing instance called sonar:
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
In the setup(), you initialize the Serial communication at a baud rate of
9600.

Serial.begin(9600);
Finally, in the loop(), to get the distance you just need to use
the ping_cm() method on the sonar object. This will give you the distance
in centimeters.
unsigned int distance = sonar.ping_cm();
If you want to get the distance in inches you can
use sonar.ping_in() instead.
Troubleshooting
NOTE: “If the HC-SR04 does not receive an echo then the output never goes
low. Devantec and Parallax sensors time out after 36ms and I think 28ms
respectively. If you use Pulsin as above then with no return echo the program
will hang for 1 second which is the default timeout for Pulsin. You need to use
the timeout parameter.
http://arduino.cc/en/Reference/PulseIn
The HC-SR04 barely works to 10 feet giving a total path length of 20 feet and
a path time of about 20ms so set the timeout to something above that, say 25
or 30ms.
If you put a resistor, say 2k2 between E and T then only connect to T you can
use the HC-SR04 from just one Arduino pin. Look up single pin operation of
ultrasonic sensors.

Also if you are using a HC-SR04 with a PicAxe you need to up the clockspeed
to at least 8MHz otherwise they don’t see the start of the echo pulse so pulsin
never starts. The HC-SR04 works fine with a BS2.” by David Buckley

Thanks to my friend David to leave such an helpful comment!

REFERENCE: https://randomnerdtutorials.com/complete-guide-for-ultrasonic-sensor-hc-sr04/

You might also like