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)

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