Ultrasound Ranging Sensor module

Dependents:   Obstacle_avoidance servourfmatlab hcsr04 DistanceOnSevenSegLed ... more

Overview

The HC-SR04 ultrasonic sensor uses sonar to determine distance to an object like bats or dolphins do. It offers excellent range accuracy and stable readings in an easy-to-use package. It operation is not affected by sunlight or black material like Sharp rangefinders are (although acoustically soft materials like cloth can be difficult to detect).

Sensor (HCSR04) Details

You can find the details of the sensor at http://www.micropik.com/PDF/HCSR04.pdf /media/uploads/prabhuvd/_scaled_hcsr04.png

Working principle

The trigger input is sent a 10 usec pulse and followed by that the pulse width on the echo line is measured , the measured pulse width is then converted into distance in cm.

/media/uploads/prabhuvd/waveform.png

Quote:

Calculation : The sonic speed is 343 m/sec , when converted to cm/usec , it will 343 * 100/ 1000000 = 343 /10000 cm/usec The width of the pulse is equivalent to time taken by ultrasonic wave to reach obstacle and bounce back , hence the distance of the object will be half the pulse width.

Distance (cm) = measured pulse width * 343/20000 cm.

Schematic

/media/uploads/prabhuvd/schema.png

Code

include the mbed library with this snippet

#include "mbed.h"
#include "hcsr04.h"
#include "TextLCD.h"

DigitalOut myled(LED1);
HCSR04  usensor(p25,p6);
TextLCD lcd(p14, p16, p17, p18, p19, p20,TextLCD::LCD16x2); // rs, e, d4-d7
unsigned int dist;
int main()
{
 
    while(1) {
        usensor.start();
        wait_ms(500); 
        dist=usensor.get_dist_cm();
        lcd.cls();
        lcd.locate(0,0);
        lcd.printf("cm:%ld",dist );
 
    }
}

Committer:
prabhuvd
Date:
Sat Mar 30 18:55:03 2013 +0000
Revision:
7:71da0dbf4400
Parent:
6:4be4fcd0c171
name modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
prabhuvd 0:fb0929f37ebe 1 /* Copyright (c) 2013 Prabhu Desai
prabhuvd 0:fb0929f37ebe 2 * pdtechworld@gmail.com
prabhuvd 0:fb0929f37ebe 3 *
prabhuvd 0:fb0929f37ebe 4 *
prabhuvd 0:fb0929f37ebe 5 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
prabhuvd 0:fb0929f37ebe 6 * and associated documentation files (the "Software"), to deal in the Software without restriction,
prabhuvd 0:fb0929f37ebe 7 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
prabhuvd 0:fb0929f37ebe 8 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
prabhuvd 0:fb0929f37ebe 9 * furnished to do so, subject to the following conditions:
prabhuvd 0:fb0929f37ebe 10 *
prabhuvd 0:fb0929f37ebe 11 * The above copyright notice and this permission notice shall be included in all copies or
prabhuvd 0:fb0929f37ebe 12 * substantial portions of the Software.
prabhuvd 0:fb0929f37ebe 13 *
prabhuvd 0:fb0929f37ebe 14 * For more details on the sensor :
prabhuvd 0:fb0929f37ebe 15 * http://www.elecfreaks.com/store/hcsr04-ultrasonic-sensor-distance-measuring-module-p-91.html?zenid=pgm8pgnvaodbe36dibq5s1soi3
prabhuvd 0:fb0929f37ebe 16 *
prabhuvd 0:fb0929f37ebe 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
prabhuvd 0:fb0929f37ebe 18 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
prabhuvd 0:fb0929f37ebe 19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
prabhuvd 0:fb0929f37ebe 20 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
prabhuvd 0:fb0929f37ebe 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
prabhuvd 0:fb0929f37ebe 22 */
prabhuvd 0:fb0929f37ebe 23
prabhuvd 0:fb0929f37ebe 24 #ifndef MBED_HCSR04_H
prabhuvd 0:fb0929f37ebe 25 #define MBED_HCSR04_H
prabhuvd 0:fb0929f37ebe 26
prabhuvd 0:fb0929f37ebe 27 #include "mbed.h"
prabhuvd 0:fb0929f37ebe 28
prabhuvd 7:71da0dbf4400 29 /** HCSR04 Class(es)
prabhuvd 0:fb0929f37ebe 30 */
prabhuvd 0:fb0929f37ebe 31
prabhuvd 6:4be4fcd0c171 32 class HCSR04
prabhuvd 0:fb0929f37ebe 33 {
prabhuvd 0:fb0929f37ebe 34 public:
prabhuvd 6:4be4fcd0c171 35 /** Create a HCSR04 object connected to the specified pin
prabhuvd 0:fb0929f37ebe 36 * @param pin i/o pin to connect to
prabhuvd 0:fb0929f37ebe 37 */
prabhuvd 6:4be4fcd0c171 38 HCSR04(PinName TrigPin,PinName EchoPin);
prabhuvd 6:4be4fcd0c171 39 ~HCSR04();
prabhuvd 0:fb0929f37ebe 40
prabhuvd 0:fb0929f37ebe 41 /** Return the distance from obstacle in cm
prabhuvd 0:fb0929f37ebe 42 * @param distance in cms and returns -1, in case of failure
prabhuvd 0:fb0929f37ebe 43 */
prabhuvd 2:0acb6ade091c 44 unsigned int get_dist_cm(void);
prabhuvd 4:33938a97d904 45 /** Return the pulse duration equal to sonic waves travelling to obstacle and back to receiver.
prabhuvd 7:71da0dbf4400 46 * @param pulse duration in microseconds.
prabhuvd 7:71da0dbf4400 47 */
prabhuvd 2:0acb6ade091c 48 unsigned int get_pulse_us(void);
prabhuvd 4:33938a97d904 49 /** Generates the trigger pulse of 10us on the trigger PIN.
prabhuvd 7:71da0dbf4400 50 */
prabhuvd 3:e6795cb9439c 51 void start(void );
prabhuvd 0:fb0929f37ebe 52 void isr_rise(void);
prabhuvd 0:fb0929f37ebe 53 void isr_fall(void);
prabhuvd 0:fb0929f37ebe 54 void fall (void (*fptr)(void));
prabhuvd 0:fb0929f37ebe 55 void rise (void (*fptr)(void));
prabhuvd 4:33938a97d904 56
prabhuvd 0:fb0929f37ebe 57
prabhuvd 0:fb0929f37ebe 58
prabhuvd 0:fb0929f37ebe 59 private:
prabhuvd 0:fb0929f37ebe 60
prabhuvd 0:fb0929f37ebe 61 Timer pulsetime;
prabhuvd 0:fb0929f37ebe 62 DigitalOut trigger;
prabhuvd 0:fb0929f37ebe 63 InterruptIn echo;
prabhuvd 0:fb0929f37ebe 64 unsigned int pulsedur;
prabhuvd 4:33938a97d904 65 unsigned int distance;
prabhuvd 0:fb0929f37ebe 66 };
prabhuvd 0:fb0929f37ebe 67
prabhuvd 0:fb0929f37ebe 68 #endif