We chose the SRF04 Sonar for its abundance in the lab, and ease of use: given a short trigger pulse, the sonar provides a corresponding echo pulse. Once the timing of this echo pulse is known, the length of that pulse in inches or centimeters can be found by a simple division. Measuring a test object’s height with a ruler showed that the sonar was accurate to within 1 centimeter, which was certainly adequate for our goals.
The precise operation and timing of the SRF04 is given in the following diagram.
To properly connect the device we followed the pin diagram given in the SRF04 PDF. We were able to connect the sonar to the power supply on the Seeeduino board without using an external regulator. However, future projects should use an external power regulator so that the power fluctuations caused by the sonar do not interfere with other devices.
To test that the sonar was functioning properly, we wrote a small piece of code to start the sonar and output results serially so we could verify them with the aid of a serial monitor.
#include "sonar_test.h" #define ECHO_PIN 13 #define TRIG_PIN 12 /* Triggers sonar and returns the distance of sensed object in centimeters. For return in inches, divide distance by 148 instead of 58. Maximum range is ~180 centimeters. */ int doSonar() { // Sonar setup stuff digitalWrite(TRIG_PIN, HIGH); // Send a 10uS high to trigger ranging delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Now ping for objects int distance = pulseIn(ECHO_PIN, HIGH); // Read in times pulse distance = distance / 58; // Calculate distance from time of pulse: centimeters Serial.println(distance); return distance; } void setup() { // Setup deb Serial.begin(9600); pinMode(ECHO_PIN, INPUT); pinMode(TRIG_PIN, OUTPUT); } void loop(){ doSonar(); delay(500); }