Servo with External Power Source

I am working on a small DIY arm that uses 4 servos, specifically the mg996r servos. I am using a small buck converter since the servo only needs 4.8V-7.2V but I supply it with a 9V battery.

I tried connecting only 1 servo first with the buck converter and I ran with an issue but got resolve after connecting a common ground, then when I tried connecting another servo, only 1 servo is turning while the other doesn’t. When I switch what pin they are connected to, the one that was working suddenly doesn’t turn while the other one which was not working at first now works.

Test Code:

/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
Servo myservo1;
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(12);  // attaches the servo on pin 9 to the servo object
  myservo.attach(13);
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo1.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo1.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

Simple Diagram:

If it is a PP3 smoke alarm battery it won’t last long because it has very low capacity

In your code you attach 2 Servo objects with the same name to different pins. I suspect that you copy/pasted myservo.attach(12); and forgot to change the servo name for the one on pin 13

1 Like

One of square 9V batteries? Expect nothing but trouble when trying to power motors from those batteries.

Suggest you feed 4 AA (6 volts total) batteries to the power leads of the servos.

Feed the same 6v to a boost converter set to 7 or 8v, the o/p of the converter to a ferrite bead then to the Vin pin on the arduino.

A power ON/OFF switch is added between the batteries and components.

Can’t believe I frickin missed that. Been working for hours. Thanks a lot for noticing!

Noted!