Serwisy partnerskie:
Close icon
Serwisy partnerskie

Odtwarzacz MP3 zbudowany na Arduino i DFPlayer mini

Article Image
Elmax
DFPlayer mini jest małym, tanim modułem mp3 z uproszczonym wyjściem audio, które można podłączyć bezpośrednio do głośnika lub gniazda słuchawkowego. Może być używany jako samodzielny moduł z dołączoną baterią, głośnikiem i przyciskami lub używany w połączeniu z mikrokontrolerem lub płytką rozwojową jak Arduino, włączoną do komunikacji RX/TX (Serial), dzięki czemu poprzez proste komendy szeregowe możemy odtwarzać muzykę i wykonywać inne funkcje jak odtwarzanie następnego i poprzedniego utworu, shuffle, pauzowanie aktualnie odtwarzanego utworu itp. Moduł wyposażony jest w slot kart SD i obsługuje systemy plików FAT16, FAT32.

Niektóre z cech odtwarzacza DF player mini obejmują:

  • Obsługa częstotliwości próbkowania 8 kHz, 11,025 kHz, 12 kHz, 16 kHz, 22,05 kHz, aż do 48 kHz
  • 24-bitowe wyjście DAC, zakres dynamiki 90 dB, SNR 85 dB
  • Obsługuje system plików FAT16, FAT32, maksymalna obsługa kart TF 32 GB
  • Różnorodność trybów sterowania, tryb szeregowy, tryb sterowania kluczem AD
  • Funkcja spotów języka transmisji, można wstrzymać odtwarzanie muzyki w tle
  • Wbudowany wzmacniacz 3 W
  • Dane audio są posortowane według folderów; obsługuje do 100 folderów, w każdym folderze może być zapisane blisko 1000 utworów
  • 30 poziomów głośności z możliwością regulacji, 10 poziomów EQ z możliwością regulacji.

Celem tego projektu jest zademonstrowanie zastosowania tego modułu z Arduino, używając przycisków do instruowania Arduino, aby wysyłało komendy szeregowe do modułu i sterowało mp3. Aby to osiągnąć, użyjemy trzech przycisków. Pierwszy przycisk będzie służył jako  "poprzedni", który umożliwi nam odtwarzanie poprzedniego utworu. Drugi przycisk będzie służył do "play/pause" aktualnie odtwarzanego pliku, a trzeci do odtwarzania następnego pliku.

Schemat

Schemat dla tego projektu jest dość prosty

Schemat połączeń DFPlayer Mini z Arduino

Jak widać powyżej połączenie pomiędzy Arduino a DFPlayer mini jest bardzo proste, ponieważ musimy podłączyć tylko dwa piny  VCC i GND. Należy zauważyć, że rezystor 1 kΩ dodany pomiędzy pinem Rx modułu a Arduino został dodany w celu redukcji szumów, ale nie jest on konieczny, jeśli Twojej konfiguracji modułu nie towarzyszą szumy na linii Rx. Połączenie jest opisane poniżej dla przejrzystości.

Połączenie wyświetlacza LCD z Arduino Mega
DFPlayer Mini
Arduino
Rx
D11
Tx
D10
VCC
5 V
GND
GND

Przejrzyj jeszcze raz połączenia, aby upewnić się, że wszystko jest tak, jak powinno być. Nasze przełączniki są celowo podłączone bez rezystorów pull up (lub down), ponieważ będziemy włączać wewnętrzne rezystory pull up Arduino.

Kod

Aby wysyłać komendy z Arduino do DFplayer mini na podstawie wciśniętego przycisku, użyjemy biblioteki szeregowej oprogramowania Arduino. Chociaż mogliśmy użyć sprzętowego portu szeregowego do wysyłania komend z Arduino do DFplayer mini, sprzętowe piny szeregowe Arduino (0 i 1) są tymi samymi pinami, których Arduino używa do komunikacji z komputerem i mogą uniemożliwić płynne przesłanie kodu, jeśli są podłączone do jakiegokolwiek innego urządzenia. Tak więc, aby komunikować się w bezstresowy sposób, użyjemy programowej biblioteki szeregowej z pinami 10 i 11.

Kod do tego tutoriala jest prosty, podczas gdy DFPlayer mini posiada bibliotekę, która zawiera różne funkcje do sterowania odtwarzaczem mp3, my napiszemy własne funkcje dla zabawy i aby pomóc pokazać jak naprawdę działa moduł.

Pierwszą rzeczą jaką robimy w kodzie, jak zwykle, jest dołączenie bibliotek,  z których będziemy korzystać. W tym przypadku jest to biblioteka Serial Software, tworzymy obiekt tej biblioteki deklarując piny Rx i Tx (odpowiednio 10 i 11).

//////////////////////////////////////////
/// PROJEKT ODTWARZACZA MP3 ///
/// http://educ8s.tv/arduino-mp3-player ///
//////////////////////////////////////////

#include "SoftwareSerial.h"

SoftwareSerial mySerial(10, 11);

Następnie definiujemy niektóre z komend, których będziemy używać podając wartości heksadecymalne.

# define Start_Byte 0x7E

# define Version_Byte 0xFF

# define Command_Length 0x06

# define End_Byte 0xEF

# define Acknowledge 0x00 //Zwraca info z komendą 0x41 [0x01: info, 0x00: brak info]

Następnie deklarujemy piny Arduino, do których podłączone są przyciski.

int buttonNext = 2;

int buttonPause = 3;

int buttonPrevious = 4;

Następnie przechodzimy do funkcji void setup, gdzie ustawiamy tryb pinów, do których podłączone są przyciski i ustawiamy te piny w stan wysoki. Po wykonaniu tych czynności uruchamiamy programową komunikację szeregową z szybkością 9600 bodów.

void setup () {

pinMode(buttonPause, INPUT);

digitalWrite(buttonPause,HIGH);

pinMode(buttonNext, INPUT);

digitalWrite(buttonNext,HIGH);

pinMode(buttonPrevious, INPUT);

digitalWrite(buttonPrevious,HIGH);

mySerial.begin (9600);

Następnie odtwarzamy pierwszy utwór na urządzeniu magazynującym za pomocą funkcji playfirst() i ustawiamy zmienną boolean isPlaying na wartość true, aby wskazać, że jeden z plików jest aktualnie odtwarzany.

delay(1000);

playFirst();

isPlaying = true;

Przechodząc do funkcji void loop, funkcja ta w zasadzie sprawdza czy został naciśnięty przycisk i wysyła odpowiednie polecenie do DFPlayer mini, który następnie albo odtwarza (w zależności od wartości zmiennej "isplaying") lub pauzuje bieżący utwór, albo przechodzi do następnego lub poprzedniego utworu.

void loop () {

 if (digitalRead(buttonPause) == ACTIVATED)

  {

    if(isPlaying)

    {

      pause();

      isPlaying = false;

    }else

    {

      isPlaying = true;

      play();

    }

  }

 if (digitalRead(buttonNext) == ACTIVATED)

  {

    if(isPlaying)

    {

      playNext();

    }

  }

   if (digitalRead(buttonPrevious) == ACTIVATED)

  {

    if(isPlaying)

    {

      playPrevious();

    }

  }

}

Kompletny kod projektu jest dostępny poniżej i można go pobrać z sekcji download tego tutoriala.

/// PROJEKT ODTWARZACZA MP3

/// http://educ8s.tv/arduino-mp3-player/

//////////////////////////////////////////

#include "SoftwareSerial.h"

SoftwareSerial mySerial(10, 11);

# define Start_Byte 0x7E

# define Version_Byte 0xFF

# define Command_Length 0x06

# define End_Byte 0xEF

# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]

# define ACTIVATED LOW

int buttonNext = 2;

int buttonPause = 3;

int buttonPrevious = 4;

boolean isPlaying = false;

void setup () {

pinMode(buttonPause, INPUT);

digitalWrite(buttonPause,HIGH);

pinMode(buttonNext, INPUT);

digitalWrite(buttonNext,HIGH);

pinMode(buttonPrevious, INPUT);

digitalWrite(buttonPrevious,HIGH);

mySerial.begin (9600);

delay(1000);

playFirst();

isPlaying = true;

}

void loop () {

 if (digitalRead(buttonPause) == ACTIVATED)

  {

    if(isPlaying)

    {

      pause();

      isPlaying = false;

    }else

    {

      isPlaying = true;

      play();

    }

  }

 if (digitalRead(buttonNext) == ACTIVATED)

  {

    if(isPlaying)

    {

      playNext();

    }

  }

   if (digitalRead(buttonPrevious) == ACTIVATED)

  {

    if(isPlaying)

    {

      playPrevious();

    }

  }

}

void playFirst()

{

  execute_CMD(0x3F, 0, 0);

  delay(500);

  setVolume(20);

  delay(500);

  execute_CMD(0x11,0,1);

  delay(500);

}

void pause()

{

  execute_CMD(0x0E,0,0);

  delay(500);

}

void play()

{

  execute_CMD(0x0D,0,1);

  delay(500);

}

void playNext()

{

  execute_CMD(0x01,0,1);

  delay(500);

}

void playPrevious()

{

  execute_CMD(0x02,0,1);

  delay(500);

}

void setVolume(int volume)

{

  execute_CMD(0x06, 0, volume); // Ustaw głośność (0x00~0x30)

  delay(2000);

}

void execute_CMD(byte CMD, byte Par1, byte Par2)

// Wykonaj polecenie i parametry

{

// Oblicz sumę kontrolną (2 bajty)

word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);

// Zbuduj wiersz poleceń

bajt Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,

Par1, Par2, highByte(suma kontrolna), lowByte(suma kontrolna), End_Byte};

//Wyślij linię poleceń do modułu

for (byte k=0; k<10; k++)

{

mySerial.write( Command_line[k]);

}

}

Demo

Załaduj kartę SD z piosenkami i włóż ją do DFplayera mini, następnie wgraj kod do swojego Arduino i podłącz przewody od głośnika do pinów głośnikowych DFPlayera mini. Powinieneś usłyszeć, że z podłączonego głośnika zaczną wydobywać się piosenki. Twoja ostateczna konfiguracja powinna wyglądać tak, jak na poniższym obrazku.

Konfiguracja sprzętu

Niektóre z zastosowań tego projektu są wymienione poniżej i mam nadzieję, że da ci to inspirację do zbudowania czegoś naprawdę fajnego.

Przykłady zastosowania

  • Sygnały głosowe alarmu przeciwpożarowego
  • Stacje poboru opłat podpowiedzi głosowe
  • Elektryczność, komunikacja, finansowa sala biznesowa podpowiedzi głosowe
  • Wielokanałowy alarm głosowy lub głos przewodnika obsługi sprzętu
Wideo
Do pobrania
Download icon Kompletny program do Arduino

Artykuł MP3 PLAYER USING ARDUINO AND DFPLAYER MINI opracowano w wersji polskiej na podstawie współpracy z portalem www.electronics-lab.com.

Firma:
Tematyka materiału: mp3, odtwarzacz mp3, FAT32, FAT16, stacje pobory opłat, alarm przeciwpożarowy, podpowiedzi głosowe, elektryczność, komunikacja, alarm głosowy
AUTOR
Źródło
www.electronics-lab.com
Udostępnij
Zobacz wszystkie quizy
Quiz weekendowy
Edukacja
1/10 Jak działa rezystor LDR?
UK Logo
Elektronika dla Wszystkich
Zapisując się na nasz newsletter możesz otrzymać GRATIS
najnowsze e-wydanie magazynu "Elektronika dla Wszystkich"