Proyecto con varios servos y leds

Buenas.
La verdad es que llevo ya unos dias un poco liado. No es mi primer proyecto con arduino, pero si el primero en que meto cierta complejidad (para mi).

La idea básica es: mover 3 servos de 15 kg, 2 servos 9g y encender diversos leds conectados a distintos pines.

Lo he conectado de la siguiente forma:

  • Los servos de 15 kg van todos los positivos y negativos a una bateria de 7.4V y cada señal a un pin digital distinto de arduino.
  • Los servos 9g van los positivos a la salida de 5v de arduino, los negativos a tierra y la señal a dos pines digitales distintos.
  • La bateria conectada a tierra y a Vin.
  • Los leds van a tierra y cada conjunto de leds a un pin digital distinto.

El código ahora mismo es lo de menos, ya que no me funciona ni siquiera un parpadeo de un led si lo desconecto del usb del ordenador y le enciendo la batería (que le he puesto un interruptor)

Aun así, este es el código que tiene cargado.

[i]int ledvisor = 5;
 int ledrejilla = 3;
 int primeravez=1;
 

void setup() {

pinMode(ledvisor, OUTPUT);
pinMode(ledrejilla, OUTPUT);

}

void loop() {
 
if (primeravez == 1) //esto es el ciclo que hace al arrancar, porque luego esto deja de ser igual a 1
  {               
digitalWrite(ledvisor, HIGH);
digitalWrite(ledrejilla, LOW);
  primeravez =2;
  }

  delay (1000);
digitalWrite(ledrejilla, HIGH);
delay (1000);
digitalWrite(ledrejilla, LOW);

}[/i]

Y ya os digo... una vez desconectado del ordenador... no funciona... Se enciende el Led del pin 5... pero no los que estan en el loop.

¿Alguna idea de por donde puedo tirar?

Es que estoy por desmontarlo todo y volver a montarlo, lo malo es que lo tengotodo soldado y pegado en su sitio... porque lo fui probando individualmente cada componente, y como funcionaba bien... pues lo soldé y lo puse todo en su sitio... pensando en que ya me preocuparia luego de la programación.

Muchas gracias

Antes de que te regañen usa los tags del foto para codigo que los puedes ver si das clic en Preview
el icono tiene esta forma </>
Eso ayuda a la mejor visualización del post y ya que esta la herramienta en el foro ¿Por que no usarla?

Respondiendo a tu pregunta.
El pin de 5v de arduino no alimenta motores en general por cuestión de amperaje (desconozco el limite de corriente exacto) pero creo que debe ser unos 100mA

Así que usa regulador externo para los servos de 5v
(corta la linea entre los servos de 9g y el pin de 5v de arduino para que hagas un puente a la nueva fuente regulada de 5 voltios que tienes que hacer)
Eso por cuanto al hardware

el codigo
no das información suficiente de que es lo que quieres hacer “solo mover servos y encender leds”

hay esta una pagina que te explica: que son, como funcionan y que codigos nesecitas para que funcionen los servomotores

Servomotores

ahora con respecto a esto

if (primeravez == 1) //esto es el ciclo que hace al arrancar, porque luego esto deja de ser igual a 1
  {               
digitalWrite(ledvisor, HIGH);
digitalWrite(ledrejilla, LOW);
  primeravez =2;
  }

Si quieres que esta parte del código se ejecute por primera vez vasta hacer esto

void setup(){
	pinMode(ledvisor, OUTPUT);
	pinMode(ledrejilla, OUTPUT);
	/////Como setup se ejecuta una ves entonces estas 
	//lineas de abajo tambien se ejecutan una sola ves
	//y siempre estaran despues de configurar el modo de trabajo
	//de los pines
	digitalWrite(ledvisor, HIGH);
	digitalWrite(ledrejilla, LOW);
}

en la siguiente parte de los delay y digitalWrite solo es el ejemplo de blink led de arduino

Si no dices quiero que se prendan los led cuando suceda algo o los servos hagan algo segun sensen o se les de orden en tu post no se te puede dar gran ayuda.

Hay estan las normas del foro que ayudan mucho si se las lee

Gracias por la respuesta.

Los servos “grandes” los tengo alimentados externamente, desde una fuente de 7.4V y al arduino conectados por el cable de señal.

Dado que no conseguía avanzar, ahora mismo he prescindido de los servos y los tengo desconectados.

Estoy trabajando solo con los leds y su programación, luego le añadiré lo demás.

Y aun así, me ha surgido un problema.
Básicamente, tengo un ciclo de encendido de leds…

int led_ea = 10;           // pin del led de la espalda alta 
int led_eb = 11;      // pin del led de la espalda baja
int led_bat = 8;     // pin del indicador de bateria
int led_batblink = 12;   //pin del indicador parpadeante de bateria
int led_front = 9;   // pin del led del peto frontal
//int s1 = 2;     //pin del led1 del secuenciador
//int s2 = 3;     //pin del led2 del secuenciador
//int s3 = 4;     //pin del led3 del secuenciador
//int s4 = 5;     //pin del led4 del secuenciador
//int s5 = 6;     //pin del led5 del secuenciador
//int s6 = 7;     //pin del led6 del secuenciador
int timersecuencia = 100;  //temporizador de encendido del secuenciador
int timersecuenciaonoff = 500;

int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by

void setup() {
  // put your setup code here, to run once:
pinMode(led_ea, OUTPUT);
pinMode(led_eb, OUTPUT);
pinMode(led_bat, OUTPUT);
pinMode(led_batblink, OUTPUT);
pinMode(led_front, OUTPUT);
for (int s = 2; s < 8; s++) {
    pinMode(s, OUTPUT);
}
//hasta aqui se definen los pines.


//Empieza el encendido


//PARTE TRASERA

digitalWrite(led_bat, HIGH);
for (int i=1; i<4; i++) {
    digitalWrite(led_batblink, HIGH);
    delay(timersecuenciaonoff);
  digitalWrite(led_batblink, LOW);
  delay(timersecuenciaonoff);
}
    digitalWrite(led_batblink, HIGH);

//encendemos la espalda baja

digitalWrite(led_eb, HIGH);
delay(100);
digitalWrite(led_eb, LOW);
delay(50);
digitalWrite(led_eb, HIGH);
delay(70);
digitalWrite(led_eb, LOW);
delay(50);
  // wait for 30 milliseconds to see the dimming effect
   
digitalWrite(led_eb, HIGH);
//encendemos la espalda baja

    for (int l=1; l<256; l++){
 analogWrite(led_ea, brightness);
  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;
  // reverse the direction of the fading at the ends of the fade:
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }
  // wait for 30 milliseconds to see the dimming effect
  delay(20);
  }
  digitalWrite(led_ea, HIGH);   
 
//PARTE DELANTERA

//el secuenciador se ilumina y parpadea completo dos veces

for (int s = 2; s < 8; s++) {  
    digitalWrite(s, HIGH);
    delay(timersecuencia);
  }  
  delay (timersecuenciaonoff);
for (int s = 2; s < 8; s++) {  
    digitalWrite(s, LOW);
  }  
  delay (timersecuenciaonoff);
  for (int s = 2; s < 8; s++) {  
    digitalWrite(s, HIGH);
  }  
  delay (timersecuenciaonoff);
  for (int s = 2; s < 8; s++) {  
    digitalWrite(s, LOW);
  }  
   delay (timersecuenciaonoff);
  for (int s = 2; s < 8; s++) {  
    digitalWrite(s, HIGH);
  }  
  delay (timersecuenciaonoff);

//enciende el frontal con parpadeo y blink

digitalWrite(led_front, HIGH);
delay(100);
digitalWrite(led_front, LOW);
delay(50);
digitalWrite(led_front, HIGH);
delay(70);
digitalWrite(led_front, LOW);
delay(50);

for (int j=1; j<256; j++){
 analogWrite(led_front, brightness);
  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;
  // reverse the direction of the fading at the ends of the fade:
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }
  // wait for 30 milliseconds to see the dimming effect
  delay(20);
}
 digitalWrite(led_front, HIGH); 

//pasamos al loop apagando el secuenciador para que pueda oscilar

  for (int s = 2; s < 8; s++) {  
    digitalWrite(s, LOW);
   }
   delay (timersecuenciaonoff);
    } 
    
void loop() {
  

for (int s = 2; s < 8; s++) {  
    digitalWrite(s, HIGH);
    delay(timersecuencia);
  }  
  for (int s = 2; s < 8; s++) {  
    digitalWrite(s, LOW);
    delay(timersecuencia);
  }  
digitalWrite(led_batblink, HIGH);
    delay(timersecuenciaonoff);
  digitalWrite(led_batblink, LOW);

}

Y funciona perfectamente… siempre que lo conecte al USB, una vez le alimento por 9V a traves del pin Vin… me hace solo una parte del código, y luego se resetea el arduino y vuelve a empezar…

¿Alguna idea sobre este problema?

Me autorespondo.
Cambiando la batería por otra funciona bien… entiendo que se debe entonces a la carga de la bateria