Voltage Drop in Servos

Greetings!
This is my first time posting in the Forum, so bare with me.

I’m currently building a model plane (it’s not gonna fly), and I’m planning on using servos to move the ailerons, the elevator, and the rudder with the servos and a joystick. I’m using 4 SG90 servos, one 9V battery with a L7805CV voltage regulator so the servos get 5V and an Arduino Uno. When all is conected and the code is uploaded to the Arduino Uno, with a multimeter I’m getting 2.05 V and obviuosly, the servos don’t respond. Can anyboy help me solve my problem?

The code I’m using and a picture of the schematic is attached to the post in a Zip File.
Hope this get’s attention hehe

4servo_ContSist.zip (172 KB)

Most people don't like openng zip files. Please post your code (in code tags) and attach the inage(s) to the message.

Sure no problem, this is the code:

#include <Servo.h>

Servo servoAleronIzq; // Creams un objeto de clase servo para objeto
Servo servoAleronDer;
Servo servoElevador;
Servo servoRudder;

int const servoMotor1 = 3; 
int const servoMotor2 = 5;
int const servoMotor3 = 6;
int const servoMotor4 = 9;

int joystickX = 0; // creamos variables para almacenar la posicion
int joystickXNEG = 0;
int joystickY = 0;

int eixoX = A0; // Asignamos el pin analogico A0 a la variable del Eje X
int eixoY = A1; // asignamos el ping analogico A0 a la bariable del eje Y

void setup() {

  servoAleronIzq.attach(servoMotor1); // asociamos los pines digital PWN a los objetos servo
  servoAleronDer.attach(servoMotor2);
  servoElevador.attach(servoMotor3);
  servoRudder.attach(servoMotor4);

  servoAleronIzq.write(90); // ubicamos su posición del motor 
  servoAleronDer.write(90);
  servoElevador.write(90);
  servoRudder.write(90);

  Serial.begin(9600); //activamos el monitor serial para mostrar el funcionamiento

}

void loop() {

  joystickX = analogRead(eixoX); // lee el valor de eixoX y lo almacena
  joystickXNEG = -(joystickX);
  joystickY = analogRead(eixoY);

  void imprimeEixo();

  joystickX = map(joystickX, 0, 1023, 0, 180); // Mapea el valor leido del joystick de  0 a 1023
  joystickY = map(joystickY, 0, 1023, 0, 180);// lo asigna al movimiento del servo de 0 a 180 grados
  joystickXNEG = map(joystickXNEG, 0, 1, 0, 180); //Mapea el valor del joystick a un valor digital

  servoAleronIzq.write(joystickX); // definamos el valor de la posicion del servo motor
  servoAleronDer.write(joystickXNEG);
  servoElevador.write(joystickY);
  servoRudder.write(joystickY);
  
  delay(40); // esperamos 40milisegundos para darle estabilidad a los servo motores

}

void imprimeEixos(){
  Serial.print(" X=");
  Serial.print(joystickX);
  Serial.print(" Y=");
  Serial.print(joystickY);
//  Serial.print(" Z=");
//  Serial.print(joystickZ);
  }

Presumably that 2V is when under load? If it's not, then I guess your 7805 is stuffed.

That said, according to a data sheet I found, a 7805 is good for 1.5A tops. According to this, those servos draw 700mA odd at stall. So if you're trying to start them all at the same time, you're heading towards needing 3A.

First of all: 7805 needs capacitors from in- and output to GND, say 10 µF each.

with a multimeter I'm getting 2.05 V

On the Arduino or on the battery?

What happens to this voltage when you disconnect the servo's one by one?

fionning_macara:
you're heading towards needing 3A.

In that case it's not just the 7805 that can't deliver the necessary current, but also the 9V battery! You'll need a better power supply.

Erik_Baas:
In that case it's not just the 7805 that can't deliver the necessary current, but also the 9V battery! You'll need a better power supply.

Good point...

Throw the 9V battery and the 7805 away and use 4 x 1.2V NiMH AA rechargeable batteries instead (Eneloops or similar).

And you'd have a better chance of it working correctly if you didn't connect the power to the servos through a breadboard. They're designed for VERY LOW currents not the sort of current that even small servos take.

Steve