MP3 Spieler wie TonieBox

In diesem Projekt möchten wir selber ein MP3-Abspielgerät bauen, welches den Funktionen einer Toeniebox ähnelt. Es gibt dazu bereits einige Projekte im Internet, die zum Beispiel Toniduino, TonUINO, Tonuino usw. In unserem Beispiel beschreiben wir die vollständige Verkabelung, die Programmierung und geben ein Beispiel für ein 3D-Druck Gehäuse dazu. Die entsprechende STL-Datei stellen wir ebenfalls zum Download bereit.

Die Toniebox ist ein kinderfreundliches Audio-Wiedergabegerät, das entwickelt wurde, um Kindern eine interaktive und unterhaltsame Möglichkeit zu bieten, Hörbücher und Musik zu hören. Die Toniebox ist ein buntes, weiches Wiedergabegerät, das speziell für Kinder entwickelt wurde. Sie hat eine kindergerechte Oberfläche, die auch von jüngeren Kindern leicht bedient werden kann. Die Toniebox spielt spezielle Figuren namens „Tonies“ ab. Jeder Tonie repräsentiert ein bestimmtes Hörbuch, eine Geschichte oder ein Musikalbum. Die Tonies sind in verschiedenen Charakteren und Themen erhältlich und sind mit üblichen Inhalten verfügbar, die auch als MP3 oder auf CD zu erwerben sind. Wenn ein Tonie auf die Toniebox gestellt wird, beginnt die Wiedergabe automatisch. Die Kinder können die Wiedergabe starten, anhalten, vor- oder zurückspulen, indem sie den Tonie drehen oder klopfen. Durch das drücken auf den in den Ohren befindlichen Tastern kann die Lautstärke reguliert werden. 

Aufgabe

1) Unsere Box soll verschiedene MP3 Dateien abspielen. Je nachdem, welcher RFID-TAG oben auf unsere Box gehalten oder abgelegt wird, soll eine zugeordnete MP3-Datei abgespielt werden. 

2) Über zwei Knöpfe soll die Lautstärke eingestellt werden können.

3) Über einen weiteren Knopf soll das Abspielen der aktuellen MP3-Datei pausiert werden.

Material

    • Arduino Microcontroller

    • Mini Breadboard

    • Lautsprecher

    • RFID-KIT

    • MP3-TF-16P (DFPlayer mini)

    • SD Karte

    • Taster 3x

    • Diverse Breadboardkabel

    • Widerstände 4x 1000 Ohm

Aufbau

Pinbelegung Übersicht

    • Pin 3 = Taster VolumeUP

    • Pin 4 = Taster Pause

    • Pin 5 = Taster VolumeDOWN

    • Pin 6 = DFPlayer Pin 3

    • Pin 7 = DFPlayer Pin 2

    • Pin 9 = RFID Sensor Pin RST

    • Pin 10 = RFID Sensor Pin SOA

    • Pin 11 = RFID Sensor Pin MOSI                                                                                                                                                           

    • Pin 12 = RFID Sensor Pin SQI

    • Pin 13 = RFID Sensor Pin SCK

    • Ground 1 = DFPlayer Pin 7

    • Ground 2 = Taster Ground

    • Ground 3 = RFID Sensor Ground

    • 3.3v = RFID Sensor 3v

    • 5v = Taster 5v 

Vorbereitung des MP3-Players DFPlayer Mini

Die SD-Karte muss das FAT16 oder das FAT32 Format haben. Die Formatierung der Speicherkarte ist leicht. Durch einen Rechtsklick auf den entsprechenden Wechseldatenträger im Windows Betriebssystem  kann „Formatieren…“ ausgewählt werden. In dem Menü wird unter „Dateisystem“ „Fat32“ ausgewählt.

Das MP3-Modul wird auf ein Breadboard gesteckt, um übersichtlich damit arbeiten zu können. Bei Platzmangel, kann das Modul mithilfe einzelner Kabel am Arduino Mikrocontroller angeschlossen werden. Die MP3-Dateien auf der microSD Karte nennen wir 0001.MP3, 0002.MP3 etc. Man kann dabei maximal 255 MP3-Dateien speichern, wobei die letzte Datei den Namen 0255.MP3 trägt.

Quellcode

 

//Ruft eine Library auf um mit dem DFPlayer arbeiten zu können.
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

//Ruft eine Library auf um mit dem RFID-KIT arbeiten zu können.
#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;

//Teilt den Namen der Taster jeweils eine Zahl/Pin zu.
int TasteVolumeUP = 3;
int TasteVolumeDOWN = 5;
int Pause = 4;

//Speichert ob ein Taster ein- oder ausgeschaltet ist.
int STATUSup = 0;
int STATUSdown = 0;
int STATUSpause = 0;

int Volume = 15;  //Speichert die eingestellte Lautstärke
int iPause = 0;   //Besagt ob das Audio 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 für die Kommunikation mit mp3
    Serial.println(F("Fehler:"));
    Serial.println(F("1.Verbindung zum MP3 Modul herstellen!"));
    Serial.println(F("2.Speicherkarte einlegen!"));
    while (true);
  }
  myDFPlayer.volume(Volume);  //Lautstärke 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 geprüft, was passieren soll, wenn die Pausetaste gedrückt wird. Wenn das Gerät abspielt, soll es pausieren. Wenn es sich jedoch 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 Lautstärke+ gedrückt wird, und die maximale Lautstärke (Wert 30) noch nicht erreicht ist, dann soll die Lautstärke angehoben werden.
  {
    Volume = Volume + 5;
    myDFPlayer.volume(Volume);
    Serial.println(Volume);
    delay(500);
  }

  if (STATUSdown == HIGH && Volume > 0)  // Wenn Lautstärke- gedrückt wird, und die minimale Lautstärke (Wert 0) noch nicht erreicht ist, dann soll die Lautstärke 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 zunächst selbst ermittelt werden, ion dem man diesen Code hochläd und den Code des RFID-TAGS 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);
  }

}

Zuordnung von RFID-TAG und MP3-Datei

Nachdem wir auf der Speicherkarte einige Dateien abgespeichert haben, müssen wir nun die Zuordnung vornehmen mit der Fragestellung „Welche MP3-Datei soll bei welchem RFID-TAG abgespielt werden?“ Der oben dargestellte Quellcode lässt unsere Box nicht nur funktionieren, sondern er sendet auch die individuelle Kartennummer des RFID-TAGs an den Seriellen Monitor in der Arduino Software. 

Beispiel:

Ein neuer RFID-TAG wird mit der Nummer „123456“ erkannt und soll die MP3-Datei 0012.MP3 abspielen. Dann ändern wir den folgenden Code um.

Alt:

 

 

if (code == 446250)
  {
    iPause = 0;
    myDFPlayer.play(2); // An dieser Stelle wird die mp3-Datei "0002.mp3" aufgerufen
    delay(600);
  }

Neu:

 if (code == 123456)
  {
    iPause = 0;
    myDFPlayer.play(12); // An dieser Stelle wird die mp3-Datei "0012.mp3" aufgerufen
    delay(600);
  }

Gehäuse

Im Anschluss kann man die Elektronik in ein passendes Gehäuse einbauen. Hier sind der Kreativität keine Grenzen gesetzt. In unserem Beispiel haben wir mit Tinkercad ein einfaches Gehäuse gestaltet. Dies kann als Grundlage für eigene Ideenen dienen. 

Hier der Link zu Thingiverse:

https://www.thingiverse.com/thing:6278619