DIY : Comment faire de la musique avec un lecteur de disquette et un Arduino

Les montages utilisant des lecteurs de disquettes pour faire de la musique m’ont toujours interpellé. Je me suis donc attaqué à en réaliser un piloté par un Arduino UNO, histoire de voir comme cela pouvait bien fonctionner.
Le matériel nécessaire.
Afin de réaliser cette expérience, et souhaitant qu’elle soit facilement reproductible chez chacun, je me suis contenté d’utiliser le strict nécessaire :
- Un vieux lecteur de disquette 3″1/2
- Une nappe en câble plat pour FDD
- Un transformateur 220V/5V avec un câble d’alim pour FDD ( ou directement une veille alimentation AT ou ATX)
- Des wires pour breadboard
- Un kit Arduino UNO
Premiers essais de communications avce le lecteur de disquette
Tout d’abord, il va falloir identifier les signaux transitant sur le lecteur de disquette en me basant sur le câble de celui ci [Floppy Diskdrive connector pinout]
Toutes les pins impaire du connecteur véhicule un signal de masse, et il suffit directement de commuter certaines pins paire à la masse pour envoyer des ordres au lecteur de disquette.
En alimentant simple le lecteur de disquette, il faut ensuite relier la pin 14 (/DRVSA) à la masse pour sélectionner le lecteur de disquette A ( la pin 12 (/DRVSB) permettant de sélectionne le lecteur B sur la même nappe) . En reliant ensuite la pin 10 (/MOTEA) à la masse, je m’aperçoit que le moteur principal, celui qui entraîne le disque tourne. En continuant comme ça, on peut ainsi déduire la fonctionnalité de la pin 16 (/MOTEB) qui permet d’activer le moteur de déplacement de la tête de lecture, la pin 18 (/DIR) qui permet de sélectionner le sens de rotation du moteur B et la pin 20 (/STEP) qui permet de donner une impulsion pour actionner le moteur.
D’autres pins sont utilisées pour afficher un retour d’information, on retiendra la pin 26 (/TRK00) qui nous indique quand la tête de lecture se trouve sur la piste zéro, soit en butée basse.
Connection avec un Arduino UNO
J’ai donc relié les Pins du lecteur de disquettes qui m’intéresse sur l’Arduino et en quelques secondes avec un petit bout de code, on arrive à piloter chacune de ses commandes, et on peut faire vivre le lecteur de disquettes.
Le but du jeu étant de créer une fréquence de résonance avec le moteur de déplacement de la tête de lecture, j’ai créé une fonction qui permet de faire avancer la tête de lecture pendant un instant t, et de la faire reculer d’un instant t. Si cet instant t est très faible, le moteur vibre et crée une fréquence audible.
En améliorant cette fonction, on lui donne ensuite en paramètre la fréquence de vibration voulu et la durée de la note. Ce qui va me permettre de générer de la musique facilement, même si j’avoue volontiers que les notes ne sont pas accordées à la perfection, mais plutôt en fonction de comme je le ressentais.
J’ai ensuite implanté un bout de programme basé sur Brushduino , permettant de jouer les notes de Super Mario Bros [Code source]
Voici un premier essai en vidéo assez concluant qui peut servir de base en l’améliorant un petit peu :