Olá, como estão? Vocês estão procurando um modulo MP3 para seu projeto? O modelo DFR0299 (MP3-TF-16P) é um modulo que consegue ler arquivos mp3 dentro do cartão SD e via USB. Contudo ele permite colocarmos dois altos falantes de até 3W sem precisar de um amplificador, além de ele ser compacto e ter um baixo consumo. Portanto ele é uma ótima opção quando quiser utilizar um Arduíno com MP3, para colocar efeitos sonoros.
Componentes Utilizados
- 1x Arduíno UNO
- 1x DFR0299
- 1x Alto Falante 0.5W
- 1x Resistor 330 Ohms
- Jumpers
Funcionamento do Projeto Arduíno com MP3
O circuito terá um Arduíno UNO que será responsável por alimentar o DFR0299 e se conectara ao modulo para assim transmitir as informações que o usuário pedir, e o irá DFR0299 estará conectado a um alto falante. Contudo será controlado pelo Serial com 5 opções, são elas:
- Próxima Música;
- Música Anterior;
- Play e Pausar;
- Aumentar volume;
- Diminuir volume;
Montagem do Circuito do Projeto Arduíno com MP3
Logo após a compra dos componentes na WJ Componentes, vamos à montagem! Então para realizar essa montagem primeiro temos que saber a pinagem do modulo DFR0299. Primeiramente a pinagem:
No | Pin | Description | Note |
---|---|---|---|
1 | VCC | Input Voltage | DC 3.2~5.0V ; Type: DC 4.2V |
2 | RX | UART Serial Input | |
3 | TX | UART Serial Output | |
4 | DAC_R | Áudio Output Right Channel | Drive Earphone and Amplifer |
5 | DAC_L | Áudio Output Left Channel | Drive Earphone and Amplifer |
6 | SPK2 | Speaker | Drive Speaker Less than 3W |
7 | GND | Ground | Power GND |
8 | SPK1 | Speaker | Drive Speaker Less than 3W |
9 | IO1 | Trigger Port 1 | Short Press to Play Previous (long press to decrease volume) |
10 | GND | Ground | Power GND |
11 | IO2 | Trigger Port 2 | Short Press to Play Previous (long press to decrease volume) |
12 | ADKEY1 | AD Port 1 | Trigger Play Fifth Segment |
13 | ADKEY2 | AD Port 2 | Trigger Play Fifth Segment |
14 | USB+ | USB+ DP | USB Port |
15 | USB- | USB- DM | USB Port |
16 | BUSY | Playing Status | Low means playing \ High means no |
O DFR0299 é um modulo que utiliza RX e TX, mesmo que não utilizemos o nativo do Arduíno, pois iremos simular com a biblioteca Software Serial acho interessante de lembrar como essa conexão é feita, ela é feita com um RX de uma e TX da outra.
Então agora que já sabemos a pinagem do modulo iremos realizar as ligações. Logo após conectamos na protoboard o modulo juntamente com o alto falante segue abaixo uma imagem da ligação do circuito. Contudo lembrando que o resistor iremos colocar na saída RX do modulo.
Contudo segue abaixo uma imagem que demonstrando a montagem do circuito.
Obs.: Então para a musica funcionar no SD ela tem que ser de 48kHz ou inferior e o SD tem que ser no máximo 32Gb
Código-fonte do Projeto Arduíno com MP3
Em seguida segue abaixo o código-fonte completo do projeto.
//Bibliotecas ----------------------------------------------------------------------------------------
#include "SoftwareSerial.h" // Biblioteca para Serial
#include "DFRobotDFPlayerMini.h" // Biblioteca MP3-TF-16P
//Definições -----------------------------------------------------------------------------------------
#define pinRX 10 // Define pino do RX
#define pinTX 11 // Define pino do TX
//Variáveis Globais ----------------------------------------------------------------------------------
int cont = 1; // Variável auxiliar
int pausa = 0; // Variável para pausar a musica
//Declaração de Objetos ------------------------------------------------------------------------------
SoftwareSerial mp3_playerSerial(pinRX, pinTX); // Criar o objeto Software Serial
DFRobotDFPlayerMini mp3_player; // Criar objeto do MP3-TF16P
//Função Auxiliar ------------------------------------------------------------------------------------
void printMenu(); // Função para imprimir o menu
String pegaComando(); // Função para pega o comando digitado
//Setup ----------------------------------------------------------------------------------------------
void setup(){
Serial.begin(9600); // Inicializa o Serial
// MP3-TF-16P
mp3_playerSerial.begin(9600); // Inicia o Serial do Software Serial
if (!mp3_player.begin(mp3_playerSerial)) { // Comunicação realizada pelo Software Serial
Serial.println("Falha ao iniciar:"); // Imprime na Serial
Serial.println("1.Confira as conexões!"); // Imprime na Serial
Serial.println("2.Confira o cartão SD!"); // Imprime na Serial
while(true){} // Loop Infinito
}
Serial.println("DFPlayer ligado!"); // Imprime na Serial
delay(100); // Espere 0,1s
Serial.print("Numero de arquivos no cartão SD: "); // Imprime na Serial
Serial.println(mp3_player.readFileCounts()); // Conta quantos arquivos tem no SD
mp3_player.setTimeOut(500); // Timeout serial 500ms
mp3_player.play(1); // Coloca musica um na linha de reprodução
}
//Loop -----------------------------------------------------------------------------------------------
void loop(){
delay(500); // Espera 0,5s
printMenu(); // Imprime Menu
String command = pegaComando(); // Faz a leitura do comando digitado
int i = command.toInt(); // Transforma a string em inteiro
switch(i){ // Verifica qual o número digitado
case 1:
if(pausa == 0){ // Verifica se esta pausada
mp3_player.start(); // Play na musica
pausa=1; // Atribui 1 a pause
}
else{
mp3_player.stop(); // Pausa a música
pausa=0; // Atribui 0 a pause
}
break;
case 2:
mp3_player.next(); // Próxima música
cont++; // Incrementa +1 em cont
pausa=1; // Atribui 1 a pause
break;
case 3:
mp3_player.previous(); // Música anterior
cont--; // Decrementa -1 em cont
pausa=1; // Atribui 1 a pause
break;
case 4:
mp3_player.volumeUp(); // Aumenta o volume
Serial.print("\nVolume Atual:"); // Imprime na Serial
Serial.println(mp3_player.readVolume()); // Imprime volume atual
break;
case 5:
mp3_player.volumeDown(); // Diminui o volume
Serial.print("\nVolume Atual:"); // Imprime na Serial
Serial.println(mp3_player.readVolume()); // Imprime volume atual
break;
default:
Serial.println("Comando Invalido"); // Imprime na Serial
break;
}
}
//Imprime Menu ---------------------------------------------------------------------------------------
void printMenu(){
Serial.println();
Serial.print("Reproduzindo musica: ");
switch(cont){ // Verifique o valor de cont e imprime
case 1: // O nome da musica correspondente
Serial.println("Beggin");
break;
case 2:
Serial.println("Astronaut in the Ocean");
break;
case 3:
Serial.println("Morena");
break;
}
Serial.println("1 - Play/Pause");
Serial.println("2 - Próxima Musica");
Serial.println("3 - Musica Anterior");
Serial.println("4 - Aumenta o Volume");
Serial.println("5 - Diminui o Volume");
}
// Pega Comando --------------------------------------------------------------------------------------
String pegaComando(){
while(!Serial.available()) delay(100); // Fica esperando digitar algo no Serial
return Serial.readStringUntil('\n'); // Retorna oque foi escrito no Serial
}
Vamos dar uma olhada mais de perto no código:
Incluindo Bibliotecas
Primeiramente temos que incluir as bibliotecas que iremos utilizar em nosso projeto.
//Bibliotecas ----------------------------------------------------------------------------------------
#include "SoftwareSerial.h" // Biblioteca para Serial
#include "DFRobotDFPlayerMini.h" // Biblioteca MP3-TF-16P
Definição de Pinos
Em seguida definimos os pinRX e pinTX.
//Definições -----------------------------------------------------------------------------------------
#define pinRX 10 // Define pino do RX
#define pinTX 11 // Define pino do TX
Variáveis Globais
Então declaramos 2 variável global, sendo elas cont e pause.
//Variáveis Globais ----------------------------------------------------------------------------------
int cont = 1; // Variável auxiliar
int pausa = 0; // Variável para pausar a musica
Declaração de Objetos
Então declaramos 2 variável global, sendo elas cont e pause.
//Declaração de Objetos ------------------------------------------------------------------------------
SoftwareSerial mp3_playerSerial(pinRX, pinTX); // Criar o objeto Software Serial
DFRobotDFPlayerMini mp3_player; // Criar objeto do MP3-TF16P
Declaração de Funções Auxiliares
Em seguida declaramos também 2 funções auxiliares, sendo elas printMenu e pegaComando.
//Função Auxiliar ------------------------------------------------------------------------------------
void printMenu(); // Função para imprimir o menu
String pegaComando(); // Função para pega o comando digitado
Funções Setup
Logo após na primeira função iremos inicializar serial e o modulo, que é definida no setup.
//Setup ----------------------------------------------------------------------------------------------
void setup(){
Serial.begin(9600); // Inicializa o Serial
// MP3-TF-16P
mp3_playerSerial.begin(9600); // Inicia o Serial do Software Serial
if (!mp3_player.begin(mp3_playerSerial)) { // Comunicação realizada pelo Software Serial
Serial.println("Falha ao iniciar:"); // Imprime na Serial
Serial.println("1.Confira as conexões!"); // Imprime na Serial
Serial.println("2.Confira o cartão SD!"); // Imprime na Serial
while(true){} // Loop Infinito
}
Serial.println("DFPlayer ligado!"); // Imprime na Serial
delay(100); // Espere 0,1s
Serial.print("Numero de arquivos no cartão SD: "); // Imprime na Serial
Serial.println(mp3_player.readFileCounts()); // Conta quantos arquivos tem no SD
mp3_player.setTimeOut(500); // Timeout serial 500ms
mp3_player.play(1); // Coloca musica um na linha de reprodução
}
Funções Loop
Então na segunda função o loop será onde chamaremos a função printmenu e iremos esperar o usuário digitar o comando para redireciona-lo, para a o seu comando correspondente.
//Loop -----------------------------------------------------------------------------------------------
void loop(){
delay(500); // Espera 0,5s
printMenu(); // Imprime Menu
String command = pegaComando(); // Faz a leitura do comando digitado
int i = command.toInt(); // Transforma a string em inteiro
switch(i){ // Verifica qual o número digitado
case 1:
if(pausa == 0){ // Verifica se esta pausada
mp3_player.start(); // Play na musica
pausa=1; // Atribui 1 a pause
}
else{
mp3_player.stop(); // Pausa a música
pausa=0; // Atribui 0 a pause
}
break;
case 2:
mp3_player.next(); // Próxima música
cont++; // Incrementa +1 em cont
pausa=1; // Atribui 1 a pause
break;
case 3:
mp3_player.previous(); // Música anterior
cont--; // Decrementa -1 em cont
pausa=1; // Atribui 1 a pause
break;
case 4:
mp3_player.volumeUp(); // Aumenta o volume
Serial.print("\nVolume Atual:"); // Imprime na Serial
Serial.println(mp3_player.readVolume()); // Imprime volume atual
break;
case 5:
mp3_player.volumeDown(); // Diminui o volume
Serial.print("\nVolume Atual:"); // Imprime na Serial
Serial.println(mp3_player.readVolume()); // Imprime volume atual
break;
default:
Serial.println("Comando Invalido"); // Imprime na Serial
break;
}
}
Função printMenu
Logo após nas funções printMenu será somente para imprimir no monitor serial o menu com todas as opções.
//Imprime Menu ---------------------------------------------------------------------------------------
void printMenu(){
Serial.println();
Serial.print("Reproduzindo musica: ");
switch(cont){ // Verifique o valor de cont e imprime
case 1: // O nome da musica correspondente
Serial.println("Beggin");
break;
case 2:
Serial.println("Astronaut in the Ocean");
break;
case 3:
Serial.println("Morena");
break;
}
Serial.println("1 - Play/Pause");
Serial.println("2 - Próxima Musica");
Serial.println("3 - Musica Anterior");
Serial.println("4 - Aumenta o Volume");
Serial.println("5 - Diminui o Volume");
}
Função pegaComando
Então a próxima será a função pegaComando ela é responsável por quando o usuário digitar algo ela retornar para a função o que o usuário digitou.
// Pega Comando --------------------------------------------------------------------------------------
String pegaComando(){
while(!Serial.available()) delay(100); // Fica esperando digitar algo no Serial
return Serial.readStringUntil('\n'); // Retorna oque foi escrito no Serial
}
E assim encerramos o projeto Arduíno com MP3.
Resultado do Projeto Arduíno com MP3
Por fim esse foi o resultado obtido com nosso projeto.
Agradecemos sua Presença
Por fim, espero que tenham gostado e aprendido. Compartilhe com seus colegas e deixe um comentário de qual projeto deveria ser o próximo aqui no Blog da WJ Componentes!!
Enfim estarei deixando os arquivos do código-fonte e Fritzing, software e sites utilizados e deixarei também o GitHub da biblioteca utilizada.
Fique à vontade para tirar suas dúvidas nos comentários.
Software e Sites Utilizados
GitHub das Bibliotecas Utilizadas
Post Relacionados
Posts mais Recentes
- Programando Relé RF 4331 -Instruções de emparelhamento do modo de alternância Modo de… Leia mais: Programando Relé RF 433
- Acionando motor DC por meio do pino “Touch” do ESP-32Neste projeto, vamos explorar uma aplicação ainda mais dinâmica e… Leia mais: Acionando motor DC por meio do pino “Touch” do ESP-32
- Acendendo led RGB por meio do pino “Touch” do ESP-32No último post, exploramos o fascinante mundo dos pinos touch… Leia mais: Acendendo led RGB por meio do pino “Touch” do ESP-32
- Utilizando os Pinos touch do ESP32Nesse projeto Vamos aprender a usar os pinos touch´s do… Leia mais: Utilizando os Pinos touch do ESP32
- Como Programar e Localizar o Endereço de uma Tela OLED I2C com Arduinoeste guia, vou levá-lo através dos passos para programar uma… Leia mais: Como Programar e Localizar o Endereço de uma Tela OLED I2C com Arduino
Julio Cesar Bonow Manoel
Cursando Engenharia da Computação pelo Centro Universitário Facens e atua no desenvolvimento de projetos na WJ Componentes. Participante da equipe de robótica Omegabotz.
Deixe um comentário