Arduino-Controlled Ultrasonic Sensor with Dual Servo Missile Ejection System
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This circuit is designed to control two SG90 servo motors and an HC-SR04 ultrasonic sensor using an Arduino UNO microcontroller. The purpose of the circuit is to rotate an ultrasonic sensor to detect objects within a certain distance and to actuate a mechanism (e.g., eject a missile) when an object is detected within a predefined threshold distance. The Arduino UNO is programmed to control the servos' positions based on the distance measurements from the ultrasonic sensor.
Component List
SG90 Servo Motor
- Description: A small and lightweight servo motor capable of precise control.
- Pins: PWM (Pulse Width Modulation), 5V (Power Supply), GND (Ground).
HC-SR04 Ultrasonic Sensor
- Description: An ultrasonic distance sensor that can measure distances by emitting ultrasonic waves and measuring the time it takes for the echo to return.
- Pins: VCC (Power Supply), TRIG (Trigger), ECHO (Echo), GND (Ground).
Arduino UNO
- Description: A microcontroller board based on the ATmega328P, widely used for building digital devices and interactive objects that can sense and control objects in the physical world.
- Pins: Multiple digital and analog I/O pins, power supply pins (3.3V, 5V), and ground pins (GND).
Wiring Details
SG90 Servo Motor 1
- PWM: Connected to Arduino UNO pin D11.
- 5V: Connected to the 5V power supply from the Arduino UNO.
- GND: Connected to the ground (GND) on the Arduino UNO.
SG90 Servo Motor 2
- PWM: Connected to Arduino UNO pin D3.
- 5V: Connected to the 5V power supply from the Arduino UNO.
- GND: Connected to the ground (GND) on the Arduino UNO.
HC-SR04 Ultrasonic Sensor
- VCC: Connected to the 5V power supply from the Arduino UNO.
- TRIG: Connected to Arduino UNO pin D7.
- ECHO: Connected to Arduino UNO pin D8.
- GND: Connected to the ground (GND) on the Arduino UNO.
Documented Code
#include <Servo.h>
// Pin Definitions
const int trigPin = 7; // Ultrasonic sensor trig pin
const int echoPin = 8; // Ultrasonic sensor echo pin
const int rotateServoPin = 9; // Servo for rotating the ultrasonic sensor
const int ejectServoPin = 10; // Servo for ejecting the missile
Servo rotateServo; // Servo object for rotation
Servo ejectServo; // Servo object for ejection
long duration;
int distance;
int thresholdDistance = 40; // Eject missile if object is within 40 cm
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
rotateServo.attach(rotateServoPin); // Attach the rotation servo
ejectServo.attach(ejectServoPin); // Attach the ejection servo
Serial.begin(9600);
}
void loop() {
// Rotate the sensor and missile (Servo 1)
for (int i = 15; i <= 165; i++) {
rotateServo.write(i);
delay(30);
distance = calculateDistance(); // Calculate the distance
Serial.print("Angle: ");
Serial.print(i);
Serial.print(", Distance: ");
Serial.println(distance);
// Check if object is within the threshold distance
if (distance <= thresholdDistance) {
ejectMissile(); // Call the ejection function
delay(2000); // Wait for 2 seconds before continuing
}
}
// Rotate the sensor back (Servo 1)
for (int i = 165; i >= 15; i--) {
rotateServo.write(i);
delay(30);
distance = calculateDistance(); // Calculate the distance
Serial.print("Angle: ");
Serial.print(i);
Serial.print(", Distance: ");
Serial.println(distance);
// Check if object is within the threshold distance
if (distance <= thresholdDistance) {
ejectMissile(); // Call the ejection function
delay(2000); // Wait for 2 seconds before continuing
}
}
}
// Function to calculate distance using Ultrasonic Sensor
int calculateDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2; // Convert to cm
}
// Function to eject the missile
void ejectMissile() {
ejectServo.write(90); // Rotate servo to 90 degrees to pull the needle
delay(500); // Wait for the ejection
ejectServo.write(0); // Return servo to original position
}
This code is designed to be uploaded to an Arduino UNO microcontroller. It initializes two servo motors and an ultrasonic sensor, then enters a loop where it rotates the sensor, measures the distance to any object in front of it, and actuates the ejection servo if the object is within a certain distance. The calculateDistance function is used to measure the distance using the ultrasonic sensor, and the ejectMissile function is used to actuate the ejection mechanism.