En balade en Savoie, “on” m’a demandé une “boîte à meuh” avec l’accent local. Pour le moment, j’ai trouvé ce tutoriel indiquant comment la fabriquer et la mettre en boîte : https://ouiaremakers.com/posts/tutoriel-diy-la-boite-a-meuh-electronique.
Il existe aussi une série basée sur les circuits de la famille ISD-1800, comme cette boîte à Yeah, mais ce serait bien trop facile, et à vaincre sans péril, on triomphe sans gloire !
Liste des composants
Pour faire avec ce que j’ai sous la main, on prendra pour commencer :
- Un arduino Nano,
- 2 paires de transistors NPN respectivement PNP,
- 2 capacités de 220 µF et de 47 µF, par exemple des “chimiques” sous 16v,
- Un haut-parleur 2W (c’est pas la peine d’aller au delà),
- des fils volants et
- une plaquette à essais.
Pour un proto, on assemblera tout ça comme suit :
Montage et explications
Les deux sorties PWM du microcontrôleur sont directement connectées aux bases pour créer un maximum de courant dans les transistors. Comme on va être en commutation pure, on ne se soucie pas des zones de silence de ce montage typique en “push-pull”. Pour ne pas perdre de puissance, on ne filtre pas non plus la sortie ; on profitera de l’inertie naturelle de la membrane du HP pour couper le signal modulé à. 60 KHz que l’on va lui injecter. J’ai aussi ajouté une capa de 220µF entre les deux “bridges” car il y a un manque d’équilibrage des deux ponts et un courant résiduel important. Enfin, les deux sorties PWM sont utilisées en opposition afin que les signaux soient bien complémentaires.
Le schéma électronique est donc le suivant :
Pour gagner en puissance (parce que ça déchire pas comme une vraie vache), on pourra essayer de passer par des transistors FET qui peuvent avoir des performances un peu meilleures à cette faible tension.
Code du microcontrôleur
L’intérêt des microcontrôleurs est l’intégration de fonctions câblées autour du processeur. Pour cet exercice, on va utiliser en particulier les timers et les sorties PWM associées.
Vue la qualité du signal attendue, et puisque l’oreille humaine n’est pas sensible à la phase m’a-t-on dit, on utilisera notre timer dans la configuration PWM simplifié, dit “Fast PWM“.
Petit rappel du principe du PWM
Un compteur, branché sur l’horloge interne (relativement stable donc), compte de 0 à une valeur TOP (255 par exemple). Lorsque la valeur du compteur atteint une valeur de référence, la patte de sortie du PWM passe à l’état “Haut” et lorsque la valeur maximum TOP est atteinte, cette sortie repasse à l’état “Bas”, et le compteur reprend son comptage à partir de 0. On a donc une patte qui passe répétitivement de l’état bas à l’état haut en garantissant que le rapport entre les deux est bien celui défini par la valeur de référence (rapport cyclique). La valeur moyenne du signal correspond donc à la valeur de référence : on vient de créer un Convertisseur Numérique / Analogique (CNA) simple sans échelle de résistances calibrées. Le signal présente par-contre de fortes harmoniques associées à la fréquence de répétition de la séquence. Dans notre cas, on génère un signal à 60 KHz (env.) qui vient se superposer au signal synthétisé, heureusement inaudible pour les humains.
Pour revenir à notre composant, une fois que les registres sont paramétrés correctement, le générateur PWM n’a plus besoin d’autre chose que de faire varier la valeur de référence suivant le signal à produire. C’est ce que fait le programme principal et ce de manière asynchrone avec le PWM ce qui peut générer d’autres erreurs dans le signal produit, mais une fois de plus la qualité (déjà bien faible) du résultat ne s’en ressentira pas.
Afin de réduire le volume de données (pour rappel le contrôleur n’a que 32 Ko de mémoire de programme) à moins de 20 Ko, on échantillonne à 8 KHz sur 8 bits (non signés : un signal nul est une valeur de 128 constante) ce qui laisse 2 à 3 sec pour un son enregistré.
Ultérieurement, on pourra essayer d’encoder le signal sur 4 bits en ADPCM et augmenter ainsi la fréquence d’échantillonnage ou la durée du son à reproduire. Le contrôleur n’a pas non plus de fonctions de traitement du signal (DSP), les algorithmes de décompression doivent rester simples, comme une table de conversion (Look-Up Tableprivate joke) de type µ-Law qui permettra d’augmenter le nombre de bits du signal, mais pas sa fréquence (au contraire même, le compteur devant alors compter sur 9, 10 ou 12 bits).
Retrouvez le code sur GitHub : https://github.com/Marcussacapuces91/Boite-a-meuh.
Il inclut des données issues deLa sonothèque.
Elles ont été transformées avec GoldWave puis converties en hexa en constantes C par http://www.deadnode.org/sw/bin2h/ pour être intégrées dans le programme puis la mémoire flash du microcontrôleur.
Voilà… pour le moment.