MP3 Player com Arduino Uno



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.

O esquema serve não só para o tocador de música, mas para dar voz a um aparelho de cancela de estacionamento, um robô, entre outros, por exemplo. Essa montagem vai permitir colocar nos aparelhos uma voz gravada, natural, e não a sintetizada, que muitas pessoas não gostam.
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).

#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

Arquivos para download:


Um comentário:

  1. Parabens pela qualidade e também pelo cuidado de fazer as aulas

    ResponderExcluir

Tecnologia do Blogger.