DFPLAYER mini et bruit de fond

Salut à tous

J'ai en cours de réalisation un carillon intelligent.
Je suis en train d'expérimenter le DFPLAYER MINI.
J'utilise la librairie DFROBOT.
Le carillon est équipé d'un détecteur de mouvement HR-SR501 afin de diffuser un premier son (chien) et éventuellement allumer la lumière en cas de visite.
Reste à compléter avec un détecteur de luminosité.
Un amplificateur à base de TDA8932 est branché en sortie du DFPLAYER, car je compte utiliser un haut-parleur de 10cm large-bande de plusieurs dizaines de watts.

J'ai dans un premier temps réglé le volume du DFPLAYER sur 5 afin de limiter la puissance de sortie.

  myDFPlayer.volume(5);

La première chose que j'ai remarqué et un bruit important, d'une part un bruit de fond au repos, et d'autre part des bruits numériques très gênants pendant la restitution d'un MP3.
J'ai lu que certains problèmes de bruit pouvaient être réglés par l'ajout de résistances de 1K sur RX TX.
Cela n'apporte rien ou presque.

L'amplificateur est hors de cause car en débranchant son entrée, le bruit de fond disparaît.
Je me suis dit que je pouvais certainement diminuer ces bruits en augmentant le signal de sortie du DFPLAYER.
J'ai donc intercalé un potentiomètre 47K logarithmique entre le DFPLAYER et l'amplificateur.

Et je règle le volume du DFPLAYER au maximum.

  myDFPlayer.volume(30);

La solution apporte un gain énorme en terme de rapport signal sur bruit.
Je passe d'une solution à peine utilisable à une solution pleinement satisfaisante.

S'il vous est déjà arrivé d'essayer un DFPLAYER et que vous avez trouvé ça exécrable en terme de bruit, voilà la solution pour le réhabiliter.
Je ne manquerai pas de créer un topic sur le projet complet.

@+

hello
je vais justement attaquer une application comme celle ci
donc inutile de te dire que j'apprécie le partage.

par contre, je constate que tu ne mets pas de résistance en talon.
ne crains tu pas de mettre la sortie en CC par inadvertance?
( par exemple en te trompant de sens de rotation sur le potentiomètre)

Salut

En mettant le curseur à la masse, je court-circuite l'entrée de l'ampli, pas la sortie du DFPLAYER.
J'ai changé l'image pour une image perso plus adaptée.

@+

ok, ca change tout

merci

J'ai trouvé une photorésistance dans un fond de tiroir. Elle doit bien avoir 40 ans.
J'ai donc un carillon qui fait un bruit de chien quand le détecteur de présence est activé, de la lumière qui s'allume s'il fait nuit, et une sonnerie (chants d'oiseaux) quand on appuie sur le bouton de sonnette.
Un switch permet de changer de mode pour la sonnette (chants d'oiseaux ou animaux divers).

Mon code commence à ressembler à quelque chose :

/*
 * SD CARD is organized as shown below:
 * FOLDER 01
 *    001-dog.mp3
 *    002-crocodile.mp3
 *    003-aligator.mp3
 *    004-gorilla.mp3
 * FOLDER 02
 *    001-cuckoo.mp3
 *    002-finch.mp3
 *    003-raven.mp3
 *    004-crow.mp3
 *    005-magpie.mp3
 */

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

#define BUTTON      2   // PullDown
#define PIR         3
#define SWITCH      4
#define LIGHT       7
#define LED         13
#define LUMINOSITY  1

SoftwareSerial mySoftwareSerial(5, 6); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

int buttonPressed;
int pirState = LOW;
int lightDuration = 5000;

void ButtonIsr(void)
{
  static int enable;
  static long lastDebounceTime = 0;

  if (lastDebounceTime == 0 || (millis() - lastDebounceTime) > 200) {
    if (enable) {
      Serial.println("ButtonIsr");
      lastDebounceTime = millis();
      buttonPressed++;
    }
    enable = 1;
  }
}

void readPir(void)
{
  int val;
  
  val = digitalRead(PIR);  // read input value
  if (val == HIGH) { // check if the input is HIGH
    digitalWrite(LED, HIGH);  // turn LED ON
    delay(150);
    if (pirState == LOW) {
      Serial.println("Motion detected!");
      pirState = HIGH;
    }
  } else {
    digitalWrite(LED, LOW); // turn LED OFF
    delay(300);
    if (pirState == HIGH){
      Serial.println("Motion ended!");
      pirState = LOW;
    }
  }
}

void play(int folder, int file)
{
  static int playing;

  if (folder == 0 && file == 0) {
    playing = false;
    return;
  }
  if (!playing) {
    Serial.print(F("Play the "));
    Serial.print(folder);
    Serial.print(", ");
    Serial.println(file);
    myDFPlayer.playFolder(folder, file);
    playing = true;
  }
}

int folder = 1;
int file = 1;
int nfile;

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true){
      delay(0); // Code to be compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));
  myDFPlayer.volume(30);  //Set volume value. From 0 to 30
  attachInterrupt(digitalPinToInterrupt(BUTTON), ButtonIsr, RISING);
  pinMode (BUTTON, INPUT_PULLUP);
  pinMode (LED, OUTPUT);
  digitalWrite(LED, LOW);
  pinMode (LIGHT, OUTPUT);
  digitalWrite(LIGHT, LOW);
  pinMode (PIR, INPUT);
}

void loop()
{
  static int night = 0;
  static long lightStart;

  if (lightStart && lightStart < millis() - lightDuration) {
    digitalWrite(LIGHT, LOW);
  }
  int luminosity = analogRead(LUMINOSITY);
  if (luminosity < 400) {
    if (!night) {
      Serial.println("NIGHT");
    }
    night = true;
  }
  else {
    if (night) {
      Serial.println("DAY");
    }
    night = false;
  }
  readPir();
  if (pirState == HIGH) {
    play(2, 1);
    if (night) {
      lightStart = millis();
      digitalWrite(LIGHT, HIGH);
    }
  }
  if (buttonPressed) {
    Serial.println(F("BUTTON pressed"));
    if (digitalRead(SWITCH) == HIGH) {
      folder = 1;
    }
    else {
      folder = 2;
    }
    nfile = myDFPlayer.readFileCountsInFolder(folder);
    if (file > nfile) {
      file = 1;
    }
    play(0, 0);
    play(folder, file++);
    buttonPressed = 0;
  }
  
  if (myDFPlayer.available()) {
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
  }
}

void printDetail(uint8_t type, int value){
  switch (type) {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      play(0, 0);
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value) {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          Serial.println(F("????"));
          break;
      }
      break;
    default:
      break;
  }

}

EDIT : j'ai découvert que les mp3 pouvaient porter des noms plus explicites :
001-dog.mp3 plus sympa que 001.mp3

moi aussi j'avance sur le sujet et je confirme que la légère ronflette (que je constatais en y prêtant une oreille attentive), a complètement disparue après l'adjonction d'un potentiomètre de 47 Kohms.
merci Mr Bachetti

Bien
Ne pas oublier de régler le volume du DFPLAYER à 30 et ajuster le niveau de sortie avec le potentiomètre.
Qu'utilises tu comme ampli ?

un truc tout simple en 5 V deux voies

PAM 8403

ICI

Le DFPLAYER est mono. Il est équipé d'un 8002a en sortie, un ampli bridgé de 2W.
Tu branches donc deux HP ?

hello
je n'en avais raccordé qu'un seul, mais avant de te répondre, j'ai raccordé le 2 ème.

c'est ok.

j'ai utilisé des HP de récup qui se trouvaient dans la carcasse d'un moniteur hs que j'ai benné

Juste une remarque.
La sortie du DFPLAYER est bridgée et délivre donc deux signaux en opposition de phase.
Il faut donc brancher les deux entrée du PAM8403 sur la même sortie, sinon le son sera moins puissant, car les ondes sonores ont tendance à s'annuler.

D'autre part en supposant que l'alimentation du DFPLAYER et du PAM8403 soit commune, ne pas relier l'une des deux sorties du DFPLAYER à la masse de l'entrée de l'ampli, cela reviendrait à la mettre en court-circuit.
Le potentiomètre doit donc avoir sa broche gauche à la masse.

Cette remarque est sans objet si les alimentations sont séparées et que les masses ne sont pas reliées entre elles.
Je ne sais pas si l'étage de sortie du DFPLAYER est protégé contre les court-circuits, je n'ai rien vu de tel dans la datasheet du 8002A.

@+

hbachetti:
Juste une remarque.
La sortie du DFPLAYER est bridgée et délivre donc deux signaux en opposition de phase.
Il faut donc brancher les deux entrée du PAM8403 sur la même sortie, sinon le son sera moins puissant, car les ondes sonores ont tendance à s'annuler.

D'autre part en supposant que l'alimentation du DFPLAYER et du PAM8403 soit commune, ne pas relier l'une des deux sorties du DFPLAYER à la masse de l'entrée de l'ampli, cela reviendrait à la mettre en court-circuit.
Le potentiomètre doit donc avoir sa broche gauche à la masse.

Cette remarque est sans objet si les alimentations sont séparées et que les masses ne sont pas reliées entre elles.
Je ne sais pas si l'étage de sortie du DFPLAYER est protégé contre les court-circuits, je n'ai rien vu de tel dans la datasheet du 8002A.

@+

Moi je peux te dire que la sortie n'est pas protégée pour les courts circuits, je l'ai expérimenté sur une erreur de branchement !

Salut

Si tu crames le 8002A, le module DFPLAYER n'est pas perdu pour autant.
Tu peux remplacer le 8002A.

Ou tu peux l'utiliser sans l'ampli de sortie, en virant le 8002A et en branchant son entrée sur une des deux broches de sortie du module.
Le module devient un simple lecteur MP3 sans ampli, mais tout de même utilisable.
J'en ai cramé un aussi et je l'utilise avec un TDA8932 mono pour amplifier. 30W avec une alimentation 24V 50W avec un HP de 10cm. Super qualité !

@+

Bonjour à tous,

J'interviens sur le topic car après des jours de recherche et de tests, il m'est impossible de faire fonctionner le DFplayer avec un ampli 8403.

J'ai testé toutes les méthodes que l'ont peut trouver sur les différents forums FR / EN :

  • Alimentation séparé, ce qui ne m'arrangerai pas
  • Résistance 1K sur TX/RX, aucun changement
  • Potentiometre 10K ( je n'ai pas trouvé de 47K ) , ce qui ne permet que de baisser le volume
  • Condensateurs de différentes tailles sur l'alimentation du PAM8403
  • Alimentation 3.3 / 4.3 et 5 sur le DFplayer

Est ce que quelqu'un à réellement réussi à faire fonctionner cet ampli avec le DFplayer ?
La seule piste interessante est celle de hbachetti, mais il utilise un autre ampli en 24v il me semble.

Merci pour votre aide.

En matière de puissance une augmentation de 3 décibels revient à doubler la puissance.
Un haut-parleur ayant 90dB de rendement apporte une puissance largement supérieure à un haut-parleur ayant 80dB de rendement.
Cela représente 10dB de différence, donc un peu plus de 3 x 3dB c'est à dire environ 10 fois plus de puissance. Or avec 10db de différence on a l'impression d'entendre un son 2 fois plus fort.

Un PAM8403 s'alimente en 5V, tout comme l'ampli du DFPLAYER d'ailleurs et produit 3W au lieu de 2W, c'est à dire une puissance ridicule.
3W au lieu de 2W : une différence de niveau sonore à peine audible.
Quel est l'intérêt de remplacer l'ampli du DFPLAYER par un autre ampli n'ayant pas plus de puissance ?

Merci pour ta réponse.

J'ai décidé de mettre un ampli séparé car lors de la lecture direct avec le DFplayer celui ci se coupe si je mets le volume à 100% ( Valeur 30 ).
Hors effectivement, la différence de niveau est dérisoire je te l'accorde.

Dans mon projet j'ai une alimentation USB, type chargeur téléphone. Je ne peux aller plus haut en tension.
Des lors, je branche en // un nodemcu sur [VCC In] de 5v et le dfplayer mais lors de la lecture je pense que la tension ( ampérage ? ) chute fortement et coupe le DFplayer.

Peut être que mon approche n'est pas la bonne ? Mon truc c'est l'info pas l'électronique et j'en appel donc à vos talents pour combler les miens :confused:

Merci

Ou alors le haut-parleur a une impédance trop faible et fait chuter fortement la tension.
Il faudrait mesurer.
Ajouter un ampli ne résoudra pas ce problème de coupure s'il a pour cause une chute de tension.

Il y a tout de même un argument en faveur du PAM8403 : la stéréo.
La sortie amplifiée du DFPLAYER est mono, mais il existe deux sorties DAC_L et DAC_R que l'on peut donc brancher à l'entrée d'un ampli stéréo.

C'est un HP de 4 Ohms, c'est écrit dessus, je n'ai pas mesuré mais j'en ai plusieurs du même type et tous réagissent pareil.

Quand je dit qu'il ne fonctionne pas, j'entend par la que j'ai des bruits dans le HP comme des interférences et pendant la lecture c'est horrible.

En tout cas je vais prendre en compte ta remarque sur la stéréo. Sauf que dans mon projet je n'ai de la place que pour 1 seul HP. Peux ton mettre les 2 sorties sur le même HP ?

Avant ça il faut déjà que je rêgle mon problême de bruits dégueulasse.

Merci pour ton aide

Peux ton mettre les 2 sorties sur le même HP ?

Non, le PAM8403 est un ampli bridgé, c'est à dire que ses sorties + et - sont en opposition de phase.
S'il y a la signale est plus fort sur une voie que sur l'autre cela va générer un courant important entre les deux sorties.

Comme tu peux le vois sur ce schéma les sorties DAC_L et DAC_R sont mixées à l'aide de deux résistances R2 R3 avant d'attaquer l'ampli mono 8002a à travers un condensateur.

Rien ne t'empêche de faire la même chose avec le PAM8403 mais sur une seule voie.
Il ne faut pas compter obtenir un résultat valable en jouant sur le volume logiciel.
La seule voie que j'aie trouvé c'est de régler le volume logiciel à fond et d'ajouter un réglage de volume par potentiomètre.

Merci pour cette réponse extrêmement précise, j'ai clairement compris comment faire pour cette partie.

Il me reste toutefois, le soucis de bruit parasite, avec un potentiomètre ça réduit le volume alors autant ne pas mettre d'ampli mais la le son est trop faible.

Je tourne en rond :

  • pas d'ampli = pas assez fort
  • avec ampli = bruit parasites

Peut être trouver une alim qui se découpe en 2 alims séparées ? Un idée ?