Synthétiseur MIDI à moteurs pas-à-pas piloté par Arduino
Composants et fournitures
| Arduino UNO | × | 1 | (ou tout Arduino compatible pour étendre les E/S) |
| Driver pas-à-pas A4988 | × | 4 | |
| Shield CNC Arduino V3 | × | 1 | (Optionnel, vous pouvez câbler les A4988 manuellement) |
| Alimentation 12V 6A | × | 1 | (Ou équivalent pour alimenter les moteurs) |
| Moteur pas-à-pas NEMA 17 (OpenBuilds) | × | 4 |
Outils et machines nécessaires
- Imprimante 3D (générique) – Totalement optionnel !
À propos du projet
En naviguant sur YouTube, j'ai découvert des musiques jouées avec des lecteurs de disquettes. Sachant que ceux-ci utilisent des moteurs pas-à-pas, j'ai décidé de créer mon propre générateur de sons à moteurs pas-à-pas.
D'autres l'avaient déjà fait, mais sans partager le code ou avec des codes limités et bogués. Étant en train d'apprendre le C++ à l'école, j'ai mis mes compétences à profit pour créer un code simple, facile à utiliser et à modifier.
Processus global
L'objectif : extraire des données MIDI et les convertir en vitesses de rotation pour que les moteurs pas-à-pas produisent les hauteurs correspondantes.
Extraction des données MIDI
Grâce à la bibliothèque MIDI, j'interprète les messages MIDI et les transmets à une fonction de contrôle de vitesse.
Contrôle des moteurs pas-à-pas
Les drivers A4988 disposent de deux broches de commande : STEP et DIR. DIR détermine le sens de rotation (peu important pour le son), STEP fait avancer le moteur d'un pas à chaque impulsion haute. J'ai donc fixé DIR à LOW (ou relié à la masse) et je pilote STEP via digitalWrite.
Le défi : piloter plusieurs moteurs simultanément
L'utilisation de delay() bloquait l'exécution, empêchant le fonctionnement simultané. J'ai utilisé micros() pour calculer la durée d'impulsion de chaque moteur. Les vitesses sont stockées dans des tableaux indexés par numéro de moteur et canal MIDI, permettant de contrôler n'importe quel nombre de moteurs en ajustant la taille du tableau.
Initialement j'utilisais millis(), mais sa résolution était insuffisante pour distinguer les hauteurs.
Calcul des vitesses
Un test avec une onde carrée à 440 Hz (via tone) sur la broche STEP a produit un La 440. La valeur de vitesse envoyée à la fonction pas-à-pas étant la période en microsecondes, j'ai converti les fréquences des notes en périodes. Ces valeurs sont stockées dans un tableau pitchValues indexé par la valeur de note MIDI. Un valeur de vitesse zéro signifie arrêt.
L'utilisation d'un tableau (plutôt qu'un calcul) offre un contrôle total sur chaque note, définissant ainsi la tessiture de l'instrument. De plus, près de leur fréquence de résonance, les moteurs produisent un bruit horrible (semblable à un blocage). J'ai identifié cette résonance vers Fa3 et décalé Mi3, Fa3 et Fa#3 d'une octave pour corriger le problème. (Vérifiable avec le code « Tune Stepper.ino »)
Création d'un périphérique MIDI USB
Pour que l'appareil soit reconnu comme périphérique MIDI USB, j'ai modifié le firmware de la puce AVR (ATmega16U2/8U2) avec mocuLUFA (choisi pour son option dual-boot : un cavalier sur l'en-tête ICSP permet de basculer entre MIDI USB et Série USB sans re-flasher).
Code
Dépôt GitHub
Rendez-vous sur mon GitHub pour les instructions de configuration et d'installation :
https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument
Pièces personnalisées et boîtiers
- Support pour fixer les moteurs pas-à-pas.
- Doigt ajouté sur l'axe du moteur – purement esthétique.
Schémas
- Emplacement des cavaliers pour l'utilisation du Shield CNC.

- Câblage sur breadboard (Fritzing).

- Schéma électrique du câblage breadboard (valeurs de composants non indiquées sur le breadboard).

- Configuration avec connecteur MIDI DIN.

Processus de fabrication
- L'ambre : de la résine antique au trésor scientifique — histoire, propriétés et usages modernes
- La guillotine : histoire, conception et héritage
- Silicium : Propriétés, production et perspectives de marché
- Le ukulélé : des racines portugaises à l'artisanat moderne
- Guide Complet de l'Industrie Avicole Américaine : Histoire, Production et Contrôle Qualité
- Compost : La Solution Ultime d'Enrichissement des Sols
- La gélatine : de la protéine ancienne aux applications modernes — production, usages et sécurité
- La vodka : de la distillation ancienne à la production moderne
- Fer : propriétés, histoire et applications quotidiennes