Servomotor desconecta la tarjeta arduino al activarse

Saludos, disculpen, estoy tratando de realizar un robot soccer controlado con un control de PS y un servo chuta el balón, pero al momento de activar el servo la tarjeta se desconecta, esto solo sucede con las baterías 3 baterías de 3,7v en serie (11.1 V), conectada la tarjeta al puerto USB funciona correctamente.

#include <PS2X_lib.h>
#include <Servo.h>

int vde=6, def=5, der=4, izf=7, izr=8, viz=9;
int sp=255;
int t=0;
PS2X ps2x;
Servo chu;
void setup(){
 Serial.begin(9600);
 ps2x.config_gamepad(13,11,10,12); 
 Serial.println("En linea");
  pinMode (vde,OUTPUT);
  pinMode (def,OUTPUT);
  pinMode (der,OUTPUT);
  pinMode (izf,OUTPUT);
  pinMode (izr,OUTPUT);
  pinMode (viz,OUTPUT);
  chu.attach(3);
  chu.write(0);
}

void adelante ()
{
  digitalWrite(vde, sp);
  digitalWrite(def, HIGH);
  digitalWrite(der, LOW);
  digitalWrite(izf, HIGH);
  digitalWrite(izr, LOW);
  digitalWrite(viz, sp);
}

void izquierda ()
{
  digitalWrite(vde, sp);
  digitalWrite(def, HIGH);
  digitalWrite(der, LOW);
  digitalWrite(izf, LOW);
  digitalWrite(izr, HIGH);
  digitalWrite(viz, sp);
}

void derecha ()
{
  digitalWrite(vde, sp);
  digitalWrite(def, LOW);
  digitalWrite(der, HIGH);
  digitalWrite(izf, HIGH);
  digitalWrite(izr, LOW);
  digitalWrite(viz, sp);
}

void atras ()
{
  digitalWrite(vde, sp);
  digitalWrite(def, LOW);
  digitalWrite(der, HIGH);
  digitalWrite(izf, LOW);
  digitalWrite(izr, HIGH);
  digitalWrite(viz, sp);
}

void alto ()
{
  digitalWrite(vde, 0);
  digitalWrite(def, LOW);
  digitalWrite(der, LOW);
  digitalWrite(izf, LOW);
  digitalWrite(izr, LOW);
  digitalWrite(viz, 0);
}

void chuta (){
  chu.write(90);
  delay(500);
  chu.write(0);
}

void loop(){
   
    ps2x.read_gamepad();
    
    if(ps2x.Button(PSB_START))
         Serial.println("Start is being held");
    if(ps2x.Button(PSB_SELECT))
         Serial.println("Select is being held");
         
         
     if(ps2x.Button(PSB_PAD_UP)) {
      adelante();
      delay (t);
      Serial.println("adelante");
      }
      if(ps2x.Button(PSB_PAD_RIGHT)){
         derecha();
         delay (t);
         Serial.println("derecha");
      }
      if(ps2x.Button(PSB_PAD_LEFT)){
          izquierda();
          delay (t);
          Serial.println("izquierda");
      }
      if(ps2x.Button(PSB_PAD_DOWN)){
         atras();
         delay (t);
         Serial.println("atras");
      }   
  
    
    if (ps2x.NewButtonState()) 
    {         
         if(ps2x.Button(PSB_GREEN)){
         Serial.println("Triangle pressed");
                  chuta();
         Serial.println("chuta");
         }
         if(ps2x.Button(PSB_RED))
         Serial.println("Circle pressed");
         if(ps2x.Button(PSB_BLUE))
         Serial.println("X pressed");
         if(ps2x.Button(PSB_PINK))
         Serial.println("Square pressed");         
         if(ps2x.Button(PSB_L1))
         Serial.println("L1_Presed");
         if(ps2x.Button(PSB_R1)){
         Serial.println("R1_Presed");
                    sp=255;
                    Serial.println("Velocidad 1");
         }
         if(ps2x.Button(PSB_L2))
         Serial.println("L2_pressed");
         if(ps2x.Button(PSB_R2)){
         Serial.println("R2_pressed");
                    sp=100;
                    Serial.println("Velocidad 2");
         }
    }   

        if(ps2x.ButtonReleased(PSB_PAD_UP)){
         Serial.println("Alto");
         alto();
        }
         if(ps2x.ButtonReleased(PSB_PAD_RIGHT)){
         Serial.println("Alto");
         alto();
         }
         if(ps2x.ButtonReleased(PSB_PAD_LEFT)){
         Serial.println("Alto");
         alto();
         }
         if(ps2x.ButtonReleased(PSB_PAD_DOWN)){            
         Serial.println("Alto");
         alto();
         }
     
}

Debes alimentar el servo externamente. El microcontrolador sirve para el control, no para la alimentación.

Yo he trabajado con radiocontrol y puedo decir alguna cosa por experiencia y es que las baterías al meterles carga bajan su voltaje durante el uso, a veces varios voltios, eso depende mucho del tipo, capacidad e intensidad máxima de la batería y si encima la carga varía es como una montaña rusa de voltajes.
Por lo que puedes tener varios problemas, por suerte hay solución fácil y es la misma para todos los casos:

1º Que tu batería baje más que el voltaje mínimo del arduino (muy posible dado que las aceleraciones pueden consumir incluso el doble de corriente que el uso nominal)

2º Que el arduino no le gusten las variaciones de voltaje rápidas y en cierto punto desista y se apague

Esas opciones son las más probables y la solución es fácil ponle una batería pequeña aparte para el arduino (pero mismo gnd porque a veces el controlador de velocidad no va si no es el mismo gnd) y con eso diría que debería solucionarse (si quieres reducir el peso más puedes usar una única batería con un dc-dc step up o por llamarlo de otra manera un voltage booster que el voltaje de entrada sea el mínimo posible para que lo puedas usar con tu batería)
si el problema es el segundo, un estabilizador de voltaje lo apañaría, pero sigo recomendando poner baterías separadas como en control de alto voltaje que se usan los controladores en un sistema de bajo voltaje ej: un coche eléctrico cualquiera.
Espero que te haya servido.

Si estas alimentando todo desde el L298 te diré que no es buena idea.
Tiene un 7805 y ha probado en muchos proyectos míos lo que describes. Entonces mi consejo es que agregues una fuente DC DC MP1584 como esta


La conectas a las entrada de 12V y alimentas el Arduino con 6.5 via Vin o si quieres la ajustasa 5.0V y lo alimentas por Vcc o sea 5V.
Entonces el L298 provee alimentación para los motores y Arduino tendrá fuente independiente.

Movido a Software
No es compatible con los requerimientos para la sección Proyectos.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.