Il y a quelque temps déjà qu'est sorti l'
Arduino, une plaque basée sur un micro-contrôleur Atmel ATmega168 avec, entre autres, une prise USB permettant l'upload des programmes et quelques entrées-sorties numériques et analogiques. On arrive à le trouver en France dans quelques boutiques mais j'ai commandé le mien aux USA pour moins cher, 30 euros fdpin. On écrit un programme en C, on le cross-compile sur un PC sous Windows ou Linux (mon cas) ou encore sur un Mac, on l'upoade sur le contrôleur et on teste, ça ne marche pas, on recommence....
Je m'y suis vraiment intéressé à cause d'un article sur
Instructables où l'auteur en faisait une pédale pour guitare. Les effets étaient très moyens, il y avait deux ou trois erreurs et le truc n'était vraiment pas utilisable tel quel, mais je sentais qu'on pouvait en faire quelque chose. Ça tombait bien parce que comme
on a pu le lire ici, j'ai utilisé longtemps un Alesis airFX pour un seul effet, une sorte de modulateur dont le flange variait avec la position de mon pied au lieu d'être commandé par un oscillateur. Je l'ai laissé tomber plus ou moins pour des raisons de place.
J'ai donc commencé à expérimenter, ce même avant de commander l'Arduino, en testant mes idées de flanging variable avec Audacity où je décalais deux pistes du même signal de quelques millisecondes. Une fois sûr que je pouvais obtenir une bonne approximation de l'effet d'origine avec une pédale genre wah, j'ai commandé et reçu le petit circuit, connecté d'abord en entrée par un préampli micro et quelques composants pour polariser le signal, et en sortie par deux résistances et un condo. Le code était déjà presque écrit avec gestion d'un buffer circulaire pour stocker temporairement les samples à réutiliser.
Il faut savoir qu'on dispose là d'un pauvre processeur à 16 MHz avec quelques kilo-octets pour le programme et 1 kilo-octet pour les données, y compris la stack. Oui, 1024 octets. Ça change des environnements à fenêtres habituels, moi j'aime bien.
Et les entrées analogiques sont 10 bits, lo-fi garanti. J'aime bien aussi.
Les premiers tests étaient évidemment pathétiques et puis j'ai commencé à avoir du son. Il a alors fallu remplacer le préampli micro pas adapté du tout par quelque chose de plus spécifique aux besoins, c'est-à-dire arriver à un signal polarisé oscillant entre 0 et +5V. J'ai commencé par y mettre un transistor mais un signe indien me poursuit : je n'ai jamais réussi à bien faire fonctionner un circuit à transistors DIY. C'est comme ça.
Avec un ampli op, aucun problème en revanche, mais je voulais l'alimenter depuis l'Arduino (il y a une sortie 5V). Un 714 ou compatible ne convenait donc pas et c'est pour ça que j'ai pris un LT1006 qu'on peut alimenter en mono-tension sous 5V. La sortie est restée la même, 2 registres de 8 bits qui commandent deux sorties PWM (pulse width modulation), mélangées par deux groupes de résistances dont la valeur de l'un est 256 fois supérieure à l'autre.
Le schéma ci-dessus comporte des ajouts éventuels, surtout des filtres passe-bas de 3dB/octave à 8 kHz en entrée et en sortie et peut-être un trimpot pour ajuster le niveau de sortie. Les valeurs des condos sont approximatives ; il faut surtout faire gaffe à ne pas filtrer trop de fréquences utiles.
Une vieille Wah/Fuzz italienne traînait dans un coin, hop, on connecte le potard sur une autre entrée analogique et roule. On voit au fond la pédale, à droite l'Arduino, au milieu l'électronique d'interfaçage et à gauche un simple boîtier de raccordement. L'oscilloscope a surtout été utile pour régler le gain à la limite de la saturation. Le réglage de l'offset du point de repos (2,5V ) s'est fait au multimètre par association de résistances, à remplacer par un trimpot.
Le résultat n'était absolument pas ce que je cherchais (http://jzu.free.fr/Phaseur/Phaseur2.mp3) mais j'aime bien. Craspec, voire hideux, mais ça sonnait.
En fait, je m'étais planté dans la référence de voltage à utiliser, l'initialisation des registres, bref, un peu tout...
Ensuite, il y a eu un effet ressemblant à
un sample & hold sur un VCF de synthé qui n'avait rien à voir non plus avec ce que je voulais obtenir. Je viens en fait de comprendre et de corriger : il ne faut pas acquérir le signal trop vite et donc ne pas pousser le prescaler de la fonction de lecture analogique sous peine de subir des interférences entre les deux entrées. Je pense que le potard de 100 Kohms sur la wah a en fait une valeur un peu élevée et que le condensateur du multiplexeur d'entrées sur le micro-contrôleur a du mal à se décharger assez vite.
http://jzu.free.fr/Phaseur/Phaseur6.mp3 est le résultat (temporairement) final. Disons-le, dans l'absolu, c'est merdique.
Il y a surtout un souffle énorme sûrement dû à l'absence de blindage. La première partie est jouée en clean et la deuxième avec un peu de graou en amont pour qu'on entende bien le déphasage. C'est en fait moins rigolo que les samples précédents mais ça se rapproche de ce que je veux faire. Et je pourrai toujours changer d'effets avec des switchs branchés sur des entrées digitales de l'Arduino puisque seules quelques instructions du programme changent, à incorporer donc le cas échéant dans des blocs conditionnels basés sur l'état de ces entrées.
Le code actuel se trouve ici, tout tient sur 2 pages de listing et si certains se sentent l'âme aventureuse, ils peuvent s'en inspirer comme je me suis inspiré des URL mises en référence dans le source. J'ai mis le code sous une licence très permissive, la Artistic Licence 2.0, qui permet d'en faire un peu ce qu'on veut.
Étape suivante, ce qui est planté sur la plaque blanche doit être soudé sur une plaque de prototypage. Il sera alors possible d'intégrer le tout dans cette wah-fuzz ce qui devrait faire baisser le bruit de fond actuel... Une de ces atroces Daphon qu'on trouve pour 17 euros sur eBay pourrait aussi faire l'affaire, probablement avec un blindage supplémentaire en feuille d'alu.