Measure Distance with a Sonar Sensor on an Arduino
Learn how to measure distances up to 20 ft with a sonar sensor on an Arduino!
Sonar’s most popular and primary use is to be able to "see" underwater. Sonar uses the propagation of sound to detect objects. Since sound waves travel farther in water than they do in air, sonar is preferred over other types of sensors like radar for this reason. Even though it's preferred for underwater sensing, sonar can still be used in air; however, there exists the small chance of interference, which we might see when measuring distance.
There are two types of sonar: passive sonar and active sonar. Active sonar has an emitter and a detector: depending on the time that the signal takes to come back to the sonar, it can detect the range or distance of an object and its orientation. It also detects the strength of a signal to determine how much time it took to be picked up by the receiver. Passive sonars are used to pick up signals from vessels and other marine life like whales and submarines. Passive sonars don't have emitters; they just receive sound waves coming towards them.
Bill of Materials
- Arduino Uno
- MaxBotix Ultrasonic Range Finder
- 3 Loose Wires
- Soldering Iron
- Computer with Arduino IDE (Integrated Development Environment)
- USB Type B to connect the Arduino
We will be using an Arduino Uno as our microprocessor to be able to read distance detected by the sonar. The sonar that we are using is the Maxbotix Ultrasonic Range Finder, but any models that are close to this one with an output as a pulse width or analog might be able to be used in this project. The three loose wires will be soldered to the Ultrasonic Range finder. We need the solder and soldering iron to solder wires to the sensor. Once everything is soldered and in place, the code below will have to be uploaded to the Arduino via the IDE, and it will also be connected with a USB Type B.
Since the Arduino and the code will interpret the output of the sonar in volts, we do not want there to be any false connections or shorts between the circuit, so we have to make sure that when the pins are soldered there is no solder residue that can cause a short.
The 3 pins that will be soldered on the sonar sensor are shown below.
Solder a wire to the ground, V in of +5 Volts, and the second from the bottom, which is the pulse width output. After soldering these three pins, clean with a cotton swab and some alcohol around the holes to get rid of any residue that may remain from the solder. To check for any shorts then use the multimeter and check the resistance between these three pins. Between the GND and the +5 V there should be OL or infinite resistance. If you check with the multimeter for an open or if you check continuity, then it should not come up. If there is some continuity between any of these three pins, then you need to de-solder the wires and clean up any solder residue. Once the wires are soldered on the Sonar Sensor and you have checked for no shorts then you can connect to the Arduino.
How to connect the sensor to the Arduino
You can connect the sensor and the Arduino above with a breadboard as a medium or you can connect directly from the sensor to the Arduino. The sensor is being grounded on the Arduino and is receiving power from the Arduino’s +5V output. The sensor's pulse width output is being connected to any input on the Arduino that can accept a pulse width. In this case, I'm using digital pin 3.
Maxbotix rangeSensorPW(3, Maxbotix::PW, Maxbotix::LV); // #3 Defines which Digital Input in being Read
//Maxbotix:PW defines that the Arduino is reading PW signals
unsigned long start;
Serial.println("Reading 1st Sensor"); //Serial Monitor will print this line
start = millis(); // Number of Milli seconds until the Sonar Receives the signal it sent out
Serial.print("PW 1: ");
Serial.print(rangeSensorPW.getRange()*.393701); // Multiply by this to convert Cm to Inches
Serial.print(" inches - ");
Serial.print(millis() - start);
delay(1500); // Wait for 1.5 Seconds
When the Arduino is connected as shown in the diagram above and the code in uploaded, you can open the serial monitor and the distances will be displayed in inches with a refresh every 1.5 seconds. When you run the serial monitor, depending on where your sonar sensor is pointing, it will give you a certain number of inches. If you put your hand or another large object where the sonar is pointed, it will also read that and display its distance. For this specific sonar, the range is 20 feet.
Below is an image of how the serial monitor and code should look like once they're running. Happy building!
Give this project a try for yourself! Get the BOM.