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

Arduino-Controlled Ultrasonic Sensor with Dual Servo Missile Ejection System

View and Edit Project In Cirkit DesignerImage of Arduino-Controlled Ultrasonic Sensor with Dual Servo Missile Ejection System

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

HC-SR04 Ultrasonic Sensor

Arduino UNO

Wiring Details

SG90 Servo Motor 1

SG90 Servo Motor 2

HC-SR04 Ultrasonic Sensor

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.