Zum Inhalt springen

Musik-Player für Kinder / RFID-Jukebox

Was kann das ?

Das ganze ist eine frei verfügbare Lösung um einen Musik-Spieler für Kinder zu bauen. Es gibt dazu auch gute kommerzielle Produkte, die Tonybox zum Beispiel. Aber viele - so wie ich - bauen halt lieber selbst.

Die Box kann Musik / Hörspiele abspielen, Internet-Radio-Streams abspielen, Spotify (wenn man möchte), Dateien einfach per Drag-Drop aufspielen, Diverse RFID Tags einlesen, hat eine Benutzeroberfläche die per IP Adresse zu erreichen ist. Und was meiner Frau und mir gut gefallen hat: Onkels und Tanten können einfach eine MP3 Datei schicken in der sie eine Geschichte vorlesen oder Lieder singen. Und Papa und Mama können im Urlaub Radio Bob hören wenn die kleinen im Bett sind 😉

Übrigens: Man kann die über MQTT ansprechen, wer openHAB oder HomeAssistant zu Hause hat, kann die Box über sein Smart Home steuern.

Was braucht man ?

  • Raspberry Zero W
  • 2 Lautsprecher (z.B. Visaton Ø6cm)
  • Hifiberry MiniAmp
  • micro-SD Speicherkarte (z.B. 32GB)
  • RFID Transponder (EM4100)
  • USB-RFID Kartenleser (Neuftech)
  • Mini USB LiPo Akku Lademodul
  • On-Off Shim
  • Taster, LED´s, Wiedestände
  • Kabel
  • Li-Ion Akkus + Halterung
  • Holzleim
  • MDF Platten
  • Lautsprecherabdeckung

Wie geht das ?

Es ist sehr viel bastelei, dass direkt vorweg! Wenn man noch nie gelötet hat, würde ich mir gut überlegen damit anzufangen.

Die Software habe ich nicht selbst geschrieben sondern bei Github frei verfübar runtergeladen: Phoniebox: the RPi-Jukebox-RFID

Wer das nicht mit einem Raspberry machen möchte kann auch mal hier gucken, eine sehr sehr gute alternative! TonUINO

 

  • Raspberry Zero W'
    Das ist unser Computer, auf dem die Software läuft und der dafür verantwortlich ist das alles funktioniert
  • 2 Lautsprecher (z.B. Visaton Ø6cm)
    Hier kann man sich nach Lust und Laune etwas aussuchen, dass der MiniAmp befeuern kann...und natürlich was in seine Kiste passt. HIER NICHT AN 2€ SPAREN!!!
  • Hifiberry MiniAmp
    Die Soundkarte....ohne kommt nix raus.
  • micro-SD Speicherkarte (z.B. 32GB)
    Oder doch liebr 64GB ? Speicherplatz kost doch nix mehr....
  • RFID Transponder (EM4100)
    Passend zum Kartenleser, bitte drauf achten das es EM4100 sind, nach Bedarf Karten oder Anhänger kaufen
  • USB-RFID Kartenleser (Neuftech)
    Bitte den und keinen anderen...kostet 12€ mit 5 Transpondern...Kann man auch auseinander nehmen und nur die "Spule" irgendwo aufkleben
  • Mini USB LiPo Akku Lademodul
    Das Ding sorgt dafür, dass ihr später Akku oder USB Netzteil oder beides zusammen benutzen könnt. Ohne Aussetzer. Und es lädt den Akku. WICHTIG
  • On-Off Shim
    Das kleine Teil sorgt dafür, dass man mit einem Taster später die ganze Maschine ein oder ausschalten kann
  • Taster, LED´s
    So wie jeder mag
  • Kabel
    Nach Bedarf
  • Li-Ion Akkus + Halterung
    Hier gibts Diverse Möglichkeiten, 3,6V Zellen wären gut. Warum also keine 18650 ? Da gibts u.a. preiswerte Halterungen für. Und ihr seit flexibel in der Laufzeit ohne Netzteil 😉 In unserer Box sind 2x3A, und läuf und läuft läuft und läuft und läuft. Also 8 Stunden Radio Bob ohne Netzteil ist kein Problem.
  • Holzleim
  • MDF Platten
  • Lautsprecherabdeckung

Wie geht das ? - Gehäuse

Das mit der "Hardware" - egal ob Gehäuse oder die Elektronik - ist vermutlich der Part an dem am meisten zu tun ist.

Mit dem Gehäuse ist es recht einfach, da kann sich jeder frei entscheiden was er möchte und seiner kreativität freien lauf lassen. Wir haben uns dazu entschieden, eine Gehäuse aus MDF-Platten zu bauen um halbwegs anständigen Klang aus den kleinen Stereo Lautsprechern zu holen. Geplant habe ich das ganze mit einer CAD Software. Lautsprecher sitzen links und rechts, in der Mitte ist die Platine mit den Tastern. Die Abdeckung der Lautsprecher ist mangels "kann man kaufen" auch selbst gebaut bzw. machen lassen.

Wer mal bei der Suchmaschine seiner Wahl "Phoniebox" eintippt, findet dort sehr schnell sehr viel inspiration. Also einfach mal in Ruhe durchstöbern

 

 

Wie geht das ? - Elektronik

Es empfiehlt sicht, hier lieber einmal mehr nachzudenken, als einmal zu wenig. Die Software der Phoniebox kann ja viele verschiedene Dinge, die man evtl. gar nicht alle umsetzen möchte. Nicht jeder möchte alle Tasten, also auch hier in Ruhe überlegen. Wir haben uns entschieden, Tasten für Lauter, Leiser, Play (Pause), Vor, Zurück und natürlich An/Aus einzubauen.

RFID-Leser, On/Off Shim, Laderegler, Hifiberry und jede Menge Kabel.... sieht auf den ersten Blick sehr sehr wild aus, ist aber relativ einfach. Da es bei mir klein werden sollte, habe ich mir mit einem Flachbandkabel passend zur 40-poligen Steckerleiste geholfen. Das war sehr frickelig und nicht immer einfach! Einfacher geht es, wenn ihr im Gehäuse etwas mehr platzt last, dann könnt ihr einen Raspberry Pi GPIO Port Doubler benutzen und einfach den Shim und Hifiberry aufstecken, OHNE Löten zu müssen. Der Kartenleser wird über USB am Pi angeschlossen, also sehr einfach. Die Taster kann man dann am besten über ein Flachbandkabel anschließen. Dazu später mehr. Vielleicht noch ein Tipp. Wenn ihr sowas noch nie gemacht habt, könnt ihr für kleines Geld auch erst mal ein "Steckbrett" mit Steckbrücken und Kabeln bestellen und die Hardware aufbauen und testen. Gibts für unter 10€ und erspart für den ungeübten jede menge Ärger.

Also bleibt zum Löten nur noch:

  • Taster am On/Off Shim
  • USB-Kabel an Laderegler / Akkuhalter
  • Kabel an Lautsprecher
  • Taster / LED´s

 

ON / OFF SHIM

Im Prinzip nur das weiße und grüne Kabel. Also wenig. Die anderen Seiten kommen natürlich an einen entsprechenden Taster (momentary push button). Der USB-Port an der linken Bildseite wird später mit einem Kabel an den Laderegler verbunden.

Kommen wir zum Laderegler:

Auch das ist nicht wirklich wild. Hier muss 4 mal gelötet werden. An A und D kommt ein USB Kabel das entsprechend auf der anderen Seite in den On/Off Shim passt. D.h. man braucht ein passendes Kabel. Entweder kauft man ein fertiges Kabel (Stecker mit offenen Kabelenden) oder nimmt ein altes Kabel und schneidet eine Seite ab. Dann sucht man sich Plus und Minus raus und lötet die Kabel bei A und D an. An den Löt-Pads B und C wird die Akkuhalterung angeschlossen. + und - wird ja jeder wohl auseinander halten können 😉  Das wäre ws dann auch schon.

Vielleicht noch mal als Kurzhinweis. Dieses kleine Bauteil lädt später den Akku und versorgt entweder vom USB-Eingang oder vom Akku den Raspberry. Und zwar unterbrechungsfrei für den Fall das man den "Netzstecker" zieht. Den USB Port kann man dann später so im Gehäuse positionieren das man da von außen dran kommt. Warum gehe ich da so drauf ein? In vielen anderen Anleitungen wird nicht darauf eingegangen das das wichtig ist. Die meisten anderen Verwenden PowerBanks. Problematisch daran ist, dass man bei den meisten Modellen eine kurze unterbrechung hat, wenn man beim Laden den Stecker aus der Ladebuchse zieht. Sollte also der Musikspieler laufen, ihr laden und dann den Stecker ziehen, ist das Gerät aus. Blöd. Mit der kleinen Platine geht beides, also Netzbetrieb (inkl. laden) und Akkubetrieb. Und auch noch von Vorteil, ihr könnt die Akkuleistung frei wählen.

 

Mit dem HiFi Berry Miniamp ist es auch recht einfach. Wenn man den nicht gerade mit dem On/Off Shim zusammenlötet muss man hier nur die Lautsprecherkabel anschließen. An der Schraubleiste sind die äußeren beiden Pole + und die Inneren -. Die Lautsprecherkabel lötet man idealerweise am Lautsprecher an. Das wars schon.

Kommen wir zum komplexen Teil, den Tastern.

Wir brauchen dazu die Taster, die Wiederstände, vielleicht noch LED´s. Zunächst einmal muss man verstehen, dass ein Taster einen eindeutigen zustand haben muss. Und da ist wichtig, dass ein Computer etwas anderes unter eindeutig versteht, als ein Mensch. Daher muss man zuerst einen eindeutigen Zustand "definieren". Der Terminus Technikus ist "Pull-Up" oder "Pull-Down". Wir machen UP. Wie geht das ? Das ist relativ einfach. Wir legen einfach die interne Spannung vom RPi am entsprechenden GPIO Pin an. Dann bauen wir den Taster dazwischen und erzeugen nun die Möglichkeit, eindeutig zwischen 3,3V und 0V zu schalten.

Nochmal als Textform: Wir schließen 2 Wiederstände (10k Ohm und 1kOhm) in Reihe. Das zweite Beinchen vom 10k Wiederstand schließen wir an die 3,3V vom Pi an. Das zweite Beinchen vom 1k Wiederstand an den entsprechenden GPIO Pin vom Pi. Da kann man sich mehr oder weniger was ausschen. Bitte NICHT an die PWM Beinchen. Und dann kommt der Taster zwischen die beiden Wiederstände und mit dem zweiten Pol an Masse (GND).

Das kann man natürlich noch um LED´s und mehrere Taster erweitern und landet dann bei so einem Bild. HINEWEIS: Alle Leitungen die GPIO Pin´s der Taster betreffen sind Orange und alle Leitungen die GPIO Pin´s für die LED´s betreffen sind Lila. Die Anschlüsse am PI sind nur Schematisch dargestellt. ACHTUNG: Die PIN Belegung unterscheidet sich tlw. von Pi zu Pi, also vorher unbedingt für sein Modell nachgucken welcher PIN welcher GPIO. Natürlich wäre dann auch gut zu wissen, an welchem Pin welche Spannung anliegt (es gibt 3,3V und 5V Pins) und welche Pins alle auf Masse (GND) liegen. Das Programm FRITZING hilft übrigens ungemein bei der Erstellung eines ersten Layouts.

 

 

 

Wie geht das ? - Software

Software:

So, wir brauchen zunächst die leere Speicherkarte und dann laden wir uns Raspian runter. Die light Version, wir brauchen weder die GUI (Desktop) noch die erweiterten Programme. Ihr habt also ein Image runtergeladen und benötigt nun noch eine Software, die das alles auf die SD Karte schreiben kann. Hier gibt es viele Lösungen, Balena Etcher wird sehr oft empfohlen. Ich nutze das auch gerne, aber sucht was aus was zu euch passt. Ich denke die Software könnt ihr alle selbst bei Google finden, installieren ist auch kein Thema. Ihr wählt dann später im Programm einfach das Image aus, das entsprechende Laufwerk und klickt dann auf FLASH.

Als nächstes braucht ihr ein Tool, mit dem man gut Textdateien umschreiben kann. Der Windows Text Editor ist dafür NICHT zu gebrauchen. Ich empfehle Notepad++. Hier muss aber noch eine Einstellung vorgenommen werden, und zwar die Formatierung am Zeilenende (ein paar Mausklicks). Sonst könnt ihr zwar alles eingeben, Raspian erkennt dann aber die Dateien nicht.

Auf der geflashten Speicherkarte findet ihr eine Datei die config.txt heißt, hier müssen ein paar Änderungen vorgenommen werden:

config_hdmi_boost=4
#dtparam=audio=on
dtoverlay=hifiberry-dac

das stellt sicher das später HiFi Berry Baustein lädt und der Pi ohne angeschlossenes HDMI Kabel bootet. Übrigens, wir werden alles ohne angeschlossene Tastatur und Monitor einstellen 😉

So, jetzt brauchen wir eine neue Datei: wpa_supplicant.conf

Da wir den Pi ja direkt ohne Monitor und Tastatur bedienen wollen, müssen wir also vor dem Start schon die WiFi-Verbinding einstellen. Die Datei wird einfach mit Notepad++ im Hauptverzeichnis der SD Karte erstellt. Inhalt der Datei:

country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
       ssid="SSID DES WIFI"
       psk="WIFI PASSWORT"
       key_mgmt=WPA-PSK
}

Und jetzt erstellen wir noch eine Datei, die einfach SSH heißt, keine Dateiendung hat und ebenfalls im Hauptverzeichnis der Speicherkarte liegt. Das ermöglicht das wir später vom PC auf den Pi zugreifen können. In der Datei selbst steht NICHTS DRIN. Das ist mal richtig einfach!

Damit wir das können, laden wir PUTTY runter und installieren das Programm. Und wir vergeben im Router eine feste IP-Adresse für den Pi, damit wir darauf später immer unter der gleichen Adresse zugriff haben. Putty ist ein Windows Programm das Konsolenzugriff per SSH zum Pi ermöglicht. Aber keine Angst das tut wirklicht nicht weh! Versprochen.

Schön, ihr habt Putty installiert, feste IP Adresse vergeben und Putty geöffnet. Ihr tragt dann da einfach die IP Adresse vom Pi ein und klickt dann auf open.

Der Pi möchte dann einen Benutzernamen wissen: Pi
Und dann ein Passwort: raspberry

Für diejenigen die noch nie mit Linux gearbeitet haben, Linux zeigt Passwörter nicht an, aber man kann sie trotzdem eintippen! Man sollte später unbedingt die Zugangsdaten ändern, da das die Standard-Zugänge sind! Auch hier hilft eine Suchmaschine eurer Wahl weiter.

Jetzt werden wir das Dingen erst mal auf den neuesten Stand bringen. Wir starten also ein Update:
sudo apt update

Kleiner Hinweis.  Das muss man nicht abtippen, es reicht wenn man das hier kopiert und dann einmal in Putty links und dann einmal rechts klickt. Dann landet der Befehl in der Konsole! Sehr einfach! Danach sorgen wir dafür, dass alle Pakete auf dem neusten Stand sind:

sudo apt full-upgrade


War doch bis hierher einfach, oder ?

Jetzt müssen wir noch ein bisschen Dateien ändern, ebenfalls in der Konsole

sudo nano /boot/config.txt

 dort tragen wir ein:

dtoverlay=hifiberry-dac

und gucken nach ob

dtparam=audio=on

so aussieht

#dtparam=audio=on

(wenn nicht, ändern)
(Mit Strg+X speichern und schließen)

dann geht es weiter:
sudo nano /etc/asound.conf

Dort tragt ihr ganzen Unten (nicht vergessen das das auch mit Kopieren geht)

pcm.hifiberry {
type softvol
slave.pcm "plughw:0"
control.name "Master"
control.card 0
}
pcm.!default {
type plug
slave.pcm "hifiberry"
}
ein. Hatte ich schon erwähnt das man die eingaben für Putty hier alle kopieren und dann mit einem simplen rechtsklick in Putty einfach einfügen kann ? Speichern, schließen, fertig.
Jetzt installieren wir die Phoniebox Software:
cd; rm buster-install-*; wget https://raw.githubusercontent.com/MiczFlor/RPi-Jukebox-RFID/master/scripts/installscripts/buster-install-default.sh; chmod +x buster-install-default.sh; ./buster-install-default.sh
  • WiFi haben wir bereit konfiguriert! Also NEIN
  • Beim Audiointerface ist PCM falsch und wir tragen MASTER ein
  • Ihr wollte Spotify ? Das wisst ihr selbst (wir nutzen es nicht)
  • Ja wir wollen den MPD (Music Player Daemon) installieren
  • Ja wir wollen die Default locations
  • Ja ihr wollte die Installation starten 😉
  • Die WINS abfrage müssen alle mit Windows als JA beantworten
  • Dann müsste eine Abfrage kommen ob ihr den USB-RFID Reader angeschlossen habt. Da müsst ihr das Keyboard auswählen (der Reader wird als Keyboard erkannt)

So, wenn das fertig ist

sudo reboot

dann neu anmelden (putty).

Wir installieren nun die Software für den On/Off Shim und bin froh, dass man die Befehle und Eingaben hier einfach kopieren und dann in der Konsole durch simplen rechtsklick einfügen kann:

sudo curl https://get.pimoroni.com/onoffshim | bash
danach ist die Frage, muss man die Pinbelegung noch anpassen oder nicht. Wer das muss, öffnet mit
sudo nano /etc/cleanshutd.conf
Da findet man unter anderem:
daemon_active=1
trigger_pin=17
led_pin=25
poweroff_pin=4
hold_time=2
shutdown_delay=0
polling_rate=1
Trigger Pin ist wichtig, da sollte der An/Aus Taster dran sein. ACHTUNG: PIN ist in dem Fall der GPIO Pin! Das gleiche gilt für Poweroff Pin und led_pin.
Mit hold_time könnt ihr einstellen wie lange man die Ein/Aus Taste drücken muss damit das Dingen aus geht.
Der erschaffer des Scriptes hat auch dafür gesorgt, dass man die Tasten beim Ein/Ausschalten animieren kann,
dazu müsst ihr folgende Dinge ausführen:
git clone https://github.com/splitti/phoniebox_led_control --branch master
sudo ln -s ~/phoniebox_led_control/service/phoniebox_led_control.service /etc/systemd/system/phoniebox_led_control.service
sudo systemctl daemon-reload
sudo systemctl enable /etc/systemd/system/phoniebox_led_control.service
sudo service phoniebox_led_control start
So, jetzt müssen wir noch Samba installieren und konfigurieren, dann wären wir fertig. Samba ist ein Dienst, der ermöglicht mit anderen Computern auf die Dateien und Verzeichnisse des Raspberry zuzugreifen.
sudo apt-get install samba samba-common-bin
weiter geht es mit:
sudo nano /etc/samba/smb.conf
da müsst ihr etwas suchen um zu gucken das da steht, evtl. nachtragen (WINS sollte yes sein (ihr erinnert euch an die Installation?))
workgroup = WORKGROUP
wins support = yes

und zu guter letzt:

sudo nano /etc/samba/smb.conf

da müsst ihr folgendes nachtragen:

[RFID-MUSIKSPIELER]
comment=RFID_MUSIKSPIELER
path=home/pi/RPi-Jukebox-RFID/shared/audiofolders
browseable=Yes
writeable=Yes
only guest=no
create mask=0777
directory mask=0777
public=no

und ab jetzt solltet ihr über die IP Adresse zugriff auf den Phoniebox-Benutzeroberfläche haben.

 

Die verflixten Taster

Die Taster sind für viele echt ein Problen und mich haben sie fast in den Wahnsinn getrieben!

Wenn ihr Taster an eurem PI angeschlossen habt, müsst ihr evtl. noch was konfigurieren.
Zu nächst wieder  der gute alte Nano:

sudo nano home/pi/RPi-Jukebox-RFID/scripts/gpio-buttons/gpio-buttons.py
darin findet ihr jede Menge Text. Genrell muss man jetzt aufpassen. In der Datei ist immer von den GPIO-Pins die Rede.Warum reite ich da schon die ganze Zeit drauf rum ? Beispiel:
Der Raspberry Pi 3b+ hat eine 40-Polige PIN-Leiste. Die sind entsprechend von 1-40 numeriert. Und jeder Pin hat eine andere Belegung. Zum Beispiel Masse (GND) oder Spannungsversorgung. Dann gibt es welche, die GPIO sind. General Purpose Input Output. Man kann die also so verwenden wie man möchte und dann in der Software konfiguriert. Beim RPi 3b+ ist z.B. der PIN 7, GPIO 4.  PIN 2 ist 5V Spannung. GPIO 22 liegt auf PIN 15. Die Nummerierung und Positionierung ist bei jedem Pi (also Zero, 2/3/4) anders, informiert euch also, welche Hardware Pins, GPIO sind und welche Nummern die haben. UND wenn ihr z.B. den hier verwendeten On/Off Shim und den HiFi-Berry benutzt, belegen die auch schon PIN´s.
Generell gilt - und das steht sonst nirgends - wenn ihr nur 2 Taster - sagen wir mal für Lauter und Leiser einbauen wollte, ist das kein Problem. Ihr müsst nur ALLE Zeilen auskommentieren die das Betrifft. Also vor diesem Textbaustein und auch danach. Auskommentieren heißt: wir machen eine # davor. Wenn ihr einen anderen GPIO Pin verwendet, ist das die richtige Stelle um die Zahlen zu ändern:
shut = Button(3, hold_time=2) 
vol0 = Button(13,pull_up=True)
volU = Button(16,pull_up=True,hold_time=0.3,hold_repeat=True)
volD = Button(19,pull_up=True,hold_time=0.3,hold_repeat=True)
next = Button(26,pull_up=True,hold_time=2.0,hold_repeat=False)
prev = Button(20,pull_up=True,hold_time=2.0,hold_repeat=False)
halt = Button(21,pull_up=True)
shut.when_held = def_shutdown 
vol0.when_pressed = def_vol0
Und dann sind wir fertig!