Build your own MP3 player like the Toniebox

FunduinoLast updated on

Eine Audiobox bauen, die per RFID-Karte Hörspiele und Musik startet

Audioboxen für Kinder funktionieren alle nach demselben Prinzip: Eine Figur oder Karte wird aufgelegt, und das passende Hörspiel startet von allein. Gesteuert wird nur über wenige große Tasten, damit schon kleine Kinder das Gerät allein bedienen können.

Genau das baust du in diesem Projekt selbst nach. Ein RFID-Modul erkennt, welche Karte aufgelegt wird, ein MP3-Modul spielt die dazu passende Datei von einer SD-Karte ab, und drei Taster regeln Lautstärke und Pause. Am Ende kannst du die Elektronik in ein selbst gedrucktes Gehäuse einbauen.

Steckplatine mit Arduino, DFPlayer Mini, RFID-Modul RC522 und drei Tastern
Verkabelung von MP3-Modul, RFID-Modul und Tastern am Arduino

Material

Für dieses Projekt brauchst du:

  • 1× Arduino-Mikrocontroller mit passendem USB-Kabel
  • 1× Mini-Breadboard
  • 1× MP3-Modul MP3-TF-16P (DFPlayer Mini)
  • 1× microSD-Karte mit deinen MP3-Dateien
  • 1× Lautsprecher (8 Ohm, 0,5–3 Watt)
  • 1× RFID-Set RC522 mit Karte und Schlüsselanhänger
  • 3× Taster
  • 4× Widerstand 1000 Ohm (1 kOhm)
  • Diverse Breadboardkabel

Optional: ein 3D-gedrucktes Gehäuse, damit aus der Schaltung eine fertige Box wird.

Aufbau und Verkabelung

Stecke das MP3-Modul und das RFID-Modul auf das Breadboard und verkabele alles nach der Abbildung. Die Übersicht zeigt, welcher Pin am Arduino zu welchem Anschluss gehört:

  • Pin 3 = Taster Lautstärke lauter
  • Pin 4 = Taster Pause
  • Pin 5 = Taster Lautstärke leiser
  • Pin 6 = DFPlayer Pin 3 (TX)
  • Pin 7 = DFPlayer Pin 2 (RX)
  • Pin 9 = RFID-Modul RST
  • Pin 10 = RFID-Modul SDA (SS)
  • Pin 11 = RFID-Modul MOSI
  • Pin 12 = RFID-Modul MISO
  • Pin 13 = RFID-Modul SCK
  • 5V = DFPlayer Pin 1 (VCC) und Versorgung der Taster
  • 3,3V = RFID-Modul 3.3V
  • GND = DFPlayer Pin 7, Taster und RFID-Modul
  • Lautsprecher = DFPlayer Pin 6 (SPK_1) und Pin 8 (SPK_2)

Die drei Taster schaltest du gegen 5V und ziehst sie mit je einem 1-kOhm-Widerstand auf GND. So liegt an dem Eingang ein sauberes LOW an, solange der Taster nicht gedrückt ist. Den vierten 1-kOhm-Widerstand setzt du in die Leitung von Arduino-Pin 7 zum RX-Eingang des DFPlayers – er schützt das Modul vor dem 5-Volt-Signal des Arduino und verringert das Rauschen.

Steckplatine mit Arduino, DFPlayer Mini, RFID-Modul RC522 und drei Tastern
Verkabelung von MP3-Modul, RFID-Modul und Tastern am Arduino

SD-Karte vorbereiten

Die microSD-Karte muss im Format FAT16 oder FAT32 formatiert sein. Unter Windows genügt ein Rechtsklick auf den Wechseldatenträger und die Auswahl „Formatieren…“; unter „Dateisystem“ wählst du „FAT32“ aus.

Kopiere deine MP3-Dateien anschließend auf die Karte und benenne sie durchnummeriert: 0001.mp3, 0002.mp3 und so weiter. Der DFPlayer spricht die Dateien später über diese Nummer an. Maximal 255 Dateien sind möglich, die letzte heißt also 0255.mp3.

Formatieren löscht alle Daten auf der Karte. Sichere vorher, was du behalten möchtest.

Bibliotheken installieren

Für das Projekt brauchst du zwei Bibliotheken. Öffne in der Arduino IDE den Bibliotheksverwalter über Sketch → Bibliothek einbinden → Bibliotheken verwalten oder über das Symbol in der linken Leiste.

  • Suche nach DFRobotDFPlayerMini und installiere die Bibliothek von DFRobot.
  • Suche nach MFRC522 und installiere die Bibliothek für das RFID-Modul.

Die Bibliothek SoftwareSerial und die SPI-Bibliothek sind in der Arduino IDE bereits enthalten und müssen nicht nachinstalliert werden.

Quellcode

Lade den Sketch auf den Mikrocontroller und öffne danach den Seriellen Monitor mit einer Baudrate von 115200. Sobald du einen RFID-TAG an das Modul hältst, erscheint dort seine Kartennummer.

Sketch: MP3-Box mit RFID-Steuerung
//Bibliothek, um mit dem DFPlayer arbeiten zu koennen.
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
//Bibliotheken, um mit dem RFID-Modul arbeiten zu koennen.
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);
SoftwareSerial mySoftwareSerial(6, 7); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

//Ordnet den Tastern jeweils einen Pin zu.
int TasteVolumeUP = 3;
int TasteVolumeDOWN = 5;
int Pause = 4;

//Speichert, ob ein Taster gedrueckt ist oder nicht.
int STATUSup = 0;
int STATUSdown = 0;
int STATUSpause = 0;

int Volume = 15;  //Speichert die eingestellte Lautstaerke
int iPause = 0;   //Besagt, ob die Wiedergabe pausiert ist oder nicht.

void setup()
{
  SPI.begin();
  mfrc522.PCD_Init();
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  pinMode(TasteVolumeUP, INPUT);
  pinMode(TasteVolumeDOWN, INPUT);
  pinMode(Pause, INPUT);
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //SoftwareSerial fuer die Kommunikation mit dem MP3-Modul
    Serial.println(F("Fehler:"));
    Serial.println(F("1.Verbindung zum MP3 Modul herstellen!"));
    Serial.println(F("2.Speicherkarte einlegen!"));
    while (true);
  }
  myDFPlayer.volume(Volume);  //Lautstaerke zwischen 0 und 30 einstellen. Als Startwert haben wir der Variablen den Wert 15 zugeordnet.
}

void loop()
{
  STATUSup = digitalRead(TasteVolumeUP);
  STATUSdown = digitalRead(TasteVolumeDOWN);
  STATUSpause = digitalRead(Pause);

  // Nun wird geprueft, was passieren soll, wenn die Pausetaste gedrueckt wird. Wenn das Geraet abspielt, soll es pausieren. Wenn es sich bereits in der Pause befindet, soll die Pause aufgehoben werden.
  if (STATUSpause == HIGH)
  {
    if (iPause == 0)
    {
      myDFPlayer.pause();
      delay(500);
      iPause = 1;
    }
    else if (iPause == 1)
    {
      myDFPlayer.start();
      delay(500);
      iPause = 0;
    }
  }

  if (STATUSup == HIGH && Volume < 30) // Wenn Lautstaerke+ gedrueckt wird und die maximale Lautstaerke (Wert 30) noch nicht erreicht ist, dann soll die Lautstaerke angehoben werden.
  {
    Volume = Volume + 5;
    myDFPlayer.volume(Volume);
    Serial.println(Volume);
    delay(500);
  }

  if (STATUSdown == HIGH && Volume > 0)  // Wenn Lautstaerke- gedrueckt wird und die minimale Lautstaerke (Wert 0) noch nicht erreicht ist, dann soll die Lautstaerke gesenkt werden.
  {
    Volume = Volume - 5;
    myDFPlayer.volume(Volume);
    Serial.println(Volume);
    delay(500);
  }

  // Hier wird der RFID-TAG ausgelesen
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }

  long code = 0;
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    code = ((code + mfrc522.uid.uidByte[i]) * 10);
  }

  // Die Kartennummer soll am Seriellen Monitor angezeigt werden.
  Serial.print("Die Kartennummer lautet: ");
  Serial.println(code);

  // ACHTUNG! Nur in unserem Fall lautet der Code des ersten RFID-TAG 446250. Den Code des eigenen RFID-TAG muss man zunaechst selbst ermitteln, indem man diesen Sketch hochlaedt und die Nummer am Seriellen Monitor abliest.
  if (code == 446250) //Wenn der Code 446250 lautet, dann spiele die MP3-Datei mit dem Namen 0002.mp3
  {
    iPause = 0;
    myDFPlayer.play(2); // An dieser Stelle wird die mp3-Datei "0002.mp3" aufgerufen
    delay(600);
  }

  if (code == 1427270) //Wenn der Code 1427270 lautet, dann spiele die MP3-Datei mit dem Namen 0001.mp3
  {
    iPause = 0;
    myDFPlayer.play(1); //An dieser Stelle wird die mp3-Datei "0001.mp3" aufgerufen
    delay(600);
  }
}

RFID-TAG einer MP3-Datei zuordnen

Jetzt legst du fest, welcher RFID-TAG welche MP3-Datei startet. Halte den TAG an das Modul und lies seine Nummer im Seriellen Monitor ab.

Beispiel: Ein neuer TAG wird mit der Nummer 123456 erkannt und soll die Datei 0012.mp3 abspielen. Dann änderst du den entsprechenden Block im Sketch so ab, dass sowohl die Kartennummer als auch die Dateinummer passen.

Für jeden weiteren TAG kopierst du einen solchen Block und trägst dessen Nummer und Dateinummer ein.

Die Kartennummern im Sketch sind Beispielwerte aus unserem Aufbau. Deine TAGs haben andere Nummern – ohne das Anpassen dieser Zahlen passiert beim Auflegen nichts.

Bisher im Sketch
if (code == 446250)
{
  iPause = 0;
  myDFPlayer.play(2); // An dieser Stelle wird die mp3-Datei "0002.mp3" aufgerufen
  delay(600);
}
Angepasst fuer den neuen RFID-TAG
if (code == 123456)
{
  iPause = 0;
  myDFPlayer.play(12); // An dieser Stelle wird die mp3-Datei "0012.mp3" aufgerufen
  delay(600);
}

Gehäuse

Zum Schluss kannst du die Elektronik in ein Gehäuse einbauen. Hier sind der Kreativität keine Grenzen gesetzt. Unser Beispielgehäuse haben wir mit Tinkercad entworfen; es eignet sich gut als Grundlage für eigene Ideen.

Zum 3D-Modell auf Thingiverse

Rate the instructions

Comments

Ask a question or share an experience

Contact us if something doesn’t work. Please include your board and the error message.

We review every comment before publication. Your email address remains with us.