One of the easiest methods to measure distances in an embedded project is to use an ultrasonic sensor. They provide sufficient accuracy to most applications.It is exceptionally useful in robotics as well.
So how do we interface ultrasonic sensors with arduino? It`s fairly simple.
let`s briefly look how it works.Ultrasonic sensor consists of a transmitter and receiver
The transmitter emits ultrasonic pulse for short duration and waits for the echo pulse on the receiver. The time delay is a measure of the distance from sensor to the object.Roughly we could assume sound waves travels at the rate of 1cm per 29 microseconds.
first we have to pull the trigger pin high for a short duration say 10us.Then wait till the receiver gets the echo pulse.If your sensor is PWM type (common type like parallax PING)) ) we get a pulse whose width corresponds to delay of the ultrasound pulse.All we have to do is to calculate the pulse duration and print suitably, here is the sample code,
// initialize
int PingPin = 7 ; // pin used for the Ping Sensor
int BaudRate = 9600 ; // Baud rate
// set up
void setup() {
Serial.begin(BaudRate) ; // Setup Serial
}
void loop() {
pinMode(PingPin, OUTPUT) ;
digitalWrite(PingPin, LOW) ; // init sensor to ensure clean HIGH pulse
delayMicroseconds(2) ;
digitalWrite(PingPin, HIGH) ; // make the sensor send a pulse
delayMicroseconds(5) ;
digitalWrite(PingPin, LOW) ; // Set LOW again
pinMode(PingPin, INPUT) ; // Get ready to capture the duration of the resulting pulse
// Capture how long the pin stays in HIGH state.
unsigned long Duration = pulseIn(PingPin, HIGH) ;
if (Duration == 0) {
Serial.println ("No Pulse received from the sensor") ;
}
else
{
Serial.print ("Distance : ") ;
Serial.print(Convert_Time_Space(Duration)) ; // convert the duration into distance
Serial.println (" cm");
}
delay (1000) ;
}
unsigned long Convert_Time_Space(const unsigned long fnDuration )
{
// This function could be more precise by using floats
// and taking into account temperature and humidity
// I used 29 microseconds per cm.
return fnDuration / 29 / 2 ;
}
hope this helps
Comments
Post a Comment