SimpleRFIDPlayer

Das folgende „Projekt“ ist ein simpler MP3 Player für meine Tochter.
Meine Tochter ist momentan 2 Jahre alt. Um ihr einen einfachen Zugang zu Musik und Hörspielen zu geben, habe ich mir Folgendes überlegt:
Eine Box mit MP3 Player und RFID-Lesegerät über die man ein RFID-Tag ziehen kann um ein Musikstück zu spielen. Die RFID Tags können dabei bedruckte Karten oder Tags (Anhänger) sein. Die Tags lassen sich recht gut an Kuscheltiere etc.pp. befestigen. Für meine Tochter ist es also ein drüberziehen eines Kuscheltieres um Musik abzuspielen.
Die Programmierung sollte ebenso simpel sein. Das Gerät spielt Songs ab, welche auf einer MicroSD Karte abgelegt sind und von 001 – xyz benannt sind. Der erste Tag der über das Gerät gezogen wird, wird mit Song Nummer 001 verknüpft. Der zweite mit 002 und so weiter.

Was braucht man nun alles dafür?
– Einen Arduino Nano ( https://www.amazon.de/AZDelivery-ATmega328-Nano-Arduino-kompatibel/dp/B01LWSJBTD/ref=sr_1_12?s=computers&ie=UTF8&qid=1483873173&sr=1-12&keywords=arduino+nano ~6,50€ – Allerdings bekommt man diese auch im 5er-Pack für 2-3 € pro Stück)
– Einen RFID Reader ( https://www.amazon.de/SainSmart-Mifare-Module-KeyCard-Arduino/dp/B00G6FK4DQ ~ 8 € )
– RFID Karten oder Tags die zum Reader passen (z.B. https://www.amazon.de/gp/product/B01B4IVFDC ~5-10€)
– Einfachheitshalber einen seriellen MP3 Player mit Lautsprecher ( http://www.dx.com/de/p/uart-serial-mp3-music-player-module-w-1w-speaker-for-arduino-440175?tc=EUR&gclid=Cj0KEQiAwMLDBRDCh_r9sMvQ_88BEiQA6zuAQ–Ju2knBxRtJFsf4GRPiYzclcq2IA_GW3WSeJrTggcaAj048P8HAQ#.WHIP78Lbs2w ~ 6€ )
– 2 Drucktaster ( http://www.ebay.de/itm/152295745935?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT ~ je 2 €) zur Lautstärkeregelung
– Wippenschalter als Ein-/Ausschalter ( http://www.ebay.de/itm/151023222553?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT ~ 1,60€)
– Batterieclip für 9V Block und 9V Akku zur Stromversorgung ~ 6€
– Ein paar Drähte zum Verlöten, Lötzinn, evtl. Krimpzange, Lötkolben etc.pp.
– Und natürlich ein passendes Gehäuse ( bei uns ein Dekokästchen vom Baumarkt + Abstandshalter + etwas Sperrholz und Farbe )
– Micro SD passender Größe (hier eine alte 2GB)
– Wenn man das ganze sauberer aufbauen will, noch eine Lochrasterplatine.
Wie wird das ganze nun zusammengebaut?
Der Batterieclip kommt mit + an den Wippenschalter, von dort führt ein Kabel zu Vin des Arduino. Minus kommt zu GND ( an GND landen noch mehrere Kabel, daher erst am Schluss verlöten).
Für RFID werden folgende Kabel gezogen:
RFID Arduino Nano
MOSI D11
MISO D12
SCK D13
SS D10
RST D9
3.3v 3.3v
GND GND

Zwischen dem MP3 Player und dem Arduino wird wie folgt verkabelt:
MP3 Arduino nano
VCC 5V
GND GND
Tx D5
Rx D6
Der Lautsprecher kann einfach auf das MP3 Board gesteckt werden.

Die beiden Buttons werden wie folgt verkabelt:
Button Arduino Nano
+-Button <–> D7
+-Button GND
–Button D8
–Button GND

Auf den Arduino wird der passende Sketch gespielt. Und alles in ein passendes Gehäuse verfrachtet. Ich habe in eine Spannplatte Öffnungen für die Wippenschalter und die Buttons geschnitten, auf der Rückseite den RFID-Leser verschraubt und mit Leisten den Lautsprecher angebracht. Diese halten auch die Batterie. Der Nano wurde von mir mit Heißkleber verklebt, da mein Gehäuse etwas zu enge war und er dann nur noch seitlich liegend neben dem MP3-Player Platz fand.

Link zum Projekt:

https://bitbucket.org/wosch/simplerfidplayer/src

17 Kommentare

  1. Hallo,

    könntest Du noch ein bisschen mehr Infos zu dem tollen Projekt spendieren?
    Wie/wo müssen die mp3 gespeichert werden ?
    Wie erfolgt die Zuordnung von mp3 (evtl. auch m3u) zu RFID Tag ?
    Danke

    1. Hallo,
      Die MP3s einfach ins Hauptverzeichnis der SD Karte mit Benennung 01 – nn.

      Die Zuordnung erfolgt automatisch. Der erste Tag der angehalten wird, wird mit dem Lied 01 verknüpft und die Verknüpfung im EEProm des arduino gespeichert. Der nächst RFID Tag wird mit 02 verknüpft und so weiter.
      Wenn der arduino einen Tag mit Verknüpfung findet, wird der entsprechende Titel abgespielt.

      Da der eigentlich ständig wenn ein Tag angelegt wird den erkennt, wird das ganze permanent ausgelöst und beim Wegnehmen des Tags der entsprechende Titel abgespielt.

      Der “Treiber” für den RFID Reader mit Beispielen ist beim verlinkten Artikel. Bei dem MP3 Chip sind ebenso Demodateien.

      Gruß
      Wolfgang

  2. ok, ich bin ein Arduino-Neuling, und es sind noch nicht alle Teile da, sodass ich nicht einfach anfangen kann….
    Ich habe es noch nicht ganz verstanden glaube ich:

    1. die Mp3 heissen 01.mp3; 02.mp3; usw….?
    1.1 ein Tag ist immer einem mp3 zugeordnet (keiner Playlist) ?

    2. Über die Buttons steuerst Du die Lautstärke. Gibt es auch die Möglichkeit die Wiedergabe zu stoppen ?
    2.2 Buttons für nächstes Lied oder Lied zurück sind vermutlich vorgesehen, da keine Playlisten abgespielt werden (siehe 1.1) ?
    2.2.1 Was passiert wenn ein Lied zu Ende ist ? Einfach Ruhe im Karton, oder fängt der Palyer dann wieder von vorne mit dem Lied an ?

    Vielen Dank!

  3. Hallo Wolfgang,
    Endlich habe ich die Zeit gefunden anzufangen.
    Leider laufe ich direkt beim hochladen des sketches in eine Fehlermeldung.
    Scheinbar kann ein “include RFID.h” nicht durchgeführt werden, da die Datei nicht gefunden wird.
    In deinem bitbucket Source ist sie auch nicht.
    Kannst du nochmal weiterhelfen?

    1. Hallo,
      RFID.h gehört zu dem jeweiligen RFID Player.
      Bei dem von https://www.amazon.de/SainSmart-Mifare-Module-KeyCard-Arduino/dp/B00G6FK4DQ ist z.B.
      https://s3.amazonaws.com/www.dasgute.com/20/20-011-951+/RC522+20-011-951.rar angegeben, da ist dann die passende RFID.h und RFID.c drin ( je nachdem ob man Atom mit PlattformIO oder die Arduino Oberfläche oder Visual Studio mit VisualArduino/VisualGDB verwendet muss es an die passende Stelle verschoben werden).
      Das wird dann grundsätzlich für den RFID Reader benötigt.

      1. Hallo Wolfgang!
        Danke für Deine Tipps – aber irgendwie kriege ich das nicht hin.
        Diese Arduino IDE bricht immer mit Fehlermeldunng – scheinbar weil er die RFID-h nicht finden kann. Ich habe die inzwischen im gleichen Verzeichnis wie deinen Sketch liegen – nix.

        d:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware d:\Program Files (x86)\Arduino\hardware -tools d:\Program Files (x86)\Arduino\tools-builder -tools d:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries d:\Program Files (x86)\Arduino\libraries -libraries D:\eigene Dateien\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10805 -build-path C:\Users\Cyrus\AppData\Local\Temp\arduino_build_211451 -warnings=none -build-cache C:\Users\Cyrus\AppData\Local\Temp\arduino_cache_417340 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=d:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=d:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=d:\Program Files (x86)\Arduino\hardware\tools\avr -verbose D:\Downloads\SimpleRFIDPlayer\SimpleRFIDPlayer.ino
        d:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware d:\Program Files (x86)\Arduino\hardware -tools d:\Program Files (x86)\Arduino\tools-builder -tools d:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries d:\Program Files (x86)\Arduino\libraries -libraries D:\eigene Dateien\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10805 -build-path C:\Users\Cyrus\AppData\Local\Temp\arduino_build_211451 -warnings=none -build-cache C:\Users\Cyrus\AppData\Local\Temp\arduino_cache_417340 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=d:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=d:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=d:\Program Files (x86)\Arduino\hardware\tools\avr -verbose D:\Downloads\SimpleRFIDPlayer\SimpleRFIDPlayer.ino
        Using board ‘nano’ from platform in folder: d:\Program Files (x86)\Arduino\hardware\arduino\avr
        Using core ‘arduino’ from platform in folder: d:\Program Files (x86)\Arduino\hardware\arduino\avr
        Detecting libraries used…
        “d:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-Id:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino” “-Id:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs” “C:\Users\Cyrus\AppData\Local\Temp\arduino_build_211451\sketch\SimpleRFIDPlayer.ino.cpp” -o “nul”
        “d:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-Id:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino” “-Id:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs” “-Id:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI\src” “C:\Users\Cyrus\AppData\Local\Temp\arduino_build_211451\sketch\SimpleRFIDPlayer.ino.cpp” -o “nul”
        “d:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-Id:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino” “-Id:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs” “-Id:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI\src” “C:\Users\Cyrus\AppData\Local\Temp\arduino_build_211451\sketch\SimpleRFIDPlayer.ino.cpp” -o “C:\Users\Cyrus\AppData\Local\Temp\arduino_build_211451\preproc\ctags_target_for_gcc_minus_e.cpp”
        D:\Downloads\SimpleRFIDPlayer\SimpleRFIDPlayer.ino:25:18: fatal error: RFID.h: No such file or directory

        #include

        ^

        compilation terminated.

        Bibliothek SPI in Version 1.0 im Ordner: d:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI wird verwendet
        exit status 1
        Fehler beim Kompilieren für das Board Arduino Nano.

  4. ok, habe alles zum laufen gebracht!
    ich bin mal durch deinen Sketch gegangen und verstehe ein paar dinge nicht.
    Es sieht so aus, als ob buttons für play/pause, next, previous vorgeseshen (Void InputFrom Pc)?
    Wie steuer ich die an (per externen push buttons z.B.) ?
    Gibt es dann im nächsten Schritt irgendwie die Möglichkeit Playlisten (m3u) statt einzelnen Files zu verknüpfen (dann macht previous und next auch Sinn)?

    Danke

    1. Moin Xaver, ich bastel auch gerade an dem Player/Code.

      den Pause/Play Momentary push Button hab ich nach langem Rätseln hinbekommen:

      Verdrahtung vom Button: Einen Pin an GND, den anderen an einen beliebigen digitalen Pin

      ####dies alles an den Anfang vom Code:

      int PlaybuttonPin = 40; // momentary push button on pin 40 or any other
      int PlayoldButtonVal = 0;
      int PlayFunctions = 2;
      int PlayStatus = 1;

      ####dies ins void setup:

      // initialize the PlayBUTTON pin as an input

      pinMode(PlaybuttonPin, INPUT);
      digitalWrite(PlaybuttonPin, HIGH); // button pin is HIGH, so it drops to 0 if pressed

      ####dies ins void loop:

      // PLAY PAUSE FUNKTION

      int PlaybuttonVal = digitalRead(PlaybuttonPin);
      if (PlaybuttonVal == LOW && PlayoldButtonVal == HIGH) {// button has just been pressed
      PlayStatus = PlayStatus + 1;
      }
      if (PlayStatus > PlayFunctions) PlayStatus = 1;
      PlayoldButtonVal = PlaybuttonVal;

      switch(PlayStatus) {

      case 1:
      sendCommand(CMD_PLAY);
      break;
      case 2:sendCommand(CMD_PAUSE);
      break;
      }

      // das sollte es gewesen sein…

      hoffe das es bei dir klappt.

    2. Sorry für die späte Antwort,
      >Es sieht so aus, als ob buttons für play/pause, next, previous vorgeseshen (Void InputFrom Pc)?
      Naja, ich habe die Funktionen die der Player bietet vom PC aus ausprobiert und da als serielle Kommandos abgesetzt.
      > Es sieht so aus, als ob buttons für play/pause, next, previous vorgeseshen (Void InputFrom Pc)?
      Kann der Player nicht – der ist sehr simpel. Next und previous ist da, da der einfach alle Dateien die drauf sind in einer Reihenfolge sieht.

  5. Hallo Wolfgang,
    das Projekt ist super und ich habs sofort nachgebaut. Funktioniert toll, nur bekomm ich nicht hin dass die Lautstärke mit einem bestimmten Wert beim Einschalten startet.
    Ich muss immer erst eine Lautstärketaste drücken um auf den gespeicherten Wert zu kommen. Die Wiedergabe startet immer mit Maximum. Kenn mich nicht mit programmieren aus, hab zwar den Wert “15” bei setVolume gefunden hab aber keine Ahnung warum der nach einem Neustart nicht sofort verwendet wird.
    Vielleicht könntest du mir einen Tipp geben.

    Vielen Dank für die tolle Arbeit

    mfG

    Gerhard

  6. Hallo

    Ich spiele gerade etwas mit dem Teil herum .
    Gibt es eine Liste der Meldungen und Quittungen , die das MP3-Modul bei Empfang von Befehlen usw. sendet .
    Kann dazu nichts finden , mein chinesisch reicht auch nicht aus .

    Gruss Willmar

  7. Moin Wolfgang,

    Erstmal ein dickes Lob an deine Idee und die Umsetzung. Ich habe dein Projekt einmal nachgebaut und auf einen Arduino MEGA umgesteckt, steuere die Lautstärke nun über einen Encoder und habe auch einen Play/Pause Button hinbekommen. Ein zusätzliches 20×4 Display zeigt mir aktuell nur die Zeit an, aber soll irgendwann auch Tracknummer und Lautstärkepegel darstellen. ID Tag wird glaube ich mit dem mp3 Modul nicht klappen =/

    Das Anlernen der RFID Karten ist genial einfach und funktioniert super! Nur die Funktionen um das EEProm auszulesen klappen bei mir nicht. Ich würde gern die Anzahl der gemerkten Songs auslesen bzw auch deren Zuordnung. Die Funktionen dazu mit ListEEProm() etc sind ja gegeben, aber liefern über den seriellen Monitor keine Ergebnisse.

    Hast du vielleicht einen Tipp?

    Danke und viele Grüße aus Hamburg

  8. Wie ist ist die Spannungsversorgung gemacht? Der Arduino braucht 3.3V, der RFIC-Reader auch (NICHT 5V-tolerant), der MP3-Player aber 3.7-5.25V.
    Im Text steht nur was von einem 9V-Batterieclip. Das passt irgendwie nicht zusammen.

    1. Etwas spät:
      Der Arduino Nano startet mit 3.3V nicht. Der ATMega328 ist 5V Technik.
      Am Nano ist ein mit VIN bezeichneter Eingang. An diesen werden 7-12V angelegt.
      Der hat nun auch Spannungswandler etc.pp. und verschiedene Ausgänge die mit Spannung versorgt werden.
      3.3v und 5V werden getrennt geliefert. (PIN-Beschriftung 3V3 und 5V).

      Der Player arbeitet mit 3,7-5,25V -> genau passend zur Ausgabe vom Arduino,
      Der RFID hat mit der Versorgungsspannung von 3v3 auch kein Problem. Die Stelle an der es ein Problem geben könnte, sind die Datenleitungen.
      Ich habe da tatsächlich zuerst überlegt einen Pegelwandler dazwischen zu setzen.
      Nur das lustige ist: Wenn man die originalen Quellen von Sainsmart (die RAR Datei die sei bei amazon auch hinterlegt haben) ansieht, verbinden die einen UNO direkt mit dem Chip. Der UNO liefert auch 5V auf den digitalen Ausgängen. An der Stelle habe ich daher etwas unsauber gespart.

Schreibe einen Kommentar zu Wolfgang Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.