516 Broken Pipe - Bluehtooh + Arduino

Hello, I have a problem.

The project: I am making a robot with 4 servomotors, 2 work for walking and two as arms. The servos move via Bluetooth with an app I made in my app inventor. (I attach blocks). And this is my circuit made in thinkercad:Login - Tinkercad

The problem:
Sometimes when I activate the servos that make it walk, the Bluetooth disconnects, this happens every 2 seconds or every minute, it is very variable. The bluetooth lights are on as if it were connected, sometimes the entire bluetooth turns off:(((

#include <Servo.h>  // Incluye la biblioteca Servo.h para controlar servos

Servo patarriba;
Servo patabajo;
Servo manoarriba;
Servo manoabajo;

int estado = 'r';  // Declara una variable estado que guarda el carácter recibido desde el Bluetooth
bool patarribaPos90 = true;  // Variable para rastrear la posición de patarriba
bool manoarribaPos90 = true; // Variable para rastrear la posición de manoarriba
bool aPos90 = true;          // Variable para rastrear la posición de los servos controlados por A
bool reproducir = false;     // Variable para controlar la reproducción continua de la melodía
bool moverServos = false;    // Variable para controlar el movimiento repetitivo de los servos

const int tonePin = 8;  // Pin para el tono

unsigned long previousMillis = 0;  // Almacena el último tiempo en que se actualizó el tono
int noteIndex = 0;  // Índice de la nota actual
float noteDuration = 0;  // Duración de la nota actual

// Define las notas y sus duraciones en milisegundos con decimales
const int melody[] = {493, 1046, 622, 587, 523, 523, 587, 622, 523, 466, 391, 783, 622, 587, 523, 523, 587, 622, 587, 466, 523, 523, 1046, 622, 523, 523, 587, 622, 523, 466, 391, 783, 622, 698, 783, 523, 587, 698, 587, 293, 523, 195, 207, 207, 207, 207, 195, 146, 195, 195, 195, 207, 207, 207, 207, 207, 155, 195, 174, 195, 195};
const float noteDurations[] = {178.529481, 439.276485, 209.067418, 251.350716, 96.311957, 331.219168, 331.219168, 253.699788, 326.520957, 277.190509, 458.069063, 263.096077, 126.849894, 213.765629, 164.435229, 166.784301, 324.772019, 256.04886, 328.653429, 291.284942, 582.569885, 415.785764, 286.585731, 368.804322, 286.585731, 49.330514, 333.574907, 209.067418, 119.802678, 39.934226, 326.520957, 232.55814, 389.946304, 136.246183, 328.653429, 293.634014, 65.774019, 178.529481, 148.65821, 268.127554, 234.906211, 49.330514, 112.755462, 256.04886, 897.345548, 105.708246, 225.510924, 96.311957, 232.55814, 65.774019, 263.096077, 93.962886, 234.906211, 65.774019, 263.096077, 101.010035, 56.377731, 164.435229, 63.424947, 268.127554, 87.113001, 239.604422, 79.281184, 251.350716, 96.311957, 230.209068, 89.297407, 239.604422, 101.010035, 223.161852, 79.281184, 84.566596, 138.595255, 30.538938, 89.297407, 68.424291, 164.435229, 75.170307, 91.613812, 117.453606};

void setup() {
  Serial.begin(9600);  // Inicializa la comunicación serial a 9600 baudios

  patarriba.attach(3);   // Conecta el servo patarriba al pin 3 del Arduino
  patabajo.attach(2);    // Conecta el servo patabajo al pin 2 del Arduino
  manoarriba.attach(5);  // Conecta el servo manoarriba al pin 5 del Arduino
  manoabajo.attach(4);   // Conecta el servo manoabajo al pin 4 del Arduino

  patarriba.write(90);
  patabajo.write(90);
  manoarriba.write(90);
  manoabajo.write(80);

  pinMode(tonePin, OUTPUT);  // Configura el pin del tono como salida
}

void loop() {
  if (Serial.available() > 0) {    
    estado = Serial.read();      
  }
 
  if (estado == 'A') {             // Si el valor recibido es 'A'
    if (aPos90) {
      manoarriba.write(90);
      patarriba.write(90);
    } else {
      manoarriba.write(0);
      patarriba.write(0);
    }
    aPos90 = !aPos90;  // Alterna la posición
    estado = 'r';  // Resetea el estado para evitar repetición continua
  }
 
  if (estado == 'B') {             // Si el valor recibido es 'B'
    if (patarribaPos90) {
      patarriba.write(0);
    } else {
      patarriba.write(90);
    }
    patarribaPos90 = !patarribaPos90;  // Alterna la posición
    estado = 'r';  // Resetea el estado para evitar repetición continua
  }  // Cierra la condición 'B'

  if (estado == 'D') {             // Si el valor recibido es 'C'
    manoabajo.write(80);
    patabajo.write(90);
    delay(200);
    manoabajo.write (110); 
    patabajo.write(50);   // Cambia a 70 para mover hacia atrás
    delay(50);
  }  // Cierra la condición 'C'

  if (estado == 'C') {             // Si el valor recibido es 'D'
    manoabajo.write(80);
    patabajo.write(90);
    delay(200);
    manoabajo.write(50);  // Cambia a 110 para mover hacia adelante
    patabajo.write(110);   // Cambia a 110 para mover hacia adelante
    delay(50);
  }  // Cierra la condición 'D'

  if (estado == 'E') {             // Si el valor recibido es 'E'
    if (manoarribaPos90) {
      manoarriba.write(0);
    } else {
      manoarriba.write(90);
    }
    manoarribaPos90 = !manoarribaPos90;  // Alterna la posición
    estado = 'r';  // Resetea el estado para evitar repetición continua
  }  // Cierra la condición 'E'

  if (estado == 'F') {             // Si el valor recibido es 'F'
    reproducir = true;  // Activa la reproducción continua
    estado = 'r';  // Resetea el estado para evitar repetición continua
  }  // Cierra la condición 'F'

  if (estado == 'G') {             // Si el valor recibido es 'G'
    manoabajo.write(80);
    patabajo.write(90);
    delay(200);
    manoabajo.write (50);  // Cambia a 70 para mover hacia atrás
    patabajo.write(50);   // Cambia a 70 para mover hacia atrás
    delay(50);
  }  // Cierra la condición 'G'
  
if (estado == 'I') {             // Si el valor recibido es 'I'
    reproducir = false;  // Detiene la reproducción continua
    moverServos = false;  // Detiene el movimiento repetitivo
    noTone(tonePin);  // Detiene cualquier tono que esté sonando
    patarriba.write(90);  // Pone todos los servos a 90°
    patabajo.write(90);
    manoarriba.write(90);
    manoabajo.write(90);
    estado = 'r';  // Resetea el estado para evitar repetición continua
  }  // Cierra la condición 'I'

  if (reproducir) {
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= noteDuration) {
      previousMillis = currentMillis;
      tone(tonePin, melody[noteIndex], noteDurations[noteIndex]);
      noteDuration = noteDurations[noteIndex];
      noteIndex++;
      if (noteIndex >= sizeof(melody) / sizeof(melody[0])) {
        noteIndex = 0;  // Reinicia la melodía
      }
    }
  }
}



Subiendo: Captura de pantalla 2024-12-01 192805.png…

Note: My power supply is the arduino and I connected it to the computer, they told me that it could be a problem with the power supply and that it is not enough to power the 4 servos, but all 4 of them work for my classmates and the teacher. servos (I don't know their code and circuit arrangement)