Bolas de Navidad colgando de motores BYJ48

Hola amigos,

Quiero colgar del techo siete bolas de navidad y hacer una animación subiendo y bajando las bolas. (Adjunto archivo de muestra). Cada bola iria a un stepper BYJ48, atadas a un hilo.

Dispongo de 7 bolas, 7 motores, y 7 placas Arduino nano.
Cada arduino controla un motor. Todos los Arduinos se encienden a la vez.

He hecho un sketch sencillo, suben y bajan. Los 7 Arduinos comienzan bien, pero al cabo de unos minutos a pesar de tener el mismo sketch las bolas empiezan a desincronizarse y se estropea el efecto.

Hay alguna manera de sincronizar todo de forma permanente?
Hay alguna manera de simplificar el proyecto?

Muchas gracias de antemano.

bolas.zip (499 KB)

Y como los sincronizas?

surbyte:
Y como los sincronizas?

Encendiéndolos todos a la vez. Ya se que es una chapuza. Por eso necesito vuestra ayuda.

Para conseguir ese efecto de cascada:
Al primer arduino le pongo un delay (1000);
Al 2º delay (2000);
Al 3º delay (3000);
Al 4º delay (4000);
Al 5º delay (5000);
Al 6º delay (6000);
Al 7º delay (7000);

Funciona bien durante unos minutos, pero se va desincronizando todo.

Si vas a usar 7 arduinos y pretendes sincronizarlos con el arranque vas MUY MUY MAL.

Segundo GRAN ERROR es usar delay()

Debes aprender a usar millis()

Ve a Documentación => Indice de temas tutoriales => millis()

Tengo varias ideas, pero necesito VER como los motores mueven las bolas. Cómo cuelgan, etc.

Yo usaría un switch final de carrera o un sensor óptico en cada bola para que al llegar a la posición superior me informe y le informe a cada arduino donde se encuentran los demás.

No he visto el código ni nada.

Ahora si he visto el archivo.zip y me encuentro con una animación de 7 bolas y 0 código.

Falta información.

Por experiencia propia los pulsos de clock de las placas de arduino no son exactamente iguales, a pesar de que las placas si lo sean, inclusive de una misma partida. No podés pretender que estén siempre sincronizados si no los vinculás de alguna manera ( física o inalámbrica ). Lo más sencillo creo que sería utilizar un arduino como maestro, el que marca el ritmo, y que le envíe una señal de disparo al resto, asi todos estarían resincronizándose permanentemente. Como si fuera un final de carreras. Esto lo podés hacer físicamente vinculando una salida digital del maestro con una entrada digital de los esclavos, la cual marcaría el ritmo de subida o bajada de los motores. El otro problema que tenés es que si los motores no son steppers cada uno puede tener distinta velocidad y el efecto que pretendés no se daría. Si fueran todos steppers podés sincronizarlos enviando un pulso para cada paso de los motores , asegurándote así que todos van a tener el mismo ritmo( velocidad).

Os dejo un esquema de la instalación:

Muchísimas gracias por las respuestas, pero no tengo ni idea de cómo realizar esa sincronización entre las placas. He estado investigando pero no consigo aclararme.
Creo que no debería ser muy complicado, pero soy un principiante y este tema me esta volviendo loco.

El código por cada motor podría ser este, simplemente sube y baja:

#include <TinyStepper_28BYJ_48.h>
const int LED_PIN = 13;
const int MOTOR_IN1_PIN = 6;
const int MOTOR_IN2_PIN = 5;
const int MOTOR_IN3_PIN = 4;
const int MOTOR_IN4_PIN = 3;
const int STEPS_PER_REVOLUTION = 4096;
TinyStepper_28BYJ_48 stepper;

void setup() 
{
  pinMode(LED_PIN, OUTPUT);   
  Serial.begin(9600);
  stepper.connectToPins(MOTOR_IN1_PIN, MOTOR_IN2_PIN, MOTOR_IN3_PIN, MOTOR_IN4_PIN);
  stepper.setSpeedInStepsPerSecond(650);
  stepper.setAccelerationInStepsPerSecondPerSecond(600);
}


void loop() 
{
        stepper.moveToPositionInSteps(4.096*0); //marco la distanca en mm que quiero que se mueva la bola
        stepper.moveToPositionInSteps(4.096*1000); //marco la distanca en mm que quiero que se mueva la bola
        
        }

Para el caso, cas habria tirado mas por un Mega que por 7 nanos.
Dado que yo tampoco conrolo demasiado el tem de mlis y comuncacion entre placas,se me ocurre una solucion.
Ha ver si consigo explicarme. Seria que el primer arduino, en el momento que quieres que se active la segunda, poner un pin del del primero en HIGH y el segundo nano recibiria un pulso igual que si usaramos un pulsador para activarlo, atraves de un pin INPUT y asi sucesivamente.
Se que es una solucion poco elegante y “pachanguera”, pero poniendome en la situacion de que a mi aun tambien me queda mucho que aprender de estos bichios y hay muchos como yo aqui lo dejo.
Por cierto, es importante que todos los negativos de los nanos esten interconectados.
Salud y espero que te sirva al menos de via de escape para solucionarlo.

Gracias Antykrysto, voy a probar eso que dices porque lo veo factible. Te explicas perfectamente.
Gracias a todos también por vuestros sabios consejos. Ya os contaré a ver que tal.

Dado que yo tampoco conrolo demasiado el tem de mlis y comuncacion entre placas,se me ocurre una solucion.

La comunicación entre placas se debe a que el OP propuso 7 nanos.

Se puede hacer de mil formas, incluso hacen falta solo 4 pines x 7 = 28 pines para controlar 7 puentes H.

La sincronización si no usara stepper sería simplemente una marca en la cuerda que sostiene la bola y al pasar por determinado punto le da la indicación al Arduino.

Si son stepper no necesitas marca ni sincronizar nada. Todo esta sincronizado.

Se que es una solucion poco elegante y "pachanguera", pero poniendome en la situacion de que a mi aun tambien me queda mucho que aprender de estos bichios y hay muchos como yo aqui lo dejo.

Funciona de maravilla y es justo lo que necesitaba. Gracias!

Me alegro de que haberte sido de ayuda.
un abrazo

Gracias a toda la comunidad. Llevo todo el día con esto, pero ha merecido la pena. Sin vuestra ayuda no hubiese sabido hacerlo.
1 Nano Master.
7 Nanos esclavos.
Listo el código de prueba y el montaje en su pcb. Ahora a montar todo en escala grande!