Como Tocar Música com o Arduino

,

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.

DFR0299 (MP3-TF-16P) - WJ Componentes
Arduíno UNO

Componentes Utilizados


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:

NoPinDescriptionNote
1VCCInput VoltageDC 3.2~5.0V ; Type: DC 4.2V
2RXUART Serial Input
3TXUART Serial Output
4DAC_RÁudio Output Right ChannelDrive Earphone and Amplifer
5DAC_LÁudio Output Left ChannelDrive Earphone and Amplifer
6SPK2SpeakerDrive Speaker Less than 3W
7GNDGroundPower GND
8SPK1SpeakerDrive Speaker Less than 3W
9IO1Trigger Port 1Short Press to Play Previous (long press to decrease volume)
10GNDGroundPower GND
11IO2Trigger Port 2Short Press to Play Previous (long press to decrease volume)
12ADKEY1AD Port 1Trigger Play Fifth Segment
13ADKEY2AD Port 2Trigger Play Fifth Segment
14USB+USB+ DPUSB Port
15USB-USB- DMUSB Port
16BUSYPlaying StatusLow 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.

Montagem do Circuito Eletrônico na Protoboard - Arduíno com MP3

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.

Arduíno com MP3 Serial - WJ Componentes

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

    Julio Cesar Bonow Manoel

    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

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *