HC-SR04 not only inexpensive but also practical, use a sample AVR development boar –Arduino , with a LCD screen , you can make a easy rangefinder device , which can ranging 2cm to 500cm .
Now first connect the circuit as below :
With module : pin13 to Trig ; pin 12 to Echo ; VCC to VCC; GND to GND ; pin 2 to INT
With LCD: RS => pin 11 RW => pin 10 EN => pin 9
D4, D5, D6, D7 => pins 7, 6, 5, 4
Download the code below :
#include LiquidCrystal lcd(11, 10, 9, 4, 5, 6, 7); int pingPin = 13; int inPin = 12; void setup() { lcd.begin(16, 2); lcd.print("testing..."); } void loop() { // establish variables for duration of the ping, // and the distance result in inches and centimeters: long duration, inches, cm; // The PING))) is triggered by a HIGH pulse of 2 or more microseconds. // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(10); digitalWrite(pingPin, LOW); // The same pin is used to read the signal from the PING))): 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(inPin, INPUT); duration = pulseIn(inPin, HIGH); // convert the time into a distance inches = microsecondsToInches(duration); cm = microsecondsToCentimeters(duration); lcd.clear(); lcd.setCursor(0, 0); lcd.print(inches); lcd.print("in, "); lcd.print(cm); lcd.print("cm"); 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. 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; }
Reset the Arduino , then you can see the distance of object in front on the LCD.
You may also be interested in these posts:
Hi,
The sensor connects the LCD screen via a circuit. Actually, I don’t know how to make the circuit. Can I buy or make the circuit ??
Did you had any problems with this sensor? I need 5 of these for my project and I bought one to try it but it has a noisy output, sometimes it gives me the correct distance but sometimes on the LCD appears a weird number(about 40m..) I’m not sure if mine has a problem or not. i used the same code you did. What should I see on the lcd if the sensor has nothing in front?
The code just a demo so it’s not so preciseness… If there is nothing in front, there would be a long continuous wave – you can find detailed time in datasheet – but in demo code it will mistake identified as a distance – like 40m…
Hi,
You can make the circuit yourself, it’s very easy, you just need to purchase some jumper and the breadboard.
hi
is ther a typo error in the lcd lines : LiquidCrystal lcd(11, 10, 9, 4, 5, 6, 7);
on an other web site i’ve seen : LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
i have on my 2×16 lcd griberish unreadable values accents etc … but if i paste this code :
#include “Ultrasonic.h”
Ultrasonic ultrasonic( 12, 13 );
void setup()
{
Serial.begin( 9600 );
}
void loop()
{
Serial.print( ultrasonic.Ranging(CM) );
Serial.println( “cm” );
delay(1000);
}
it work in a serial terminal ??? is there an error in the lcdlibrary or something ?
i have the arduino 022 package.
thanks
Hi,
we don’t know which type LCD you use, so we can not give you any suggestion of that… But if you use the code above , you should can read the data from serial terminal.
Regards
ITead
can u tell me the name of the board and the name of the chip, can i buy 1 from store?
@Leo
We just purchase the complete HC-SR04 from our supplier, so we don’t have the name of the board and chip.
There is mistake in circuit picture, data lines must be reversed. Or you may reverse those lines in code by change
LiquidCrystal lcd(11, 10, 9, 4, 5, 6, 7) to
LiquidCrystal lcd(11, 10, 9, 7, 6, 5, 4).
; ) It’s the old 0017 library , and now the 0022 library change a lot. Now we recommend to use our serial LCD for display: http://iteadstudio.com/store/index.php?main_page=product_info&cPath=57_59&products_id=442
Ok, I changed the order from LiquidCrystal lcd(11, 10, 9, 4, 5, 6, 7) to
LiquidCrystal lcd(11, 10, 9, 7, 6, 5, 4), but Arduino IDE (0022) returns:
sketch_aug09a.cpp:1:11: error: #include expects “FILENAME” or
sketch_aug09a:2: error: ‘LiquidCrystal’ does not name a type
sketch_aug09a.cpp: In function ‘void setup()’:
sketch_aug09a:8: error: ‘lcd’ was not declared in this scope
sketch_aug09a.cpp: In function ‘void loop()’:
sketch_aug09a:36: error: ‘lcd’ was not declared in this scope
What’s wrong?
I found it. Just replace “#include” with “#include “
With module : pin13 to Trig ; pin 12 to Echo ; VCC to VCC; GND to GND ; pin 2 to INT
Module HC-SR04 has only: VCC, trig, Echo, GND.
What is INT ?
What is INT ????????
No-one knows ? What is INT ? There are only 4 pins, where is INT?
[...] have any idea of how to use it by the time we get together. There are instructions at: <http://iteadstudio.com/application-note/arduino-ultrasonic-ranging-with-hc-sr04/> and a library available at [...]