Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Arduino MIDI Stepper Synth

Componentes e suprimentos

Arduino UNO
Você pode usar qualquer Arduino semelhante para expandir o IO.
× 1
A4988 Stepper Driver
× 4
Arduino CNC Shield V3
Opcional, você pode conectar manualmente os drivers A4988
× 1
Fonte de alimentação 12V 6A
Ou semelhante a motores de passo
× 1
OpenBuilds NEMA 17 Stepper Motor
× 4

Ferramentas e máquinas necessárias

Impressora 3D (genérica)
Completamente opcional!

Sobre este projeto




Veja em ação aqui.

Eu estava fazendo meu costume, navegando no YouTube, quando vi algumas músicas da unidade de disquete. Tendo sabido que as unidades de disquete são controladas por motores de passo, decidi fazer meu próprio gerador de som com motor de passo.

Eu tinha visto que as pessoas já tinham feito isso antes, mas todas as instâncias ou não compartilhavam o código ou seu código era altamente falho e / ou limitado.

Tendo aprendido C ++ na escola, decidi colocar minhas habilidades em prática.

O que eu realmente queria fazer era criar um código que fosse simples e fácil de usar e modificar. E foi exatamente isso que eu fiz!

O Geral Processo

Para começar, pensei no que precisava ser feito. Em termos mais básicos, eu precisava extrair dados MIDI e transformá-los em uma velocidade que fizesse um motor de passo criar a afinação correspondente.





Extraindo dados MIDI


Esta parte foi bastante fácil. Utilizando a biblioteca MIDI, pude interpretar os dados MIDI e enviá-los para outra função para controlar a velocidade.





Controlando os Steppers


Os drivers do motor de passo A4988 têm dois pinos que controlam diretamente o movimento do passo; STEP e DIR. DIR controla se o motor gira no sentido horário ou anti-horário dependendo do estado, e STEP move o stepper uma vez cada vez que é puxado para cima (quanto depende da resolução do microstepping). Uma vez que o som não é afetado pela direção, eu simplesmente o defino como baixo (ou apenas conecto ao aterramento). Agora posso apenas acionar o motor usando um comando digitalWrite.





O desafio


O principal desafio em lidar com este projeto era que eu queria acionar vários motores de passo de uma vez, então usar um comando delay () estava fora de questão (caso contrário, os motores não funcionariam simultaneamente). Em vez disso, usei o comando micros () para calcular a duração do pulso dos steppers. Como haverá diferentes valores de velocidade para cada motor de passo, transformei as variáveis ​​de velocidade em matrizes, com seu índice correspondendo ao número do motor e ao canal MIDI. Eu usei originalmente o comando millis (), mas descobri que faltava resolução para produzir tons diferentes.

Usar um array para controlar a velocidade dos motores de passo significava que eu poderia usar uma única variável para todos os motores, e isso dá a capacidade de fazer o arduino controlar qualquer número de passos, apenas mudando o tamanho do array!





Cálculos de velocidade


Em um teste, enviei uma onda quadrada de 440 Hz (usando o comando de tom) para o pino de passo e descobri que o motor de passo criou um tom A440. Como o valor da velocidade enviado para a função de passo era o período em microssegundos, simplesmente converti as frequências das notas para o período. Coloquei esses valores em outra matriz chamada pitchValues, com seu índice correspondendo ao valor da nota MIDI. Usar o array também me permitiu controlar o alcance de jogo do stepper. Eu fiz isso para que um valor de velocidade zero seja considerado como parada.

Usar uma matriz em vez de um cálculo significava que havia controle completo sobre a velocidade de cada nota, definindo efetivamente uma faixa para o instrumento. Além disso, quando um motor de passo está perto de sua frequência de ressonância, ele produz um ruído muito terrível (parece que está parando). Você pode identificar o que é isso e alterar o valor da afinação em uma oitava para resolver o problema. Para mim, a frequência de ressonância estava em torno de F3, então tive que mudar E3, F3 e F # 3 em uma oitava para corrigir isso. (Você pode verificar isso usando o código "Tune Stepper.ino")





Criação de um dispositivo USB MIDI


Eu queria fazer o dispositivo ser visto como um dispositivo MIDI, então eu fiz algumas pesquisas e descobri que você poderia alterar o firmware do chip AVR na placa. O firmware pode ser HIDUINO ou mocuLUFA. Decidi pelo mocuLUFA, porque ele tinha uma opção de dual boot, então eu poderia facilmente reprogramar o Arduino sem ter que atualizar o chip AVR. Eu poderia simplesmente conectar um jumper no cabeçalho ICSP para alternar entre USB MIDI e USB Serial.

Código

Repo do GitHub
Basta acessar meu GitHub. Tenho instruções sobre como configurar e instalar o código em seu Arduino.https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument

Peças personalizadas e gabinetes

Mantém os motores de passo no lugar; adiciona um "dedo" ao motor. Apenas para fins estéticos.

Esquemas

Local para jumpers, caso você queira usar este escudo. Se quiser conectá-lo a uma placa de ensaio, aqui está Esquema da fiação da placa de ensaio Fritzing. Inclui alguns dos valores de parte não fornecidos no diagrama de breadboard. Se quiser usar um conector DIN MIDI, use este layout.

Processo de manufatura

  1. Âmbar
  2. Guilhotina
  3. Silício
  4. Ukulele
  5. Frango
  6. Composto
  7. Gelatina
  8. Bloquear
  9. Vodka
  10. Ferro