Grésillement mini haut-parleur 8 ohm

Bonjour,

J'essaie de diffuser sur un mini haut-parleur un fichier son, qui est stocké sur une micro SD reliée à mon Arduino Uno par un shield.

Le haut-parleur est un CQRobot 8 Ohm. Je précise, au cas où cela pourrait avoir une incidence, que comme les fils du haut-parleur étaient de type Dupont, je les ai coupés au bout et je les ai ressoudés avec des fils monobrins (branchés ensuite sur ma breadboard). Comme c'est la première fois que j'utilise des mini haut-parleurs et que je voulais être sûre que mes soudures avaient bien marché, j'ai d'abord utilisé l'exemple de l'IDE Arduino "toneMelody", qui joue une petite mélodie. Tout fonctionnait parfaitement, le son était clair et à un volume normal.

Je suis ensuite passée à l'étape suivante : diffuser dans le haut-parleur un son stocké sur une micro SD. Je n'ai eu aucun souci avec le shield. J'ai enregistré mon son au format .wav, avec un nom de fichier court et clair, en mono et en 8bits. J'utilise les bibliothèques SD et TMRpcm. Le code compile, et l'Arduino me renvoie bien que le fichier existe et qu'elle le lit, mais aucun son ne sort du haut-parleur. Je réessaye entre temps le "toneMelody", toujours pas de problème.

J'essaie alors différentes solutions pour régler le problème :

  • Augmenter drastiquement le volume. Cela me permet de découvrir que le haut-parleur grésille. En le remettant presque au plus bas, j'entends alors en collant l'oreille au haut-parleur qu'il y a un grésillement beaucoup plus faible, mais aussi que le fichier est joué (mais à un volume très bas, donc, et caché à moitié par le grésillement de même volume). Quand je remets le volume plus haut, le grésillement est plus haut, mais le son du fichier ne s'entend plus du tout.

  • Comme mon code compile, que le fichier est trouvé et que les haut-parleurs ont quand même l'air de fonctionner très bien avec le "toneMelody", je me demande si c'est mon fichier son qui n'est pas correct. Je tente donc avec deux autres fichiers sons, dont un proposé en démo par la bibliothèque TMRpcm. Mais même souci.

  • Pour finir, j'ai tenté avec un autre mini haut-parleur, de même modèle, mais dont je n'avais pas coupé et ressoudé les fils (en me disant que c'était peut-être la longueur des nouveaux qui posait problème). Même problème.

Je vous mets le code ci-dessous.

#include <SPI.h>
#include <SD.h>
#define SD_ChipSelectPin 10

#include <pcmConfig.h>
#include <pcmRF.h>
#include <TMRpcm.h>
TMRpcm tmrpcm;

void setup() {
  tmrpcm.speakerPin = 9;

  Serial.begin(9600);
  if (!SD.begin(SD_ChipSelectPin)) {
    Serial.println("SD fails");
    return;
  }
  if (SD.exists("essai.wav")) {
    Serial.println("jexiste");
  } else {
    Serial.println("jenexistepas");
  }

  tmrpcm.setVolume(1);
  if (!tmrpcm.isPlaying()) {
    tmrpcm.play("essai.wav");
    Serial.println("eureka");
  } else {
    Serial.println("echec");
  }
}

void loop(){
  
}

Côté électronique, où j'ai eu beaucoup plus de mal, mon montage est copié de celui-là.

La seule différence, c'est que j'ai mis une résistance 220 ohm à la place de la 100 ohm (que je n'avais pas). Mais même le transistor est identique (un NPN2222).

J'ai l'impression tout de même que le problème pourrait venir de cette partie électronique (où je suis ultra novice), mais je n'en suis pas sûre. Qu'en pensez-vous ? Quelqu'un a-t-il déjà eu ce souci ?
N'hésitez pas non plus à me dire si mes explications ne sont pas claires, ou s'il manque des éléments.

Merci beaucoup d'avance pour votre aide,

Florence

Bonsoir.

Pouvez-vous envoyer une photographie de votre montage s'il vous plaît ?

Au niveau du câble pour relier le haut-parleur, pour éviter toute interférence, donc pour augmenter la qualité du son, je vous conseille d'enrouler un câble (avec un isolant autour)relié à la masse autour de votre fil qui envoie le courant électrique à l'haut-parleur, donc SANS CONTACT !

1 Like

C'est soudé?Si oui,il faut faire une trés belle soudure,pour eviter les grésillements,et de mettre de l'isolant autour(du scotch)

1 Like

Merci @techvij et @flix09 pour vos réponses !
Pour la soudure, je l'ai refaite mais ça ne change rien. J'ai mis un scotch isolant autour, et idem. (L'autre haut-parleur avec lequel j'avais testé n'était pas soudé, juste branché et j'avais le même souci)
J'ai tenté d'enrouler un câble relié à la masse (et sans contact) mais pareil, ça n'a pas changé grand chose (ou alors je ne l'ai pas enroulé assez fort :face_with_monocle: ).
Voici des photos de mon montage. Pour que ce soit clair : le fil violet est soudé au fil rouge du haut-parleur, et le gris au noir.

Photos du montage :

Pouvez-vous poster un schéma de votre circuit électrique s'il vous plaît ?

Une piste : l'Arduino Uno doit accéder à la carte micro-SD, lire le fichier, déchiffrer, envoyer un signal de tension à l'haut-parleur, puis recommencer.

Je doute qu'un Arduino Uno puisse faire ça.

Si le son à produire est trop aigu, il risque de al être reproduit : la fréquence du processeur n'est qu'à 16Mhz, une fréquence de 17Mhz est impossible à faire, par exemple.

Salut. En général, quand on veut diffuser du son de qualité, on utilise un DFPLAYER, et non TMRpcm.

1 Like

Etant "ingénieur du son" et tombant sur cette page parce qu'elle est bien référencée je me permet de préciser :

  • Inutile de "blinder" le câble qui envoi le courant au haut parleur, un signal amplifié n'est pas sujet au parasitage. C'est le câble qui relie l'Arduino a l'amplificateur (ici un simple transistor) qui doit être "blindé".
  • Tant qu'a faire, l'usage d'un vrai câble blindé sera toujours plus efficace et pas besoin de chercher loin un bout de RJ45 est tout simplement parfait. Sinon torsader simplement les fils c'est déjà un début.

Je ne sais pas d'où peut provenir cette "rumeur" mais une soudure fonctionnelle ne sera pas plus mauvaise qu'une très belle soudure ... a la limite on pourrait dire qu'il est important de bien couper ce qui dépasse pour pas faire antenne mais c'est tout.

Attention, je pense que tu mélange les KHz et les MHz.
Il est de coutume de dire que nous entendons jusqu'à 20KHz et le théorème de Nyquist Shannon nous indique qu'il faut donc une fréquence d'échantillonne supérieur à 40KHz pour reproduire du 20KHz donc très loin des 16Mhz de l'arduino.

Cela dit lire un fichier Wave reste une tache lourde pour nos petits arduino et c'est pour cela qu'il est souhaitable de lui faire lire des Wave mono 16KHz 8bits. Cela pose deux "problèmes" :

1/ La qualité est donc très mauvaise : la bande passante ne va que jusqu'à 8Khz et la dynamique est très faible.
2/ Si aucun composants ne supprime la plage de fréquences 8KHz-20KHz il y a de très grande chance que de beaux parasites se fassent entendre.

Au final j'ai été confronté aux mêmes problèmes et ai identifié plusieurs causes (avec leurs solutions bien-entendu) :

1/ Ce n'est qu'un rappel mais bien utiliser un fichier wav en 16Khz 8 bits. Pour vérifier que le fichier est au bon format, dans les propriétés il doit avoir un débit binaire de 128kBits/s (16 x 8).

2/ Jouer sur le volume dans le programme pour trouver la limite à partir de laquelle le son sature.

3/ Si l'ampli a une impédance d'entrée trop haute il faut alors ajouter une résistance d'environs 10kOhms entre le "in" et la masse. Pour vérifier si l'impédance d'entrée est très haute j'ai trouvé un petit test empirique : au lieu de brancher l'Arduino à l'ampli directement laisser les câbles en l'air et venir toucher avec les mains les deux câbles. Si le son arrive à passer à travers vous sans grosse modification de volume alors l'impédance d'entrée de l'ampli est vraiment trop haute !

4/ Ajouter un petit filtre en sortie d'Arduino. Un simple couple LR peut suffire. Pour ma part j'ai donc mis une résistance de 33kOhms entre la sortie de l'Arduino et l'entrée de l'ampli et un condensateur de 1nF entre l'entrée de l'ampli et la masse.

Avec tout ca le son est beaucoup moins parasité et audible. En revanche n'espérez pas faire une enceinte autonome avec ca ^^

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.