top of page

Build a SONAR with Ultrasonic Sensor

Updated: Apr 17


Sonar

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.


Hardware

Name

Quantity

Component

D1

1

Red LED 

D2

1

Green LED 

U1

1

Arduino Uno R3 or Arduino MEGA

PING1

1

 Ultrasonic Distance Sensor 

PIEZO1

1

 Piezo / Buzzer

D3, D4

2

 Diode 

R2

1

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);
  delayMicroseconds(2);

  // Sets the pin on HIGH state for 10 microseconds
  digitalWrite(pin, HIGH);
  delayMicroseconds(10);
  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);
  Serial.begin(9600);

  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
  delay(10); 
}

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;

  delay(pauseBetweenNotes);
  
  // stop the tone playing:
  noTone(pin);
}

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

Comments


Subscribe

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

Thanks for subscribing!

bottom of page