Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Modified Arduino Ping))) example to work with 4-Pin HC-SR04 Ultrasonic Sensor Distance Measuring Module
/* HC-SR04 Sensor
https://www.dealextreme.com/p/hc-sr04-ultrasonic-sensor-distance-measuring-module-133696
This sketch reads a HC-SR04 ultrasonic rangefinder and returns the
distance to the closest object in range. To do this, it sends a pulse
to the sensor to initiate a reading, then listens for a pulse
to return. The length of the returning pulse is proportional to
the distance of the object from the sensor.
The circuit:
* VCC connection of the sensor attached to +5V
* GND connection of the sensor attached to ground
* TRIG connection of the sensor attached to digital pin 2
* ECHO connection of the sensor attached to digital pin 4
Original code for Ping))) example was created by David A. Mellis
Adapted for HC-SR04 by Tautvidas Sipavicius
This example code is in the public domain.
*/
const int trigPin = 2;
const int echoPin = 4;
void setup() {
// initialize serial communication:
Serial.begin(9600);
}
void loop()
{
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, inches, cm;
// 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:
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
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
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
long microsecondsToInches(long microseconds)
{
// According to Parallax's datasheet for the PING))), there are
// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
// second). This gives the distance travelled by the ping, outbound
// and return, so we divide by 2 to get the distance of the obstacle.
// See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}
@anseljh

This comment has been minimized.

Copy link

anseljh commented Jul 9, 2013

Works great, thanks!

@naishe

This comment has been minimized.

Copy link

naishe commented Sep 10, 2013

Is there a reason to not define pinMode in setup()?

@JoeWoodward

This comment has been minimized.

Copy link

JoeWoodward commented Sep 25, 2013

Do you have intermittent freezing with this code? I'm trying to set mine up and it seems to work most of the time but occasionally will freeze for a second or so. Any ideas what it might be?

@ShreyasSkandan

This comment has been minimized.

Copy link

ShreyasSkandan commented Oct 2, 2013

Thank you for the code. I used it in one of my videos: https://www.youtube.com/watch?v=03scimJP-oI

I hope that's not a problem!

@tvanprooyen

This comment has been minimized.

Copy link

tvanprooyen commented Nov 18, 2013

To JoeWoodward this is because something is to close, its an "Error" that was made to show in the code.

@tvanprooyen

This comment has been minimized.

Copy link

tvanprooyen commented Nov 18, 2013

**not made to show in the code

@Paulami

This comment has been minimized.

Copy link

Paulami commented Nov 20, 2013

I am using this code for a project. Works pretty well.

@abdomaged

This comment has been minimized.

Copy link

abdomaged commented Apr 29, 2014

nice work man

@nburroni

This comment has been minimized.

Copy link

nburroni commented Apr 8, 2015

A thing of beauty! Thanks for the contribution.

@sanjeevarayudu

This comment has been minimized.

Copy link

sanjeevarayudu commented Feb 4, 2016

works correctly,.......

@sanjeevarayudu

This comment has been minimized.

Copy link

sanjeevarayudu commented Feb 4, 2016

but i want linked program for GSM modem, i mean the distance in cm is go through the GSM modem to mobile... in sms form.

@natalinowerty

This comment has been minimized.

Copy link

natalinowerty commented Jun 17, 2016

can I use this to use 2 hsr04 at the same time?

@AlyaRaof

This comment has been minimized.

Copy link

AlyaRaof commented Oct 28, 2016

Thanks, it worked great!

@Firaol-Gezahegn

This comment has been minimized.

Copy link

Firaol-Gezahegn commented Nov 16, 2016

Nice work thanks

@gouthamjames

This comment has been minimized.

Copy link

gouthamjames commented Feb 9, 2017

how to determine the Serial.begin() of the board?

@haashimrehan

This comment has been minimized.

Copy link

haashimrehan commented Mar 19, 2017

Nice Job! Thanks

@choeminjun

This comment has been minimized.

Copy link

choeminjun commented Oct 7, 2018

Awsome work! Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.