Nesta
montagem utilizamos um MP3 player com Arduino Uno, um mini amplificador de som
PAM8403 com ajuste de volume, um módulo MP3 DFPlayer Mini e um par de
alto-falantes 3 Watts.
Pra essa
montagem especificamente estamos utilizando o Arduino Uno, mas dá para ligar também
no ESP8266 ou ESP32. Obviamente que será necessário um ajustamento nos pinos.
Datasheet
Módulo do
DFPlayer
O módulo do DFPlayer utiliza a comunicação serial RX TX, VCC, GND. Ele tem saída para dois alto-falantes e entrada de áudio.
Mini
amplificador PAM8403
Montagem
Bibliotecas
Adicione
a seguinte biblioteca “DFRobotDFPlayerMini” para comunicação com o módulo mp3.
Basta
acessar “Sketch >> Incluir Bibliotecas >> Gerenciar Bibliotecas...”
Código fonte
Começaremos
definindo as bibliotecas e constantes que utilizaremos durante nosso código.
Inicio criando
um objeto, o software serial, outro, que é o myDFPlayer.
A variável buf, que é do tipo String, servirá para armazenar os dados vindos da Serial do arduino, que serão os comandos para o módulo MP3. A variável "pausa" servirá como indicativo para sabermos se a música está tocando ou em pausa (pausa = true, indica que está pausado, caso contrário está tocando).
A variável buf, que é do tipo String, servirá para armazenar os dados vindos da Serial do arduino, que serão os comandos para o módulo MP3. A variável "pausa" servirá como indicativo para sabermos se a música está tocando ou em pausa (pausa = true, indica que está pausado, caso contrário está tocando).
#include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" //Inicia a serial por software nos pinos 10 e 11 SoftwareSerial mySoftwareSerial(10, 11); // RX, TX //Objeto responsável pela comunicação com o módulo MP3 (DFPlayer Mini) DFRobotDFPlayerMini myDFPlayer; //variável responsável por armazenar os comandos enviados para controlar o player String buf; //variável responsável por armazenar o estado do player (0: tocando ; 1: pausado) boolean pausa = false; //variável responsável por armazenar o estado da equalização //varia de 0 a 5 int equalizacao = 0; // (0 = Normal, 1 = Pop, 2 = Rock, 3 = Jazz, 4 = Classic, 5 = Bass)" //variável responsável por armazenar o total de músicas presentes no SD card. int maxSongs = 0;
Setup
Nesta etapa
colocamos opções de prints para dar indicações para você que está montando o
circuito, com avaliações de falsas condições, por exemplo.
void setup() { //Comunicacao serial com o modulo mySoftwareSerial.begin(9600); //Inicializa a serial do Arduino Serial.begin(115200); //Verifica se o modulo esta respondendo e se o //cartao SD foi encontrado Serial.println(); Serial.println("DFRobot DFPlayer Mini"); Serial.println("Inicializando modulo DFPlayer... (3~5 segundos)"); if (!myDFPlayer.begin(mySoftwareSerial)) { Serial.println("Nao inicializado:"); Serial.println("1.Cheque as conexoes do DFPlayer Mini"); Serial.println("2.Insira um cartao SD"); while (true); } Serial.println(); Serial.println("Modulo DFPlayer Mini inicializado!"); //Definicoes iniciais myDFPlayer.setTimeOut(500); //Timeout serial 500ms myDFPlayer.volume(10); //Volume 10 vai de 0 a 30 myDFPlayer.EQ(0); //Equalizacao normal //recupera o numero de Músicas encontradas no SD. maxSongs = myDFPlayer.readFileCounts(DFPLAYER_DEVICE_SD); Serial.println(); Serial.print("Numero de arquivos no cartao SD: "); Serial.println(maxSongs); //Mostra o menu de comandos menu_opcoes();
Menu Opções
Você controla
essa montagem toda pelo monitor serial. Então, toda vez o esquema vai ficar imprimindo
o Menu de Opções que você tem, com comandos, direcionamentos.
void menu_opcoes() { Serial.println(); Serial.println("Comandos:"); Serial.print(" [1-"); Serial.print(maxSongs); Serial.println("] Para selecionar o arquivo MP3"); Serial.println(" [s] parar reproducao"); Serial.println(" [p] pausa/continua a musica"); Serial.println(" [e] seleciona equalizacao"); Serial.println(" [+ or -] aumenta ou diminui o volume"); Serial.println(); }
Loop
void loop() { //Aguarda a entrada de dados pela serial while (Serial.available() > 0) { //recupera os dados de entrada buf = Serial.readStringUntil('\n'); //Reproducao (índice da música) if ((buf.toInt() >= 1) && (buf.toInt() <= maxSongs)) { Serial.print("Reproduzindo musica: "); Serial.println(buf.toInt()); myDFPlayer.play(buf.toInt()); // dá play na música menu_opcoes(); } //Pausa/Continua a musica if (buf == "p") { if (pausa) { Serial.println("Continua musica..."); myDFPlayer.start(); } else { Serial.println("Musica pausada..."); myDFPlayer.pause(); } pausa = !pausa; menu_opcoes(); } //Parada if (buf == "s") { myDFPlayer.stop(); Serial.println("Musica parada!"); menu_opcoes(); } //Seleciona equalizacao if (buf == "e") { equalizacao++; if (equalizacao == 6) { equalizacao = 0; } myDFPlayer.EQ(equalizacao); Serial.print("Equalizacao: "); Serial.print(equalizacao); Serial.println(" (0 = Normal, 1 = Pop, 2 = Rock, 3 = Jazz, 4 = Classic, 5 = Bass)"); menu_opcoes(); } //Aumenta volume if (buf == "+") { myDFPlayer.volumeUp(); Serial.print("Volume atual:"); Serial.println(myDFPlayer.readVolume()); menu_opcoes(); } //Diminui volume if (buf == "-") { myDFPlayer.volumeDown(); Serial.print("Volume atual:"); Serial.println(myDFPlayer.readVolume()); menu_opcoes(); } } //while } //loop
10 Comentários
Parabens pela qualidade e também pelo cuidado de fazer as aulas
ResponderExcluirEu fiz más quando a musica acaba ele para eu queria que continua-se para a próxima musica.
ResponderExcluirExcelente trabalho!
ResponderExcluirPreciso saber se é possível e como reproduzir uma música toda vez que um sensor ligado a uma entrada digital ficar acionado...qualquer dica é válida
Boa pergunta, também tenho esse mesmo questionamento, preciso acionar uma musica quando um switch (sensor fim de curso) for acionado. Agradecemos qualquer dica.
ExcluirOlá. Tentei utilizar o DFPlayer mas simplesmente não funciona. Já testei 3 placas em modo stand alone porém não funcionam. Estou utilizando um cartão de memória com algumas músicas mp3 porém o módulo só esquenta e não toca nada. Usei inclusive fonte externa, porém sem resultado.
ResponderExcluirSeria possivel eu variar o bpm da musica? aumentar ou diminuir a velocidade da batida? obrigado
ResponderExcluirConseguiu a resposta ? também tenho interesse
ExcluirOlá. Estou tendo um probleminha com o módulo. Testei o módulo DFPlayer no modo standalone e funcionou perfeitamente mas no modo microcontrolado não funciona. Já verifiquei as ligações e esta tudo okay. Parece haver um problema com a comunicação UART entre o arduino e o módulo. Como saio dessa?
ResponderExcluirPara a utilização de bateria externa recarregável, qual recomendaria?
ResponderExcluirBom dia, tem como programar o dfplayer? gostaria de ao apertar o botão 1 tocar música da pasta 001 e ao apertar o botão 2 tocar música da pasta 002
ResponderExcluir