I want to control 43 servo motors for a weird project I am working on.
The arduino mega does not have enough power to supply 43 servos. That's why I decided to use 2n3904 transistors, see schematic.
I only drew 4 servo's, the remainder of the servo's are wired up like this as well. one transistor per pin to control one servo. All of the servo motors share the same pwm signal. then by changing the high/low output I can decide which servos turn.
That should work...in theory. But as soon as I connect more than 20 servos all of them start to jitter, then it's only a matter of connecting a few more before none of the servos move.
I feel like I am missing something but I have no clue what. The power draw from the arduino is 0.1 ish amps which is not even close to the max of 0.8amps.
Here's a video of what happens.
Also, I know it's a mess of wires, I made a more compact pcb but I wanted to make sure that I didn't screwup soldering. hence the recreation of it on a breadboard. The wiring matches the schematic.
as I unplug some servos, they start to work again....until I plug a couple of them back in.
I also made some code just for the servos.
#include <Servo.h>
Servo myservo;
void setup() {
Serial.begin(115200);
myservo.attach(5);
for (int i = 6; i <= 49; i++)
{
pinMode(i, OUTPUT);
}
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
digitalWrite(14, HIGH);
digitalWrite(15, HIGH);
digitalWrite(16, HIGH);
digitalWrite(17, HIGH);
digitalWrite(18, HIGH);
digitalWrite(19, HIGH);
digitalWrite(20, HIGH);
digitalWrite(21, HIGH);
digitalWrite(22, HIGH);
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(25, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
digitalWrite(30, HIGH);
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(33, HIGH);
digitalWrite(34, HIGH);
digitalWrite(35, HIGH);
digitalWrite(36, HIGH);
digitalWrite(37, HIGH);
digitalWrite(38, HIGH);
digitalWrite(39, HIGH);
digitalWrite(40, HIGH);
digitalWrite(41, HIGH);
digitalWrite(42, HIGH);
digitalWrite(43, HIGH);
digitalWrite(44, HIGH);
digitalWrite(45, HIGH);
digitalWrite(46, HIGH);
digitalWrite(47, HIGH);
digitalWrite(48, HIGH);
digitalWrite(49, HIGH);
}
void loop() {
Serial.print("waiting2");
delay(300);
myservo.write(90);
Serial.println("waiting2");
delay(300);
myservo.write(0);
}
Everything should work...but it doesn't and I have no clue why. Any ideas?
Thanks in advanced ![]()

