Skip to main content
6 of 6
edited title
ocrdu
  • 1.8k
  • 3
  • 12
  • 24

Random servo movement with Arduino Uno

Recently, I have been working on a project involving 8 Tower Pro SG90 servos and an Arduino Uno. The issue I am running into is that the servos will randomly move when connected, without even receiving a signal from the Arduino.

Specifically, sometimes the servos will work perfectly and the input moves the servos fine, but then all of a sudden the servos will start twitching and moving erratically back and forth. Then I disconnect the power and plug it back in and I will sometimes work again or sometimes not.

I don't think power is the problem because I am powering the servos externally with a 5.5 V power supply which can provide 2.5 A. I also made sure to have a common ground between the Arduino and the power supply. Additionally, I don't think this is an issue of a broken servo because I have this problem with all eight. In my code, I have input pins to control the servos which are just buttons. These buttons also have pull-down resistors, so I don't think the input is the problem either. I am using the Arduino servo library.

The only other thing I can think of is external frequency interference because some of the circuitry and wiring are close together, but none of the wires are very long and I even tried putting a ferrite bead on the servo cables but to no avail.

If anyone has any ideas about a solution to my problem which I have not tried yet that would be amazing!

#include <Servo.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
Servo servo8;

void setup(){
  pinMode(5, INPUT);
  pinMode(4, INPUT);
  pinMode(3, INPUT);
  pinMode(2, INPUT);
  pinMode(1, INPUT);
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  servo1.attach(13);
  servo2.attach(12);
  servo3.attach(11);
  servo4.attach(10);
  servo5.attach(9);
  servo6.attach(8);
  servo7.attach(7);
  servo8.attach(6);
}

void loop(){
  if (digitalRead(5) == LOW) {
    servo1.write(120);
    delay(20);
  } else {
    servo1.write(50);
    delay(20);
  }

  if (digitalRead(4) == LOW) {
    servo2.write(110);
    delay(20);
  } else {
    servo2.write(200);
    delay(20);
  }

  if (digitalRead(3) == LOW) {
    servo3.write(120);
    delay(20);
  } else {
    servo3.write(50);
    delay(20);
  }

  if (digitalRead(2) == LOW) {
    servo4.write(110);
    delay(20);
  } else {
    servo4.write(200);
    delay(20);
  }

  if (digitalRead(1) == LOW) {
    servo5.write(120);
    delay(20);
  } else {
    servo5.write(50);
    delay(20);
  }

  if (digitalRead(A3) == LOW) {
    servo6.write(110);
    delay(20);
  } else {
    servo6.write(200);
    delay(20);
  }

  if (digitalRead(A2) == LOW) {
    servo7.write(120);
    delay(20);
  } else {
    servo7.write(50);
    delay(20);
  }

  if (digitalRead(A1) == LOW) {
    servo8.write(110);
    delay(20);
  } else {
    servo8.write(200);
    delay(20);
  }
}