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 17:27:39 2013 +0000
Revision:
0:fb0929f37ebe
Child:
2:0acb6ade091c
Version 1.0 , the rise and fall methods needs to be attached to pin;

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 0:fb0929f37ebe 29 /** Distance Measure Class(es)
prabhuvd 0:fb0929f37ebe 30 */
prabhuvd 0:fb0929f37ebe 31
prabhuvd 0:fb0929f37ebe 32 class DistMeasure
prabhuvd 0:fb0929f37ebe 33 {
prabhuvd 0:fb0929f37ebe 34 public:
prabhuvd 0:fb0929f37ebe 35 /** Create a DistMeasure object connected to the specified pin
prabhuvd 0:fb0929f37ebe 36 * @param pin i/o pin to connect to
prabhuvd 0:fb0929f37ebe 37 */
prabhuvd 0:fb0929f37ebe 38 DistMeasure(PinName TrigPin,PinName EchoPin,unsigned int maxtime);
prabhuvd 0:fb0929f37ebe 39 ~DistMeasure();
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 0:fb0929f37ebe 44
prabhuvd 0:fb0929f37ebe 45 unsigned int get_distance_cm(void);
prabhuvd 0:fb0929f37ebe 46 void isr_rise(void);
prabhuvd 0:fb0929f37ebe 47 void isr_fall(void);
prabhuvd 0:fb0929f37ebe 48 void fall (void (*fptr)(void));
prabhuvd 0:fb0929f37ebe 49 void rise (void (*fptr)(void));
prabhuvd 0:fb0929f37ebe 50
prabhuvd 0:fb0929f37ebe 51
prabhuvd 0:fb0929f37ebe 52
prabhuvd 0:fb0929f37ebe 53 private:
prabhuvd 0:fb0929f37ebe 54
prabhuvd 0:fb0929f37ebe 55 Timer pulsetime;
prabhuvd 0:fb0929f37ebe 56 DigitalOut trigger;
prabhuvd 0:fb0929f37ebe 57 InterruptIn echo;
prabhuvd 0:fb0929f37ebe 58 unsigned int timeout;
prabhuvd 0:fb0929f37ebe 59 unsigned int pulsedur;
prabhuvd 0:fb0929f37ebe 60 unsigned int distance;
prabhuvd 0:fb0929f37ebe 61 };
prabhuvd 0:fb0929f37ebe 62
prabhuvd 0:fb0929f37ebe 63 #endif