Sintetizador de motor paso a paso MIDI basado en Arduino
Componentes y suministros
| Arduino UNO | × | 1 | Puedes usar cualquier Arduino similar para ampliar E/S |
| Driver de motor paso a paso A4988 | × | 4 | |
| Arduino CNC Shield V3 | × | 1 | Opcional, puedes cablear manualmente los drivers A4988 |
| Fuente de alimentación 12V 6A | × | 1 | O similar para alimentar los motores paso a paso |
| Motor paso a paso NEMA 17 (OpenBuilds) | × | 4 |
Herramientas y máquinas necesarias
- Impresora 3D (genérica) - Completamente opcional
Sobre este proyecto
Vi en YouTube música hecha con unidades de disquete. Sabiendo que estas se controlan con motores paso a paso, decidí crear mi propio generador de sonido con motores paso a paso.
Había visto proyectos similares, pero ninguno compartía el código o este era muy limitado/defectuoso. Al estar aprendiendo C++ en la escuela, decidí aplicar mis conocimientos.
Mi objetivo: crear un código simple, fácil de usar y modificar. ¡Y lo logré!
El proceso general
En términos básicos, necesitaba extraer datos MIDI y convertirlos en una velocidad que hiciera al motor paso a paso generar el tono correspondiente.
Extracción de datos MIDI
Esta parte fue sencilla. Usando la librería MIDI, interpreto los datos MIDI y los envío a otra función para controlar la velocidad.
Control de los motores paso a paso
Los drivers A4988 tienen dos pines que controlan el movimiento: STEP y DIR. DIR controla la dirección (horario/antihorario) y STEP mueve el motor un paso cada vez que se pone en HIGH (la cantidad depende de la resolución de microstepping). Como el sonido no depende de la dirección, la fijo en LOW (o la conecto a GND). Ahora puedo hacer avanzar el motor con digitalWrite.
El reto
El desafío principal era controlar múltiples motores simultáneamente. No podía usar delay() (bloquearía los demás). En su lugar, usé micros() para calcular la duración de los pulsos. Como cada motor necesita diferente velocidad, usé arrays para las variables de velocidad, donde el índice corresponde al número de motor y al canal MIDI.
Inicialmente usé millis(), pero carecía de resolución para producir tonos distintos. Los arrays permiten controlar cualquier número de motores cambiando solo el tamaño del array.
Cálculo de velocidades
En una prueba, envié una onda cuadrada de 440 Hz (con tone) al pin STEP y el motor generó un tono La4 (A440). Como el valor de velocidad enviado es el período en microsegundos, convertí las frecuencias de las notas a períodos. Guardé estos valores en un array pitchValues, indexado por valor de nota MIDI. Un valor de velocidad 0 significa parada.
Usar un array en lugar de fórmula da control total sobre cada nota, definiendo el rango del instrumento. Además, cerca de la frecuencia de resonancia el motor produce un ruido terrible (parece que se bloquea). Identifiqué mi resonancia cerca de Fa3 (F3), así que cambié Mi3, Fa3 y Fa#3 una octava para solucionarlo. (Puedes comprobarlo con el código "Tune Stepper.ino")
Creación de un dispositivo MIDI USB
Quería que el dispositivo apareciera como MIDI USB. Descubrí que se puede cambiar el firmware del chip AVR de la placa: HIDUINO o mocuLUFA. Elegí mocuLUFA por su opción dual boot: puedo reprogramar el Arduino sin reflashear el AVR, solo poniendo un jumper en el header ICSP para alternar entre USB MIDI y USB Serial.
Código
Visita mi repositorio de GitHub para instrucciones de configuración e instalación:
https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument
Piezas personalizadas y cajas
- Soporte para motores paso a paso
- "Dedo" para el motor (solo estético)
Esquemáticos
- Ubicación de jumpers para usar el Shield
- Cableado en protoboard
- Esquemático del cableado Fritzing (incluye valores de componentes)
- Distribución para conector MIDI DIN
Proceso de manufactura
- Ámbar: De Resina Antigua a Tesoro Científico — Historia, Propiedades y Usos Modernos
- La Guillotina: Historia, Diseño y Legado
- Silicio: Propiedades, Producción y Perspectivas de Mercado
- El Ukelele: De Raíces Portuguesas a la Artesanía Moderna
- Guía completa de la industria avícola en EE. UU.: historia, producción y control de calidad
- Compost: La solución definitiva para enriquecer el suelo
- Gelatina: de proteína antigua a aplicaciones modernas — producción, usos y seguridad
- La evolución y fabricación de cerraduras modernas de cilindro de pines
- El Vodka: De la Destilación Antigua a la Producción Moderna
- Leche: Producción, Procesado y Nutrición en Estados Unidos
- Hierro: propiedades, historia y aplicaciones cotidianas