Arduino Nano - MP3-speler

Deze tutorial legt uit hoe u een MP3-speler maakt met Arduino Nano, een MP3-spelermodule, Micro SD-kaart en speaker. De MP3-bestanden (muziek of opgenomen audio) worden opgeslagen op de micro SD-kaart. Vervolgens kan de Arduino Nano de MP3-spelermodule aansturen om een geselecteerd nummer van de SD-kaart te lezen, dit te converteren naar een audiosignaal en het signaal door te sturen naar de speaker. In detail leert u:

Daarna kunt u de code aanpassen om een potentiometer of rotary encoder toe te voegen voor het aanpassen van het volume.

Hardware Benodigd

1×Official Arduino Nano
1×Alternatief: DIYables ATMEGA328P Nano Development Board
1×USB A naar Mini-B USB kabel
1×Seriële MP3-spelermodule
1×Micro SD-kaart
1×3.5mm Aux speaker
1×Jumper wires (verbindingsdraden)
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Breakout Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Stromsplitter voor Arduino Nano

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over Seriële MP3-spelermodule en Speaker

Seriële MP3-spelermodule Pinout

Een seriële MP3-spelermodule heeft drie interfaces:

  • De interface naar Arduino Nano bestaat uit 4 pinnen:
    • RX pin: datapin, moet verbonden worden met TX pin van Arduino Nano (Hardware of Software Serial)
    • TX pin: datapin, moet verbonden worden met RX pin van Arduino Nano (Hardware of Software Serial)
    • VCC pin: voeding, moet verbonden worden met VCC (5V)
    • GND pin: voeding, moet verbonden worden met GND (0V)
  • De interface naar de speaker is een vrouwelijke 3.5mm Aux uitgang
  • De interface naar de Micro SD-kaart is een Micro SD-kaartsocket aan de achterkant van de module
Seriële MP3-spelermodule Pinout
image source: diyables.io

Speaker Pinout

Een speaker heeft meestal twee interfaces:

  • Audio signaal interface: een 3.5mm Aux mannelijke connector die verbonden wordt met de MP3-spelermodule
  • Voedingsinterface: dit kan USB zijn, een 5V voedingsadapter of een andere voedingsinterface

Hoe Het Werkt

Wat u moet voorbereiden:

  • Prestoreer een lijst met nummers of opgenomen audio die u wilt afspelen op de micro SD-kaart.
  • Plaats de micro SD-kaart in de MP3-spelermodule
  • Verbind de MP3-spelermodule met Arduino Nano
  • Verbind de speaker met de MP3-spelermodule
  • Sluit de speaker aan op een voeding

Elk MP3-bestand opgeslagen op de Micro SD-kaart krijgt een index. De index is de volgorde van de opgeslagen nummers, beginnend bij 0.

Daarna kunt u Arduino Nano programmeren om commando’s te sturen naar de MP3-spelermodule. Deze ondersteunt de volgende commando’s:

  • Play (Afspelen)
  • Pause (Pauzeren)
  • Play Next (Volgend nummer afspelen)
  • Play Previous (Vorige nummer afspelen)
  • Change volume (Volume aanpassen)

Wanneer de MP3-spelermodule een commando ontvangt, leest het het MP3-bestand van de micro SD-kaart, zet het MP3-bestand om in een audiosignaal en geeft het audiosignaal via de 3.5mm Aux uitgang door aan de speaker.

Aansluitschema

Arduino Nano MP3-speler module Aansluitschema

This image is created using Fritzing. Click to enlarge image

Arduino Nano Code - Muziek Afspelen

De onderstaande code speelt het eerste nummer dat op de Micro SD-kaart staat af.

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-mp3-player */ #include <SoftwareSerial.h> #define CMD_PLAY_NEXT 0x01 #define CMD_PLAY_PREV 0x02 #define CMD_PLAY_W_INDEX 0x03 #define CMD_SET_VOLUME 0x06 #define CMD_SEL_DEV 0x09 #define CMD_PLAY_W_VOL 0x22 #define CMD_PLAY 0x0D #define CMD_PAUSE 0x0E #define CMD_SINGLE_CYCLE 0x19 #define DEV_TF 0x02 #define SINGLE_CYCLE_ON 0x00 #define SINGLE_CYCLE_OFF 0x01 #define ARDUINO_RX 8 // Arduino Nano Pin connected to the TX of the Serial MP3 Player module #define ARDUINO_TX 7 // Arduino Nano Pin connected to the RX of the Serial MP3 Player module SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); void setup() { Serial.begin(9600); mp3.begin(9600); delay(500); // wait chip initialization is complete mp3_command(CMD_SEL_DEV, DEV_TF); // select the TF card delay(200); // wait for 200ms mp3_command(CMD_PLAY, 0x0000); // Play mp3 //mp3_command(CMD_PAUSE, 0x0000); // Pause mp3 //mp3_command(CMD_PLAY_NEXT, 0x0000); // Play next mp3 //mp3_command(CMD_PLAY_PREV, 0x0000); // Play previous mp3 //mp3_command(CMD_SET_VOLUME, 30); // Change volume to 30 } void loop() { } void mp3_command(int8_t command, int16_t dat) { int8_t frame[8] = { 0 }; frame[0] = 0x7e; // starting byte frame[1] = 0xff; // version frame[2] = 0x06; // The number of bytes of the command without starting byte and ending byte frame[3] = command; // frame[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback frame[5] = (int8_t)(dat >> 8); // data high byte frame[6] = (int8_t)(dat); // data low byte frame[7] = 0xef; // ending byte for (uint8_t i = 0; i < 8; i++) { mp3.write(frame[i]); } }

Snelle Stappen

  • Volg de instructies onder Hoe Het Werkt
  • Kopieer bovenstaande code en open deze met de Arduino IDE
  • Klik op de Upload knop in de Arduino IDE om de code naar de Arduino Nano te uploaden
  • Geniet van de muziek

Arduino Nano Code - Muziek Afspelen met bedieningsknoppen

De onderstaande code is een upgrade van de vorige code. Er zijn vier knoppen toegevoegd waarmee u kunt interacteren met de MP3-speler.

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-mp3-player */ #include <SoftwareSerial.h> #include <ezButton.h> #define CMD_PLAY_NEXT 0x01 #define CMD_PLAY_PREV 0x02 #define CMD_PLAY_W_INDEX 0x03 #define CMD_SET_VOLUME 0x06 #define CMD_SEL_DEV 0x09 #define CMD_PLAY_W_VOL 0x22 #define CMD_PLAY 0x0D #define CMD_PAUSE 0x0E #define CMD_SINGLE_CYCLE 0x19 #define DEV_TF 0x02 #define SINGLE_CYCLE_ON 0x00 #define SINGLE_CYCLE_OFF 0x01 #define ARDUINO_RX 8 // Arduino Nano Pin connected to the TX of the Serial MP3 Player module #define ARDUINO_TX 7 // Arduino Nano Pin connected to the RX of the Serial MP3 Player module SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); ezButton button_play(2); // create ezButton object for pin 2 ezButton button_pause(3); // create ezButton object for pin 3 ezButton button_next(4); // create ezButton object for pin 4 ezButton button_prev(5); // create ezButton object for pin 5 void setup() { Serial.begin(9600); mp3.begin(9600); delay(500); // wait chip initialization is complete mp3_command(CMD_SEL_DEV, DEV_TF); // select the TF card delay(200); // wait for 200ms button_play.setDebounceTime(50); // set debounce time to 50 milliseconds button_pause.setDebounceTime(50); // set debounce time to 50 milliseconds button_next.setDebounceTime(50); // set debounce time to 50 milliseconds button_prev.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button_play.loop(); // MUST call the loop() function first button_pause.loop(); // MUST call the loop() function first button_next.loop(); // MUST call the loop() function first button_prev.loop(); // MUST call the loop() function first if (button_play.isPressed()) { Serial.println("Play mp3"); mp3_command(CMD_PLAY, 0x0000); } if (button_pause.isPressed()) { Serial.println("Pause mp3"); mp3_command(CMD_PAUSE, 0x0000); } if (button_next.isPressed()) { Serial.println("Play next mp3"); mp3_command(CMD_PLAY_NEXT, 0x0000); } if (button_prev.isPressed()) { Serial.println("Play previous mp3"); mp3_command(CMD_PLAY_PREV, 0x0000); } } void mp3_command(int8_t command, int16_t dat) { int8_t frame[8] = { 0 }; frame[0] = 0x7e; // starting byte frame[1] = 0xff; // version frame[2] = 0x06; // The number of bytes of the command without starting byte and ending byte frame[3] = command; // frame[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback frame[5] = (int8_t)(dat >> 8); // data high byte frame[6] = (int8_t)(dat); // data low byte frame[7] = 0xef; // ending byte for (uint8_t i = 0; i < 8; i++) { mp3.write(frame[i]); } }

Het aansluitdiagram voor bovenstaande code:

Arduino Nano MP3-speler speaker Aansluitschema

This image is created using Fritzing. Click to enlarge image

U kunt het project nu uitbreiden met extra functies, bijvoorbeeld:

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en stappen om het eenvoudig te volgen.

Functiereferenties

Gerelateerde Tutorials

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!