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

Arduino UNO-Based Battery-Powered Robotic Arm with Multiple Servos

View and Edit Project In Cirkit DesignerImage of Arduino UNO-Based Battery-Powered Robotic Arm with Multiple Servos

Circuit Documentation

Summary

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:

Component List

Arduino UNO

Arduino Sensor Shield v5.0

Servo

12V Battery

Wiring Details

Arduino UNO

Arduino Sensor Shield v5.0

Servo

12V Battery

Code Documentation

Arduino UNO Code

#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