Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Synthétiseur pas à pas Arduino MIDI

Composants et fournitures

Arduino UNO
Vous pouvez utiliser n'importe quel Arduino similaire pour étendre l'IO.
× 1
Pilote pas à pas A4988
× 4
Arduino CNC Shield V3
En option, vous pouvez simplement câbler manuellement les pilotes A4988
× 1
Alimentation 12V 6A
Ou similaire pour piloter les moteurs pas à pas
× 1
Moteur pas à pas OpenBuilds NEMA 17
× 4

Outils et machines nécessaires

Imprimante 3D (générique)
Complètement facultatif !

À propos de ce projet

Regardez-le en action ici.

Je faisais ma navigation habituelle sur YouTube quand j'ai vu de la musique pour lecteur de disquette. Ayant su que les lecteurs de disquettes sont contrôlés par des moteurs pas à pas, j'ai décidé de créer mon propre générateur de sons à moteur pas à pas.

J'avais vu que les gens avaient fait cela auparavant, mais chaque instance n'avait pas partagé le code ou leur code était très imparfait et/ou limité.

Ayant appris le C++ à l'école, j'ai décidé de mettre mes compétences à profit.

Ce que je voulais vraiment faire, c'était créer un code simple et facile à utiliser et à modifier. Et c'est exactement ce que j'ai fait !

Le Globalement Traiter

Pour commencer, j'ai réfléchi à ce qu'il fallait faire. En termes les plus élémentaires, j'avais besoin d'extraire des données MIDI et de les transformer en une vitesse permettant à un moteur pas à pas de créer la hauteur correspondante.

Extraction de données MIDI

Cette partie était plutôt facile. En utilisant la bibliothèque MIDI, je pouvais interpréter les données MIDI et les envoyer à une autre fonction pour contrôler la vitesse.

Contrôler les steppers

Les pilotes de moteur pas à pas A4988 ont deux broches qui contrôlent directement le mouvement du moteur pas à pas ; ÉTAPE et DIR. DIR contrôle si le moteur tourne dans le sens des aiguilles d'une montre ou dans le sens inverse en fonction de l'état, et STEP déplace le moteur pas à pas d'un pas à chaque fois qu'il est tiré vers le haut (cela dépend de la résolution du micropas). Étant donné que le son n'est pas affecté par la direction, je le règle simplement comme faible (ou je le connecte simplement à la terre). Maintenant, je peux simplement faire avancer le moteur à l'aide d'une commande digitalWrite.

Le défi

Le principal défi dans le traitement de ce projet était que je voulais piloter plusieurs moteurs pas à pas à la fois, donc utiliser une commande delay() était hors de question (sinon les moteurs ne fonctionneraient pas simultanément). Au lieu de cela, j'ai utilisé la commande micros() pour calculer la durée d'impulsion des steppers. Comme il va y avoir des valeurs de vitesse différentes pour chaque moteur pas à pas, j'ai transformé les variables de vitesse en tableaux, avec leur index correspondant au numéro du moteur et au canal MIDI. J'ai initialement utilisé la commande millis(), mais j'ai trouvé qu'elle manquait de résolution pour produire des hauteurs différentes.

L'utilisation d'un tableau pour contrôler la vitesse des moteurs pas à pas signifiait que je pouvais utiliser une seule variable pour tous les moteurs, ce qui donne la possibilité à l'arduino de contrôler n'importe quel nombre de moteurs pas à pas, simplement en changeant la taille du tableau !

Calculs de vitesse

Lors d'un test, j'ai envoyé une onde carrée de 440 Hz (à l'aide de la commande de tonalité) à la broche de pas et j'ai découvert que le moteur pas à pas créait un pas A440. Étant donné que la valeur de vitesse envoyée à la fonction pas à pas était la période en microsecondes, j'ai simplement converti les fréquences de note en période. J'ai mis ces valeurs dans un autre tableau appelé pitchValues, avec leur index correspondant à la valeur de la note MIDI. L'utilisation du tableau m'a également permis de contrôler la plage jouable du stepper. J'ai fait en sorte qu'une valeur de vitesse de zéro soit considérée comme un arrêt.

L'utilisation d'un tableau au lieu d'un calcul signifiait qu'il y avait un contrôle complet sur la vitesse de chaque note, définissant efficacement une plage pour l'instrument. De plus, lorsqu'un moteur pas à pas est proche de sa fréquence de résonance, il produit un bruit très terrible (on dirait qu'il cale). Vous pouvez identifier ce que c'est et changer la valeur de la hauteur d'une octave pour résoudre ce problème. Pour moi, la fréquence de résonance était d'environ F3, j'ai donc dû changer E3, F3 et F#3 d'une octave pour résoudre ce problème. (Vous pouvez le vérifier en utilisant le code "Tune Stepper.ino")

Création d'un périphérique MIDI USB

Je voulais que l'appareil soit considéré comme un appareil MIDI, alors j'ai creusé un peu et j'ai découvert que vous pouviez changer le firmware de la puce AVR sur la carte. Le firmware peut être HIDUINO ou mocuLUFA. J'ai choisi mocuLUFA, car il avait une option de double démarrage, ce qui me permettait de reprogrammer facilement l'Arduino sans avoir à re-flasher la puce AVR. Je pourrais simplement connecter un cavalier sur l'en-tête ICSP pour basculer entre USB MIDI et USB Serial.

Code

Dépôt GitHub
Allez simplement sur mon GitHub. J'ai des instructions sur la façon de configurer et d'installer le code sur votre Arduino.https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument

Pièces et boîtiers personnalisés

Maintient les moteurs pas à pas en place Ajoute un "doigt" au moteur. À des fins purement esthétiques.

Schémas

Emplacement pour les cavaliers si vous souhaitez utiliser ce bouclier. Si vous voulez le câbler sur une maquette, alors le voici Schéma si le câblage de la planche à pain Fritzing. Comprend certaines des valeurs de pièces non indiquées dans le diagramme de la maquette. Si vous souhaitez utiliser une prise MIDI DIN, utilisez cette disposition.

Processus de fabrication

  1. Ambre
  2. Guillotine
  3. Silicium
  4. Ukulélé
  5. Poulet
  6. Compost
  7. Gélatine
  8. Vodka
  9. Fer à repasser