Mesa cinética
Mesa de arena con un sistema de coordinadas polar que dibuja patrones: dos NEMA 17, una aplicación para Windows y otra para Android, música en mp3 y leds rgb.
El proyecto
La mesa cinética es una superficie redonda cubierta de arena bajo la que se mueve un imán. Al otro lado del tablero, una bola de acero arrastra la arena y deja un surco: lo que dibuja el imán es lo que se ve arriba.
El carro se mueve en coordenadas polares, con un motor para el ángulo y otro para el radio. La app en Windows permite sincronizar la información de la música y las imágenes de las miniatura en una microSD. La app de Android le pregunta a la aplicación de windows la información de la música.
Todo el cálculo de movimiento se realiza en la Nucleo.
Mecánica
La prueba la estoy haciendo con un cuenco de 25cm de Ikea.
El carro radial va montado sobre una cremallera impresa en resina. El imán cuelga del carro a pocos milímetros de la superficie: si queda demasiado lejos, la bola no responde; si roza, la arena se atasca.
Electrónica
El control está compuesto de :
- STM32 Nucleo G071RB
- Dos TMC2209 a 1/16 de paso.
- Un módulo reproductor de mp3
- Una tira de leds RGB Neopixel
- Fuente de 24 V y 2,5 A.
- Final de carrera para el home del radio y otro para el ángulo.
Firmware
La Nucleo interpreta los movimientos, controla los leds y la reproducción del mp3.
// Interpola un movimiento polar repartiendo pasos entre los dos ejes
void moverPolar(float angulo, float radio, unsigned int avance) {
const long dA = lround(angulo * PASOS_POR_GRADO);
const long dR = lround(radio * PASOS_POR_MM);
const long n = max(labs(dA), labs(dR));
for (long i = 1; i <= n; i++) {
pasoAngulo((dA * i) / n - (dA * (i - 1)) / n);
pasoRadio((dR * i) / n - (dR * (i - 1)) / n);
delayMicroseconds(avance);
}
}
Cada movimiento lleva una velocidad distinta según el radio: en el centro, un grado recorre muy poca distancia y en el borde, mucha. Si se usa la misma velocidad angular en toda la mesa, los patrones exteriores salen deformados, así que la app compensa antes de enviar.
La app en Windows con VB
La aplicación está en VB y tiene tres partes:
- Editor de patrones: espirales, Lissajous, rosetones y una fórmula paramétrica para inventar formas.
El visor dibuja la trayectoria antes de enviarla, con el mismo límite de radio que tiene la mesa. Así se evita programar un patrón que se salga y acabe empujando la bola contra el aro.
Pruebas y ajustes
La arena es la parte más delicada. Con arena muy fina el surco queda limpio pero se desplaza con cualquier vibración; con arena más gruesa el patrón dura más y pierde definición. Ahora mismo uso arena de sílice fina y una bola de 15 mm.
También hubo que corregir:
- Deriva del ángulo: el home se hace siempre en el mismo punto y el firmware corrige el offset al arrancar.
- Velocidad: por encima de cierto punto la bola salta el surco; la app limita la aceleración según el radio.
Descargas
Archivos de este proyecto, con la misma licencia que la ficha.
Código, diseños y documentación de este proyecto: CC BY-NC-SA 4.0(se abre en una pestaña nueva).