Bau meiner Phoniebox
Auf dieser Seite möchte ich den Bau meiner Phoniebox dokumentieren. Die Phoniebox ist ein Open Source Projekt (http://phoniebox.de/), das im Wesentlichen die Funktionalität der original Toniebox nachbaut. Also: eine mit RFID Chips steuerbare Jukebox auf Basis eines Raspberry Pi für Kinder (die Phoniebox kann aber natürlich auch von Papa genutzt werden indem z.B. einer RFID Karte ein Rockradio Webstream oder eine Playlist bei Spotify zugewiesen wird). Ich habe eine erste Box für meinen Sohn und zwei weitere für meine Neffen gebaut. Dabei habe ich die Boxen immer weiter verbessert und schlussendlich sogar einen eigenen PCB dafür designed. Aber gleich mehr dazu….
Grundsätzlich muss zunächst eine „Box“ gebaut werden, also ein Gehäuse mit allerhand Hardware. Dies wird im ersten Schritt beschrieben. Danach benötigen wir die entsprechende Software. Bei mir kommt die großartige RPi-Jukebox zum Einsatz.
Verwendete Teile
Hardware
Hardware | Komponente |
Kiste | Box vom Bauhaus |
Front- und Rückplatte | Alu Dibond Maßanfertigung |
Rechner | Raspberry Pi 3+ oder 4 |
Verstärker | HifiBerry MiniAmp |
Platine | Custom PCB |
Lautsprecher | 2x Visaton FRS 5 Breitband 5” |
Display | AZDelivery OLED |
Ein Ausschalter | OnOffShim |
RFID Leser | Neuftech |
Stromversorgung | Powerbank |
Buttons | Arcade Buttons mit Mikroschalter LED |
Widerstände und Kondensatoren | Kondensatoren Widerstände: 100 Ohm | 220 Ohm | 1K Ohm | 10K Ohm |
Buchsen und Litzen | Dupont 24Pin Buchse Dupont 2Pin Buchse Litzen |
Abstandshalter für den Hat | Distanzhülsen |
Langer 40poliger Pi Header | Pi Header |
Stiftleiste für Buttons und Display (2×12 gewinkelt) | Stifleiste gewinkelt 2,54mm |
Stifleiste für Power LED und Power Button (je 2×1 gewinkelt) | Stiftleiste |
Stiftleiste für OnOffShim (2×6 gerade) | Stifleiste gerade |
Die Kiste
Zunächst aber zur Auswahl der Hardware. Nachdem ich mich bei der ersten Box noch für die in vielen Blogs empfohlene Kesper Kiste von Obi entschieden hatte, wollte ich für die Version 2 ein hochwertigeres Aussehen ohne Lackieren. Schlussendlich ist es eine Kiste vom Bauhaus geworden.
Front- und Rückplatte
Ich wollte eine farbige Front bei gleichzeitiger Stabilität und Kratzfestigkeit. Nach langem Suchen habe ich schließlich folgende Alu Dibond Platten bestellt. Die genau Abmessung für die Kiste vom Bauhaus sind 28x18cm für Front- und Rückplatte.
Das Bearbeiten der Platte ging erstaunlich gut, mit einem Lochbohrer wurden die 25mm Löcher für die Buttons und die 50mm Löcher für die Lautsprecher gebohrt. Nur das Ausschneiden des Displays war nicht so erfolgreich und das ist zugegebenermaßen auch der Schwachpunkt meiner gebauten Box. Mal sehen wie ich das in einer Version 3 verbessern kann (auf jeden Fall mit besserem Werkzeug: ich habe gebohrt, dann mit der Stichsäge bearbeitet und abschließend gefeilt).
Das fertige Ergebnis der Alu Frontplatte und der Holzbox war dann folgendes:
Einbau der Komponenten in die Box
Es gab folgendes zu tun:
- Das Display wurde mit Heißkleber eingeklebt
- Die Powerbox wurde ebenfalls mit Heißkleber befestigt und unten durch ein Holzstück (an dem dann auch die Rückseite verschraubt wird) eingeklemmt
- Die Lautsprecher wurden … natürlich verklebt
- Die Griffe haben die perfekte Maße für die Befestigung der Buttons. Ich habe dann lediglich eine Abdeckung gebaut.
- Die 4 Abstandshalter für die RaspberryPi Aufnahme wurden von unten verschraubt
- Für die Rückplatte habe ich drei Holzleisten von unten bzw. oben verschraubt um dann dort wiederum die Platte zu verschrauben.
Ansteuerung der LEDs und Buttons
In der ersten Version meiner Phoniebox habe ich (wie in den meisten anderen Anleitungen zum Bau einer Box) auf ein externes Breakout Board die einzelnen Widerstände und Pins gelötet und diese dann einzeln mit den GPIO PINs des RaspberryPi verkabelt. Insgesamt fand ich die Lösung total unübersichtlich und nicht besonders zuverlässig (die Stecker der Einzelpins haben sich immer wieder gelöst). Hier ein Bild dazu:
Phoniebox Hat – custom PCB
Hier als Abkürzung direkt der Link zum KiCad Projekt auf Github: https://github.com/amueller-tech/phonieboxHat
Für die Version 2 schwebte mir vor einen PCB zu designen der einfach auf den RaspberryPi als „Hat“ aufgesteckt wird und an den dann alle Hardwarekomponenten (Buttons, LEDs, Display etc.) angeschlossen werden.
Da ich für die Soundausgabe auf einen HifiBerry MiniAmp setze, sollte dieser dann gleich noch mit aufgesteckt werden können. Die konkreten Anforderungen an den PCB waren:
- Kompatibler Hat für den RaspberryPi 3+4 zum Aufstecken
- Befestigung eines weiteren HATs am PCB (für den HifiBerry)
- Anschluss für 5 Buttons inklusive LEDs
(Vol+, Vol-, Previous, Play/Pause, Next) - Anschluss für die PowerLed
- Anschluss für ein IC2 (4Pin) Display
- Anschluss für einen OnOffShim zum Ein/Ausschalten des Pis
Ich machte mich also daran in KiCad einen Schaltplan zu entwerfen und schickte die Bestellung nach China. Ungefähr 2 Wochen später bekam ich folgende Platine:
UPDATE 13.06.2020: Neue Platine 0.3 verfügbar die nun auch den OnOffShim integriert.
Alles andere bleibt im Prinzip gleich.
Sofort machte ich mich an den Aufbau. Für die Widerstände und die Kondensatoren (zum Abfangen von möglichen Spannungsschwankungen) entschied ich mich für kompakte SMD 1206 Bauteile, die aber noch gut mit der Hand zu löten sind. Für die Stecker kommen 4 polige übereinander angeordnete Exemplare zum Einsatz (bei v0.3 eine 2×12 polige Buchse). Um die PINs des Raspberry Pis auch an einen weiteren Hat weiterzuleiten benötigt man extra lange PIN header die dann durchgesteckt werden. Man verlötet sie auf der Oberseite des Hats und hat dann noch genügend Länge um einen weiteren aufzustecken. Wichtig ist natürlich, dass GPIOs nicht doppelt belegt werden dürfen, man kann also nicht einen beliebigen HAT aufstecken, die beiden müssen aufeinander abgestimmt sein.
Das fertige Ergebnis kann sich glaube ich sehen lassen. Der Hat passt perfekt auf den RaspberryPi, der HifiBerry kann einfach mit aufgesteckt werden und durch die Steckerlösung lassen sich alle Komponenten der Phoniebox einfach an- und ausstecken. Das ganze trägt natürlich auch super zur Ordnung im Inneren bei und gleichzeitig ist alles richtig befestigt und ich habe keine Angst mehr, dass sich ein Pin löst wenn die Kids die Box doch einmal etwas unsanfter abstellen.
Verkabelung und fertiges Ergebnis
Eigentlich felt nur noch die Verkabelung der Komponenten sowie die Rückseite der Box. Hier ein paar Impressionen wie ich das gelöst habe:
Software
Als Software kommt wie gesagt die großartige RPi-Jukebox zum Einsatz. Nach der Installation müssen basierend auf meine PCB Design die GPIOs angepasst werden. Hier eine Übersicht der Belegung direkt aus KiCAD heraus:
Die GPIOs für den HifiBerry MiniAMP sind fix (16, 18, 19, 20, 21, 26) und können nicht von den Buttons und LEDs belegt werden. Die restlichen GPIOs habe ich so gewählt, dass sie für die Leiterführung auf dem PCB am besten passen. Im Folgenden nun die einzelnen Installationsschritte mit der jeweiligen Anpassung der GPIOs
Raspberry Image mit HifiBerry
Mittels dem Tools Etcher wird das aktuellste Raspbian Image Buster Lite geflashed:
Etcher: https://www.balena.io/etcher/
Raspbian: https://www.raspberrypi.org/downloads/raspbian/
Um direkt nach dem Flashen beim Starten mittels WLAN und SSH auf den PI zugreifen zu können, müssen 2 Dateien ins Boot Verzeichnis der SD kopiert werden.
Eine leere Datei Namens „ssh“ und eine Datei Namens wpa_supplicant.conf
die die Konfiguration des Netzwerkes enthält:
# Datei wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
network={
ssid="wlan-bezeichnung"
psk="passwort"
key_mgmt=WPA-PSK
}
Nach dem Einloggen mittels SSH wird die interne Soundkarte deaktiviert und der HifiBerry MiniAMP aktiviert:
#/boot/config.txt
#Deactivate onboard Audio
#dtparam=audio=on
[all]
dtoverlay=hifiberry-dac
Danach muss die Default Soundkarte auf den HifiBerry gesetzt werden:
#/etc/asound.conf
pcm.hifiberry {
type softvol
slave.pcm "plughw:0"
control.name "Master"
control.card 0
}
pcm.!default {
type plug
slave.pcm "hifiberry"
}
Installation der Jukebox Software
Nun kann die eigentliche Jukebox Software installiert werden:
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
Die Fragen in der Installationsroutine sind selbsterklärend (bzw. die Standardoptionen sind ok), nur beim Soundinterface muss man „Master“ als iFace angeben.
Danach müssen die GPIOs in /home/pi/.config/phoniebox/gpio_settings.ini wie folgt geändert werden: Danach dann in RPi-Jukebox-RFID/components/gpio_control sudo install.sh ausführen
[DEFAULT]
enabled: True
[VolumeControl]
enabled: False
Type: TwoButtonControl ;or RotaryEncoder
PinUp: 5
PinDown: 6
pull_up: True
hold_time: 0.3
hold_repeat: True
timeBase: 0.1 ;only for RotaryEncoder
functionCallDown: functionCallVolD
functionCallUp: functionCallVolU
functionCallTwoButtons: functionCallVol0 ;only for TwoButtonControl
[PrevNextControl]
enabled: False
Type: TwoButtonControl
Pin1: 22
Pin2: 23
functionCall1: functionCallPlayerPrev
functionCall2: functionCallPlayerNext
functionCallTwoButtons: None
pull_up: True
hold_time: 0.3
hold_repeat: False
[PlayPause]
enabled: True
Type: Button
Pin: 8
pull_up: True
hold_time: 0.3
functionCall: functionCallPlayerPause
[Shutdown]
enabled: False
Type: Button
Pin: 3
pull_up: True
hold_time: 2
functionCall: functionCallShutdown
[Volume0]
enabled: False
Type: Button
Pin: 17
pull_up: True
hold_time: 0.3
functionCall: functionCallVol0
[VolumeUp]
enabled: True
Type: Button
Pin: 23
pull_up: True
hold_time: 0.3
hold_repeat: True
functionCall: functionCallVolU
[VolumeDown]
enabled: True
Type: Button
Pin: 27
pull_up: True
hold_time: 0.3
hold_repeat: True
functionCall: functionCallVolD
[NextSong]
enabled: True
Type: Button
Pin: 6
pull_up: True
hold_time: 0.3
functionCall: functionCallPlayerNext
[PrevSong]
enabled: True
Type: Button
Pin: 10
pull_up: True
hold_time: 0.3
functionCall: functionCallPlayerPrev
[Halt]
enabled: False
Type: Button
Pin: 21
pull_up: True
hold_time: 0.3
functionCall: functionCallPlayerPauseForce
Installation des Displays
Zunächst muss der IC2 Interface aktiviert werden:
#raspi-config auf der Kommandozeile ausführen, dann
-> Interfacing Options -> enable ic2 service
Danach kann die Software wie folgt installiert werden:
(Mehr Details gibt es beim Autor auf dessen super Seite zur Dokumentation seiner Phoniebox: http://splittscheid.de/selfmade-phoniebox/).
Am Schluss die „Option 3 skip“ wählen, wir haben das GPIO File ja schon angepasst.
cd; rm o4p_installer.sh; wget https://raw.githubusercontent.com/splitti/oled_phoniebox/master/scripts/install/o4p_installer.sh; chmod +x o4p_installer.sh; ./o4p_installer.sh
Installation des LED Services
Ebenfalls vom Autor der Displaysteuerung übernommen wurde er LED Service der die LEDs der Buttons beim hochstarten blinken lässt. Installiert wird er wie folgt:
git clone https://github.com/splitti/phoniebox_led_control --branch master; sudo ln -s /home/pi/phoniebox_led_control/service/phoniebox_led_control.service /etc/systemd/phoniebox_led_control.service;sudo systemctl daemon-reload; sudo systemctl enable /etc/systemd/phoniebox_led_control.service; sudo service phoniebox_led_control start
Dann folgende GPIOs anpassen:
#/home/pi/phoniebox_led_control/led.py
prev=25
play=5
next=12
volup=24
voldown=22
#/home/pi/phoniebox_led_control/gpiozero_led.py
LED_PREV = PWMLED(25)
LED_PLAY = PWMLED(5)
LED_NEXT = PWMLED(12)
LED_VOLUP = PWMLED(24)
LED_VOLDOWN = PWMLED(22)
Dann den Service zum Autostart hinzufügen
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
Installation des OnOff Shim
curl https://get.pimoroni.com/onoffshim | bash
#/etc/cleanshutdown PINS are GPIO Numbers
trigger_pin=17
led_pin=13
poweroff_pin=4
hold_time=2
shutdown_delay=0
polling_rate=1