Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO-Based Ultrasonic Distance Measuring Servo System

View and Edit Project In Cirkit DesignerImage of Arduino UNO-Based Ultrasonic Distance Measuring Servo System

Circuit Documentation

Summary

This circuit involves an Arduino UNO microcontroller, an HC-SR04 Ultrasonic Sensor, and a Servo motor. The Arduino UNO controls the Servo motor and reads distance measurements from the Ultrasonic Sensor. The Servo motor rotates between 15 and 165 degrees, and the distance measured by the Ultrasonic Sensor is recorded at each degree.

Component List

Arduino UNO

HC-SR04 Ultrasonic Sensor

Servo

Wiring Details

Arduino UNO

HC-SR04 Ultrasonic Sensor

Servo

Documented Code

// Includes the Servo library
#include <Servo.h>

// Defines Trig and Echo pins of the Ultrasonic Sensor
const int trigPin = 10;
const int echoPin = 11;

// Variables for the duration and the distance
long duration;
int distance;

Servo myServo; // Creates a servo object for controlling the servo motor

void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600);
  myServo.attach(12); // Defines on which pin is the servo motor attached
}

void loop() {
  // Rotates the servo motor from 15 to 165 degrees
  for(int i = 15; i <= 165; i++) {  
    myServo.write(i);
    delay(30);
    distance = calculateDistance(); // Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree
    
    Serial.print(i); // Sends the current degree into the Serial Port
    Serial.print(","); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
    Serial.print(distance); // Sends the distance value into the Serial Port
    Serial.print("."); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  }
  
  // Repeats the previous lines from 165 to 15 degrees
  for(int i = 165; i > 15; i--) {  
    myServo.write(i);
    delay(30);
    distance = calculateDistance();
    Serial.print(i);
    Serial.print(",");
    Serial.print(distance);
    Serial.print(".");
  }
}

// Function for calculating the distance measured by the Ultrasonic sensor
int calculateDistance() { 
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
  distance = duration * 0.034 / 2;
  return distance;
}

This code controls the Servo motor to rotate between 15 and 165 degrees while measuring the distance using the HC-SR04 Ultrasonic Sensor. The measured distance and the corresponding angle are sent to the Serial Monitor.