This circuit is designed to control multiple servos using an Arduino UNO and an Arduino Sensor Shield v5.0. The servos are powered by a 12V battery, and the Arduino UNO is programmed to control the servos based on distance measurements. The circuit includes the following components:
#include <Servo.h>
volatile int IN1 = 11;
volatile int IN2 = 6;
volatile int IN3 = 5;
volatile int IN4 = 3;
volatile int rightDistance;
volatile int leftDistance;
Servo servo_4;
void left_side_forward(int speed) {
analogWrite(IN1, speed * 0.92);
analogWrite(IN2, 0);
}
void right_side_forward(int speed) {
analogWrite(IN3, speed);
analogWrite(IN4, 0);
}
void left_side_backward(int speed) {
analogWrite(IN1, 0);
analogWrite(IN2, speed * 0.92);
}
void right_side_backward(int speed) {
analogWrite(IN3, 0);
analogWrite(IN4, speed);
}
float checkdistance_A1_A2() {
digitalWrite(A1, LOW);
delayMicroseconds(2);
digitalWrite(A1, HIGH);
delayMicroseconds(10);
digitalWrite(A1, LOW);
float distance = pulseIn(A2, HIGH) / 58.00;
delay(10);
return distance;
}
void forward(int speed) {
left_side_forward(speed);
right_side_forward(speed);
}
void backward(int speed) {
left_side_backward(speed);
right_side_backward(speed);
}
void left(int speed, int time) {
left_side_backward(speed);
right_side_forward(speed);
delay(time);
stop();
}
void right(int speed, int time) {
left_side_forward(speed);
right_side_backward(speed);
delay(time);
stop();
}
void stop() {
left_side_forward(0);
right_side_forward(0);
}
void setup() {
servo_4.attach(4);
pinMode(A1, OUTPUT);
pinMode(A2, INPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
servo_4.write(90);
delay(200); // Reduce delay for better responsiveness
float distance = checkdistance_A1_A2();
while (distance > 15) {
forward(150); // Increase speed for faster movement
distance = checkdistance_A1_A2(); // Continuously update distance
}
stop();
delay(100); // Reduce delay for better responsiveness
servo_4.write(0);
delay(200); // Reduce delay for better responsiveness
rightDistance = checkdistance_A1_A2();
servo_4.write(180);
delay(200); // Reduce delay for better responsiveness
leftDistance = checkdistance_A1_A2();
if (rightDistance >= leftDistance) {
right(200, 300); // Reduce rotation time for better precision
} else {
left(200, 300); // Reduce rotation time for better precision
}
}
This code controls the servos connected to the Arduino UNO via the Arduino Sensor Shield v5.0. The servos are used to move the robot forward, backward, left, and right