Arduino UNO-Based Ultrasonic Distance Measuring Servo System
View and Edit Project In Cirkit Designer
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
- Description: A microcontroller board based on the ATmega328P.
- Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0
HC-SR04 Ultrasonic Sensor
- Description: A sensor used to measure distance by using ultrasonic waves.
- Pins: VCC, TRIG, ECHO, GND
Servo
- Description: A motor that can be controlled to rotate to a specific angle.
- Pins: gnd, vcc, pulse
Wiring Details
Arduino UNO
- 5V: Connected to VCC of HC-SR04 Ultrasonic Sensor and vcc of Servo.
- GND: Connected to GND of HC-SR04 Ultrasonic Sensor and gnd of Servo.
- D12: Connected to pulse of Servo.
- D11: Connected to ECHO of HC-SR04 Ultrasonic Sensor.
- D10: Connected to TRIG of HC-SR04 Ultrasonic Sensor.
HC-SR04 Ultrasonic Sensor
- VCC: Connected to 5V of Arduino UNO.
- GND: Connected to GND of Arduino UNO.
- ECHO: Connected to D11 of Arduino UNO.
- TRIG: Connected to D10 of Arduino UNO.
Servo
- vcc: Connected to 5V of Arduino UNO.
- gnd: Connected to GND of Arduino UNO.
- pulse: Connected to D12 of Arduino UNO.
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.