Arduino, Internet das Coisas e Computação vestível

Você está em » Home : Módulos :: Áudio ::: Módulo MP3 Mini DFPlayer

[Voltar]

[Avançar]

Módulo MP3 Mini DFPlayer

Descrição

Módulo compacto de fácil utilização e integração com placas e microcontroladores podendo ser controlado via interface serial ou através de botões conectados diretamente ao módulo. Ele é compatível com cartões microSD formatados como FAT16 ou FAT32 (tamanho máximo de 32GB) e suporta várias taxas de amostragem, podendo ser usado em sistemas de alarme, navegação, sistemas de informação, brinquedos, automação residencial e muitas outras aplicações. Para um melhor funcionamento é aconselhavel o uso com alto-falante 0,5w 8 ohms ou mais potente. O módulo utiliza a comunicação serial RX TX, VCC, GND. Ele tem saída para dois alto-falantes e entrada de áudio.


Especificações

  • Tensão de operação: 3.3 à 5VDC
  • Formatos suportados: MP3, WAV, WMA
  • Taxas de amostragem (KHz): 8/11.025/12/16/22.05/24/32/44.1/48
  • Saída DAC 24 bits
  • Slot para cartão microSD
  • Formatação suportada: FAT16 e FAT32
  • Capacidade máxima do cartão SD: 32GB
  • Modos de controle: teclado, botões e interface serial
  • Modo propaganda: suspende a música e volta a tocar quando a propaganda termina
  • Suporta até 100 pastas no cartão SD, com no máximo 255 músicas cada pasta
  • 30 níveis de volume ajustáveis
  • 6 níveis de equalização ajustáveis
  • Dimensões: 21 x 20 x 4,5mm

Biblioteca

A biblioteca DFRobotDFPlayerMini. O resistor de 330 ohms conectado ao pino RX do módulo elimina ruídos no alto-falante.


Projeto(s) relacionado(s)


Cartaz interativo com sensor capacitivo

1) Primeira Versão

O projeto utiliza placa Arduino Mega, 1 resistor de 330 KΩ, 5 resistores de 1 MΩ, Módulo MP3 Mini DFPlayer, alto-falante 0,5w 8 ohms ou mais potente, tinta condutiva e biblioteca CapacitiveSensor.h para criar cinco (5) sensores capacitivos.

O resistor de 1 resistor de 330 KΩ é utilizado junto ao Módulo MP3 Mini DFPlayer.

Cada sensor capacitivo criado utiliza dois pinos digitais do arduino. O primeiro pino é chamado de Emissor e o segundo de Receptor. A função capacitiveSensor (biblioteca CapacitiveSensor.h) alterna o pino Emissor para um novo estado e aguarda que o pino Receptor mude para o mesmo estado.

O circuito inclui 5 resistores de valor médio a alto (1 MΩ) entre o pino Emissor e Receptor. O pino Receptor é o terminal do sensor. Um fio conectado a este pino com um pedaço de papel alumínio na extremidade ou tinta condutiva é um bom condutor. Pode ser acrescentado no sistema um capacitor de 100 pF no pino terra (GND) do pino Receptor, melhorando a estabilidade e a repetibilidade da corrente (capacitância).

Quando uma mudança de tensão ocorre no Receptor ao aproximarmos a mão do sensor, o corpo age como um condensador e modifica o valor da capacitância. Em outras palavras,  a resistência no circuito é reduzida e a tensão é aumentada. Saiba mais em: https://playground.arduino.cc/Main/CapacitiveSensor


Considerações

 



// Cartaz interativo com sensor capacitivo - Versão 1
// Autor: André Silveira
// Data: 10/11/2019

#include <Arduino.h>
#include <SoftwareSerial.h>
#include <CapacitiveSensor.h>
#include <DFRobotDFPlayerMini.h>

int volume = 20;
int musica = 0;
int segundos = 50;

// -- Declara valor da capacitância (maior que) quando os sensores são pressionados -- //

int capacitancia_sensor1 = 200;
int capacitancia_sensor2 = 200;
int capacitancia_sensor3 = 200;
int capacitancia_sensor4 = 200;
int capacitancia_sensor5 = 200;

String tecla_status = "play";

// --- Declara pinos Emissor e Receptor (Sender e Receiver) dos sensores --- //
   
CapacitiveSensor sensor1 = CapacitiveSensor(34,35);
CapacitiveSensor sensor2 = CapacitiveSensor(36,37);
CapacitiveSensor sensor3 = CapacitiveSensor(38,39);
CapacitiveSensor sensor4 = CapacitiveSensor(5,4); 
CapacitiveSensor sensor5 = CapacitiveSensor(7,6);

// --- Declara objetos para DFPlayerMini --- //

SoftwareSerial mySoftwareSerial(10, 11);           // Pinos RX, TX de comunicação serial
DFRobotDFPlayerMini myDFPlayer;

void setup() {

  mySoftwareSerial.begin(9600);

  Serial.begin(9600);
  Serial.println();  
  Serial.println(F("DFRobot DFPlayer Mini"));                        
    
  if (!myDFPlayer.begin(mySoftwareSerial))  {    
      Serial.println(">> Nao inicializado!");     
      while(true){
        delay(0); 
      }
  }

  Serial.println(">> Inicializado!");

  // ---- Configure myDFPlayer - tempo leitura e volume (0 até 30) ---- //
  
  myDFPlayer.setTimeOut(500); 
  myDFPlayer.volume(volume);              

  // -------- Autocalibragem dos sensores capacitivos ---------- //

  sensor1.set_CS_AutocaL_Millis(0xFFFFFFFF);
  sensor2.set_CS_AutocaL_Millis(0xFFFFFFFF);
  sensor3.set_CS_AutocaL_Millis(0xFFFFFFFF);
  sensor4.set_CS_AutocaL_Millis(0xFFFFFFFF);
  sensor5.set_CS_AutocaL_Millis(0xFFFFFFFF);

 // --- Intervalos de tempo para leitura dos sensores capacitivos --- //

  sensor1.set_CS_Timeout_Millis(segundos);
  sensor2.set_CS_Timeout_Millis(segundos);
  sensor3.set_CS_Timeout_Millis(segundos);
  sensor4.set_CS_Timeout_Millis(segundos);
  sensor5.set_CS_Timeout_Millis(segundos);
  
}

void loop() {


  // ----- Lê valor da capacitância de cada sensor ----- /

  long start = millis();
  long leitura1 =  sensor1.capacitiveSensor(30);
  long leitura2 =  sensor2.capacitiveSensor(30);
  long leitura3 =  sensor3.capacitiveSensor(30);
  long leitura4 =  sensor4.capacitiveSensor(30);
  long leitura5 =  sensor5.capacitiveSensor(30);  

  Serial.print(" S1:"); Serial.print(leitura1); 
  Serial.print(" S2:"); Serial.print(leitura2); 
  Serial.print(" S3:"); Serial.print(leitura3); 
  Serial.print(" S4:"); Serial.print(leitura4); 
  Serial.println(" S5:"); Serial.print(leitura5);   

  // ----- Se dois sensores forem acionados ao mesmo tempo ----- /

  if ((leitura1 > capacitancia_sensor1 and leitura2 > capacitancia_sensor2) or 
      (leitura1 > capacitancia_sensor1 and leitura3 > capacitancia_sensor3) or 
      (leitura2 > capacitancia_sensor2 and leitura3 > capacitancia_sensor3)) {      
      if (musica != 4) {
          musica = Mostra_tela ("Alerta som ", 4, volume);
      }
      return;   
  }

  // ----- Se três sensores forem acionados ao mesmo tempo ----- /

  if ((leitura1 > capacitancia_sensor1 and leitura4 > capacitancia_sensor4) or 
      (leitura1 > capacitancia_sensor1 and leitura5 > capacitancia_sensor5) or
      (leitura2 > capacitancia_sensor2 and leitura4 > capacitancia_sensor4) or 
      (leitura2 > capacitancia_sensor2 and leitura5 > capacitancia_sensor5) or 
      (leitura3 > capacitancia_sensor3 and leitura4 > capacitancia_sensor4) or 
      (leitura3 > capacitancia_sensor1 and leitura5 > capacitancia_sensor1) or 
      (leitura4 > capacitancia_sensor1 and leitura5 > capacitancia_sensor1)) {   
      if (musica != 5) {   
          musica = Mostra_tela ("Alerta som ", 5, volume);
      }
      return;   
  }

  // ----- Se sensor 1 for acionado ----- / 

  if (leitura1 > capacitancia_sensor1 and musica != 1) {
      musica = Mostra_tela ("Play som ", 1, volume);
      return;   
  }  

  // ----- Se sensor 2 for acionado ----- / 

  if (leitura2 > capacitancia_sensor2 and musica != 2) {
      musica = Mostra_tela ("Play som ", 2, volume);
      return;   
  }  

  // ----- Se sensor 3 for acionado ----- / 

  if (leitura3 > capacitancia_sensor3) {
      volume = volume_musica ("Volume ","true", volume);
      return;
  }  
 
  // ----- Se sensor 4 for acionado ----- / 

  if (leitura4 > capacitancia_sensor4) {
      volume = volume_musica ("Volume ","false", volume);  
      return;
  } 

  // ----- Se sensor 5 for acionado ----- / 
   
  if (leitura5 > capacitancia_sensor5 and tecla_status != "stop") {
      Serial.println("Stop");      
      musica =0; 
      tecla_status = "stop";
      myDFPlayer.stop();
      return;
  }
     
}

int Mostra_tela (String mensagem, int musica, int volume) { 

      tecla_status = "play";
      Serial.print(mensagem);
      Serial.println(musica);
      myDFPlayer.play(musica);
      return musica; 
}  

int volume_musica (String mensagem, int soma, int volume) {

      if (soma == "true") {
          volume = volume + 2;
          if (volume > 30) {
              volume = 30;  
          }      
      } else {
              volume = volume - 2;
              if (volume < 0) {
                  volume = 0;  
              } 
              }      

      Serial.print(mensagem);
      Serial.println(volume);
      myDFPlayer.volume(volume);  
      return volume;
}



Cartaz interativo: testes diversos (Montagem do circuito, player de música, alto falante, tinta condutiva, etc)


Cartaz Star Wars - instalação interativa com Arduino




2) Segunda versão

O projeto utiliza placa Arduino Nano, 1 resistor de 330 KΩ,Módulo MP3 Mini DFPlayer, alto-falante 0,5w 8 ohms ou mais potente e tinta condutiva. O resistor de 1 resistor de 330 KΩ é utilizado junto ao Módulo MP3 Mini DFPlayer.

Considerações



// Cartaz interativo com sensor capacitivo - Versão 2 
// Autor: André Silveira
// Data: 5/10/2021

#include "Arduino.h"
#include "Wire.h"
#include "SoftwareSerial.h"
#include "Adafruit_MPR121.h"
#include "DFRobotDFPlayerMini.h"

int tecla = 0;        
int volume = 20;
int musica = 99;
int segundos = 100;

// --- Declara bibliotecas Adafruit_MPR121 e DFPlayerMini --- //

Adafruit_MPR121 cap = Adafruit_MPR121();
SoftwareSerial mySoftwareSerial(10, 11);   // Pinos RX, TX de comunicação serial
DFRobotDFPlayerMini myDFPlayer;

void setup() {

   mySoftwareSerial.begin(9600);
   Serial.begin(9600);  
   Serial.println(">> Programa iniciado"); 
   
    // ---- I2C 7-bit address 0x5A é padrão (pode ser setado para 0x5B, 0x5C or 0x5D) ---- //
    
    if  (!cap.begin(0x5A)) {
         Serial.println("Sensor capacitivo >> Nao Encontrado!");
         while (1);
    }
    Serial.println("Sensor capacitivo encontrado"); 
  
   // ----  DFRobot DFPlayer Mini ---------- //
                            
    if (!myDFPlayer.begin(mySoftwareSerial))  {    
         Serial.println("DFRobot DFPlayer Mini >> Nao inicializado!");     
         while(true){
              delay(0); 
         }
    }
    Serial.println("DFRobot DFPlayer Mini >> Inicializado!");
    myDFPlayer.setTimeOut(500);             // tempo para leitura
    myDFPlayer.volume(volume);              // volume (0 até 50)
}

void loop() {

   tecla = cap.touched();
   for (uint8_t i=0; i<12; i++) {
       
       if  (tecla & _BV(i)) {
            Serial.print("Tecla apertada: ");
            Serial.println(i); 

            switch (i) {
                case 2:  
                case 3:        // Toca música
                      if (musica != i) {
                          Serial.print("Musica:");
                          Serial.println(i);
                          myDFPlayer.play(i);
                          musica = i;
                      }    
                      break;   
                case 4:        // Aumenta volume
                      Serial.print("Musica - Aumenta volume: ");
                      Serial.println(volume);
                      volume = volume + 4;
                      if (volume > 30) {
                          volume = 30;
                      }
                      myDFPlayer.volume(volume);
                      break;
                case 1:        // Baixa volume
                      Serial.print("Musica - Baixa volume: ");
                      Serial.println(volume);
                      volume = volume - 2;
                      if (volume < 0) {
                          volume = 0;
                      }
                      myDFPlayer.volume(volume);
                      break;   
                case 0:       // Stop e Reset
                      Serial.println("Musica - Stop e Reset"); 
                      volume = 30;                        
                      myDFPlayer.stop();
                      myDFPlayer.volume(volume); 
                      musica = 99;  
                      break;                             
                default:
                      Serial.print(i); 
                      Serial.println("Nada");
                      break;
          } // End switch          
       } // End if
   } // End for   

   delay(segundos);
}

 

 

[Voltar]

[Avançar]