top of page

Build a SONAR with Ultrasonic Sensor

Updated: Apr 17


SONAR is Sound Navigation and Ranging. It’s a technique that uses sound propagation to navigate, communicate with or detect objects on (or under) the water surface, such as other vessels. 

In this blog, we will go through the steps of how to build a Sonar system using an Ultrasonic Sensor and Arduino.







Red LED 



Green LED 



Arduino Uno R3 or Arduino MEGA



 Ultrasonic Distance Sensor 



 Piezo / Buzzer

D3, D4





100 ohm Resistor

Connections: Setup the Ultrasonic Sensor

  • Connect the VCC pin of the Ultrasonic Sensor to the 5V pin on the Arduino. The circuit below shows how it uses a breadboard to streamline 5V and ground connections

  • Connect the GND pin of the Ultrasonic Sensor to any GND pin on the Arduino.

  • Connect the SIG pin of the Ultrasonic Sensor to digital pin A1 on the Arduino.

  • Connect  Piezo / Buzzer via register to GND

  • Connect  Piezo / Buzzer via a diode to green LED and also to red LED

  • Connect LEDs ground to GND

  • Connect green LED +ve to pin 13

  • Connect red LED +ve to pin 12

Sonar Circuit

Coding the Arduino: Sketch

Defines two notes, NOTE_C4 and NOTE_A3, with their corresponding frequencies

#define NOTE_C4  262
#define NOTE_A3  220

Define a function readUltrasonicDistance to measure the distance using an ultrasonic sensor connected to a specified pin.

long readUltrasonicDistance(int pin) {
  // Clear the trigger
  pinMode(pin, OUTPUT);  
  digitalWrite(pin, LOW);

  // Sets the pin on HIGH state for 10 microseconds
  digitalWrite(pin, HIGH);
  digitalWrite(pin, LOW);
  pinMode(pin, INPUT);

  // Reads the pin, and return the sound wave travel time in ms
  return pulseIn(pin, HIGH);

In the setup function, initialize the serial communication and sets two pins (12 and 13) as outputs.

void setup() {
  pinMode(A1, INPUT);

  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);

In loop() function, continuously read the distance from the ultrasonic sensor using our readUltrasonicDistance function, convert it to centimeters, and print it to the serial bus. If the distance is less than 40 cm, light up one LED (pin 12), turn off the other LED (pin 13), and play a tone corresponding to the NOTE_A3 frequency.

If the distance is greater than 40 cm, light up the other LED (pin 13), turn off the first LED (pin 12), and play a tone corresponding to the NOTE_C4 frequency.

void loop() {
  Serial.println(0.006783 * readUltrasonicDistance(A1));
  if (0.006783 * readUltrasonicDistance(A1) < 40) {
    digitalWrite(12, HIGH);
    digitalWrite(13, LOW);
    beep(12, NOTE_A3);
  } else {
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    beep(13, NOTE_C4);
  // Delay a little bit to improve simulation performance

Beep function based on the pin and note, used in the loop() above

void beep(int pin, int note) {
  // calculate note duration, take 1s divided by the note type.
  // e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
  int noteDuration = 1000 / 2;

  tone(pin, note, noteDuration);

  // to distinguish the notes, set a minimum time between them.
  // the note's duration + 30% seems to work well:
  int pauseBetweenNotes = noteDuration * 1.30;

  // stop the tone playing:

Building a Sonar system using an Ultrasonic Sensor is a fun and educational and allows us to understand the principles of sonar.

162 views0 comments

Recent Posts

See All



Subscribe to our mailing list for regular updates on news, events, insightful blogs, and free code!

Thanks for subscribing!

bottom of page