Note
inspiré par le youtuber steamHead avec sont ukulele avec quelques modification mecanique et l'ajout de MIDI
Ce projet vise à créer un dispositif capable de jouer automatiquement un ukulele en réponse à des messages MIDI reçus via USB. Le dispositif utilise 4 moteurs pas à pas pour appuyer sur les cordes (frettes) et des moteurs ou des servomoteurs pour gratter les cordes , simulant ainsi le jeu d'un musicien.
le systeme est concu pour limiter au maximum la complexité et le cout du projet.
Permet le déplacement des "doigts" qui appuient sur les cordes à des positions spécifiques (frettes) en fonction des notes MIDI reçues.
Composants associés :
Drivers de Moteurs Pas à Pas : TMC2208 pour un fonctionnement silencieux et une précision accrue grâce au microstepping.
Fin de course : Pour initialiser la position de chaque moteur lors du démarrage (homing).
Système de Grattage des Cordes : Fonction : Mécanisme motorisé (servo ou moteur DC) pour gratter les cordes selon les messages MIDI. Nombre de systèmes : 4, un pour chaque corde du ukulele.
Le code est structuré en plusieurs fichiers et classes, suivant une approche orientée objet pour une meilleure organisation et maintenabilité.
- Mapping des notes MIDI pour chaque corde.
- Sens de rotation des moteurs pour le homing.
- Vitesse de déplacement des moteurs (homing et maximum).
- Pas par millimètre des moteurs pas à pas.
- Positions des frettes par rapport aux fins de course.
- Gère les mouvements des moteurs pas à pas.
- Implémente des méthodes pour le homing, le déplacement vers une position donnée, et l'interrogation de l'état du moteur (position atteinte ou non). Utilise la bibliothèque AccelStepper pour gérer l'accélération et la décélération.
- Représente le ukulele dans son ensemble.
- Coordonne les mouvements des moteurs en réponse aux notes MIDI reçues.
- Implémente les fonctions noteOn et noteOff pour gratter les cordes quand le moteur est a position
- Gère la réception et le traitement des messages MIDI via USB.
- Utilise la bibliothèque MIDI Library pour interpréter les messages MIDI et les relayer à l'instrument.
- Implemente des callbacks pour les événements MIDI comme noteOn, noteOff, etc.