3

Spent an entire day researching and attempting to fix the DFPlayer noise problem. The amp works as expected, so it is not the problem. I have made a video to help you better understand the sound produced: https://www.youtube.com/watch?v=uK2kkR0XjFs&feature=youtu.be

This is the amp/speaker used: https://sites.google.com/site/wayneholder/chiptunes

enter image description here

The amp with speaker works as expected using another similar mp3 player like from a computer or possibly a phone.

enter image description here

Here we get the bep bep bep bep bep... as the amp/speaker has its own battery power.

enter image description here Here I made everything as one power source. Bep bep bep bep bep...

I think I exhausted my research and made the following attempts:

> -Electrolytic Capacitor at the power terminals
> -Electrolytic Capacitor parallel with ceramic capacitor from negative terminal to VCC in DFPlayer
> -Diode from positive terminal to VCC in DFPlayer
> -Battery Power source; USB power source; Power Supply power source; 5V USB plug regulator power source
> -1k Resistor from TX RX; Rx Tx
> -1-10k resistor from Rx Tx
> -1k between channel to GND
> -Separate power source for each the Arduino, amp, and DFPlayer
> -Tried multiple DFPlayers

Keep note that the amp/speaker works well. The files are the same both on the computer and in the SD card.

Here is my code:

#include <DFRobotDFPlayerMini.h>

/***************************************************
DFPlayer - A Mini MP3 Player For Arduino
 <https://www.dfrobot.com/index.php?route=product/product&product_id=1121>

 ***************************************************
 This example shows the basic function of library for DFPlayer.

 Created 2016-12-07
 By [Angelo qiao](Angelo.qiao@dfrobot.com)

 GNU Lesser General Public License.
 See <http://www.gnu.org/licenses/> for details.
 All above must be included in any redistribution
 ****************************************************/

/***********Notice and Trouble shooting***************
 1.Connection and Diagram can be found here
 <https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram>
 2.This code is tested on Arduino Uno, Leonardo, Mega boards.
 ****************************************************/

#include <Arduino.h>
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
int counter = 0;
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

  Serial.println();
  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);
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(15);  //Set volume value. From 0 to 30
  delay(1000);
myDFPlayer.enableDAC();  //Enable On-chip DAC
}

void loop()
{
  static unsigned long timer = millis();
  if(millis() - timer > 1000 && counter == 0)
  {
   myDFPlayer.play(1);
   Serial.println(F("Music Started"));
   delay(1000);
   Serial.println(F("1 second later..."));
   delay(6000);
   Serial.println(F("7 seconds later..."));
   delay(1000);
   counter =1;
  }


delay(7000);

  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!"));
      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:
          break;
      }
      break;
    default:
      break;
  }
}
  • Comments are not for extended discussion; this conversation has been moved to chat. – Majenko Feb 14 '18 at 15:12
1

The "bep bep bep" you are hearing is power supply noise introduced by the SD card. Every time the SD card reads the power supply dips and the ground raises. This is because these boards have really terrible grounding in their design. There is no coherent ground plane, and the analog audio sections and noisy digital sections both share the same ground with no isolation or filtering between them.

To reduce the impedance of the ground plane you must connect both the GND pins together, and do it with a short wire. Better would be to modify the board itself and solder a wire directly between the two ground pins.

There are also strategic ground points around the place you could also solder directly to one of those ground pins - such as the ground side of the SD card's decoupling capacitors, and the GND pin of the SD card itself (if your soldering skills are up to it - those pins are pretty fine pitch).

The whole issue stems from trying to fit too much into too small a space. The board really should have been made as a 4-layer board with a (near) solid ground and power plane to reduce the power impedance. Better decoupling and filtering on the SD card's power pin (such as a "PI" filter with two capacitors and a ferrite bead, or two capacitors and a small resistor) would have been a big benefit as well.

  • Today I had similar issues. Sometimes it used to play correctly for around 10 seconds and then noise used to come. Finally reduced the length of the Rx wire and it worked. How communication wire length can cause this noise? Communication may not happen if at all there are such problems I thought. But communication does happen correctly, but after that the problem starts. – Rajesh Nov 8 '19 at 1:12
1

My Problem & Solution: I recently attempted to control the DFPlayer with an Arduino Pro Mini and also experienced loud pulsing noises during playback (along with the music file). The pulsing could be seen on a scope on one of the speaker leads. Unloading the speaker did not help, using different power supplies did not help. Also, with regard to tying the two DFPlayer GND pins together, that's not necessary on my board since they are already connected together via the metal shell of the micro SD connector.

However, I noticed that when I attempted to re-program the Mini (or even when I pressed the reset button), there was a short period of time when the pulsing stopped and the music file played as it should. In my case the problem was the data line from the Mini to the Rx pin on the DFPlayer (there was no connection to the Tx pin). I verified this by starting playback (with the pulsing noise) and then disconnecting the Rx connection. That stopped the pulsing and the music file played as expected.

The software solution was to force the transmit pin on the Mini (I'm using soft serial) to a LOW state immediately after sending the Play command. Works fine now.

Update: I had previously connected the Mini serial output directly to the DFPlayer Rx pin without a 1K limiting resistor. Now, with the resistor in place I no longer get the pulsing noise during playback and there is no longer a need to pull the control line low.

  • Thanks Bob. I just ran into this same problem and adding a 1k limiting resistor in series worked a treat! – jared.g Dec 15 '19 at 4:31
0

Thanks for all the investigative work.

Throwing in my 2 cents :

I was also experiencing random cutoffs and wierd noises. I was using the Servo class in combination with the DFPlayer on an Arduino UNO board. It turns our that the Servo class uses the timers that are related to pin 9 and 10. When attaching a servo, signals will be outputted on those ports. So don't hook up your DFPlayer or anything else on those ports. Probably because the Servo class was sending all kinds of data over the serial connection to the DFPlayer, the module would stop playing and start making a lot of random noise for the remaining duration of the mp3.

Other things that I came across and might help other people : The DFPlayer needs MP3's of a certain length. MP3's of just 1~2 seconds don't play. +5 seconds seems to be fine. Any fancy MP3 encoding also prevents the MP3s from playing. The led will light up but no sound will be outputted.

Depending on the library used for the DFPlayer, the filenames and folder names do matter. The mp3's have to be in the MP3 folder and be named like 0001.mp3, 0002.mp3

According to 1 of the many datasheets out there, the DFPlayer requires 3.3v levels for the RX and TX port, regardless of the operating voltage. So do put those 1K resistors there. It won't hurt the module.

Motors and servo's do cause a lot of noise on the power source if you run the board off the 5v USB port. Even small motors can generate spikes of +2A when turned on.

Signals from other cables and devices can also interfere with the serial connection so ideally use shielded wires for the TX/RX cables.

According to the SD card specs of some manufacturers, power usage for an SD card can go up to 100mA. The module itself can produce 3W output so that would also add up to 600mA @ 5V. And add something like 150mA for the microcontroller onboard. So even a standard 5v@500mA USB port won't have enough power to drive just the Arduino and DFPlayer in some cases.

Someone took a look at the clicks and plops on pause or power on/off : http://work-now-dammit.blogspot.com/2016/08/dfplayer-mp3-module-power-onoff-clicks.html Remove the 0-ohm resistor next to the 8002 amp. Connect pin 1 of the 8002 amp to the BUSY pin (16) of the module.

0

I found that noise was due to three issues,

  • Forgetting to ground BOTH GND pins on the DFPlayer chip
  • Forgetting to put 1k resistors in the Tx and Rx lines
  • Power fluctuations

Power is the big issue. When I powered my Arduino with a 9v 2A supply all the noise went away. Switching to USB power (5v) caused the noise to return.

0

I've had loads of crazy little issues like this with the dfplayer and tried lots of solutions with very inconsistent results. Sometimes a technique like extra grounding or a resistor to the tx/rx pins will work the magic and then on making another copy of the circuit, the problem is inexplicably back! Here's a important clue that I haven't seen anywhere on forums yet, so I wanted to add it into the mix. Though the dfplayer is claimed to work from 3.3V to 5V, I've found it is much better behaved at 3.3V! Running it at 5V gives me odd noise and stability problems that vanish at 3.3V. You can get very cheap and efficient 3.3V regulators that are no bother to use. Try running it at the lower voltage and see if those issues clear up!

-1

I had the same problem. It was solved with a separate power supply to the DFPlayer. I also grounded both sides of the player but that alone was insufficient.

Not the answer you're looking for? Browse other questions tagged or ask your own question.