Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Sintetizador de pasos MIDI Arduino

Componentes y suministros

Arduino UNO
Puede usar cualquier Arduino similar para expandir el IO.
× 1
Controlador paso a paso A4988
× 4
Arduino CNC Shield V3
Opcional, simplemente puede conectar manualmente los controladores A4988
× 1
Fuente de alimentación 12V 6A
O similar para conducir los motores paso a paso
× 1
Motor paso a paso OpenBuilds NEMA 17
× 4

Herramientas y máquinas necesarias

Impresora 3D (genérica)
¡Completamente opcional!

Acerca de este proyecto

Míralo en acción aquí.

Estaba haciendo lo habitual, navegando en YouTube cuando vi algo de música en disquete. Sabiendo que las unidades de disquete están controladas por motores paso a paso, decidí hacer mi propio generador de sonido con motor paso a paso.

Había visto que la gente había hecho esto antes, pero cada instancia no había compartido el código o su código era muy defectuoso y / o limitado.

Después de haber estado aprendiendo C ++ en la escuela, decidí poner en práctica mis habilidades.

Lo que realmente quería hacer era crear un código que fuera simple y fácil de usar y modificar. ¡Y eso es exactamente lo que hice!

El En general Proceso

Para empezar, pensé en lo que había que hacer. En los términos más básicos, necesitaba extraer datos MIDI y convertirlos en una velocidad que hiciera que un motor paso a paso creara el tono correspondiente.

Extrayendo datos MIDI

Esta parte fue bastante fácil. Al utilizar la biblioteca MIDI, pude interpretar los datos MIDI y enviarlos a otra función para controlar la velocidad.

Controlando los Steppers

Los controladores del motor paso a paso A4988 tienen dos pines que controlan directamente el movimiento paso a paso; PASO y DIR. DIR controla si el motor gira en el sentido de las agujas del reloj o en el sentido contrario a las agujas del reloj, según el estado, y STEP mueve el paso a paso un paso cada vez que se tira hacia arriba (cuánto depende de la resolución de micropasos). Dado que el sonido no se ve afectado por la dirección, simplemente lo configuro como bajo (o simplemente lo conecto a tierra). Ahora puedo simplemente pisar el motor usando un comando digitalWrite.

El desafío

El principal desafío al lidiar con este proyecto fue que quería conducir varios motores paso a paso a la vez, por lo que usar un comando delay () estaba fuera de discusión (de lo contrario, los motores no funcionarían simultáneamente). En su lugar, utilicé el comando micros () para calcular la duración para pulsar los steppers. Dado que habrá diferentes valores de velocidad para cada motor paso a paso, convertí las variables de velocidad en matrices, con su índice correspondiente al número de motor y al canal MIDI. Originalmente usé el comando millis (), pero descubrí que carecía de resolución para producir diferentes tonos.

El uso de una matriz para controlar la velocidad de los motores paso a paso significaba que podía usar una sola variable para todos los motores, y esto me da la capacidad de hacer que el arduino controle cualquier número de pasos, ¡simplemente cambiando el tamaño de la matriz!

Cálculos de velocidad

En una prueba, envié una onda cuadrada de 440 Hz (usando el comando de tono) al pin de paso y descubrí que el motor paso a paso creaba un tono A440. Dado que el valor de velocidad enviado a la función paso a paso era el período en microsegundos, simplemente convertí las frecuencias de las notas al período. Puse estos valores en otra matriz llamada pitchValues, con su índice correspondiente al valor de la nota MIDI. El uso de la matriz también me permitió controlar el rango de reproducción del paso a paso. Lo hice para que un valor de velocidad de cero se considere parada.

El uso de una matriz en lugar de un cálculo significaba que había un control completo sobre la velocidad de cada nota, estableciendo efectivamente un rango para el instrumento. Además, cuando un motor paso a paso está cerca de su frecuencia de resonancia, produce un ruido muy terrible (parece que se está estancando). Puede identificar qué es y cambiar el valor del tono en una octava para resolverlo. Para mí, la frecuencia de resonancia estaba alrededor de F3, así que tuve que cambiar E3, F3 y F # 3 en una octava para arreglar esto. (Puede verificar esto usando el código "Tune Stepper.ino")

Creación de un dispositivo MIDI USB

Quería que el dispositivo se viera como un dispositivo MIDI, así que investigué un poco y descubrí que se podía cambiar el firmware del chip AVR en la placa. El firmware puede ser HIDUINO o mocuLUFA. Me decidí por mocuLUFA, porque tenía una opción de arranque dual, por lo que podía reprogramar fácilmente el Arduino sin tener que volver a flashear el chip AVR. Simplemente podría conectar un puente en el encabezado ICSP para cambiar entre USB MIDI y USB Serial.

Código

Repositorio de GitHub
Simplemente vaya a mi GitHub. Tengo instrucciones sobre cómo configurar e instalar el código en su Arduino.https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument

Piezas y carcasas personalizadas

Mantiene los motores paso a paso en su lugar Agrega un "dedo" al motor. Con fines puramente estéticos.

Esquemas

Ubicación de los puentes en caso de que desee utilizar este escudo. Si desea conectarlo en una placa de prueba, aquí está Esquema del cableado de la placa de pruebas Fritzing. Incluye algunos de los valores de las piezas que no se dan en el diagrama de la placa de pruebas. Si desea utilizar un conector MIDI DIN, utilice este diseño.

Proceso de manufactura

  1. Ámbar
  2. Guillotina
  3. Silicio
  4. Ukelele
  5. Pollo
  6. Compostaje
  7. Gelatina
  8. Bloquear
  9. Vodka
  10. Leche
  11. Hierro