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
Die Idee dahinter die Kabel zu sparen mit einem eigens angeferigten HAT finde ich richtig gut, die Umsetzung genial! Danke dafür…
Hallo Andie,
tolles, durchdachtes Projekt….. meine Hochachtung !!! Vor allem das Board als Hat… und genau dazu hätte ich noch Fragen ??? Du hast beide Spg., 5V und 3,3V noch mit Elkos gepuffert…. was du dort genommen ?
Welche Steckverbinder zu den Tastern hast du verwendet ?
Wo genau hast du die Platine bestellt ????
Über eine Antwort würde ich mich freuen…..
Danke und Gruß Volker
Hallo Volker,
danke für deinen Kommentar!
Da die Frage nun immer wieder kam, habe ich alle Teile zur Bestückung nun oben gelistet.
Für den Kondensator habe ich 470nF genommen.
Für die Steckverbindung sind das platinenseitig Dupont Stecker, und auf der anderen Seite (am Taster)
normale Flachstecker zum Quetschen.
Die Platine habe ich hier bestellt: https://www.elecrow.com/services.html
VIele Grüße
Andi
Hallo Andi,
danke für das Layout der Platine und den Link zum Fertiger selbiger.
Da ich bisher noch keine PCBs bestellt habe, die Frage ob du hier etwas unterstützen kannst?
Welche Parameter sind bei elecrow wie anzugeben?
Können diese Infos aus KICad ausgelesen werden (die Größe wird vermutlich auf jeden Fall auslesbar sein)
Also z.B. Anzahl der Layer, PCB Dicke, welches Surface Finish, Castellated Hole, Cooper weight und PCB Stencil?
Vielen Dank vorab und viele Grüße
Alex
Hi Alex,
hier die Daten meiner letzten Bestellung:
Layer — 2layers
PCB Thickness — 1.6mm
Dimensions — 65mmX56mm
Castellated Hole — No
PCB Color — Green
Surface Finish — HASL
Copper Weight — 1oz
Different Design — 1
Hallo Andi,
Ich verfolge dieses Projekt nunmehr seit Einparken Monaten, und hatte dir schon einmal meine Hochachtung zu deinem Hat ausgedrückt….
du hast an anderer Stelle und vor einiger Zeit mit Splitti darüber philosophiert, den On-Off shim auf deinem Board zu integrieren…. Habt ihr das weiter verfolgt…. ich habe auch eine Box gebaut und habe eine Platine für die Taster und LEDS mit Lochraster erstellt…. war aber sicher nicht so professionell wie dein HAT….. Nun soll ich für meine weiteren 3 Enkelkinder nochmals Boxen bauen …. von daher wären deine Platinen schon eine riesige Erleichterung…. würdest du, auch gegen Bezahlung, deine Platine oder die Metadaten zur Verfügung stellen????
Viele Grüße
Volker
Hallo Volker,
nein, ich hatte leider keine Zeit mehr mich um eine zweite Version zu kümmern.
Wenn ich mal wieder eine Box bauen sollte gehe ich das an.
Die Platine selbst ist Open Source, hier nochmals der Link dazu:
Link zur Platine
Die darfst du gerne verwenden um selbst PCBs zu bestellen.
Viele Grüße
Andi
Hallo Andi,
sehr sehr schickes Projekt, der Hat und Deine Daten dazu sind wirklich stark – Danke!
Bau nunmehr auch grad meine erste Phoniebox damit, nun stellt sich die Frage nach der Abdeckung des OLED – sieht so aus, als hättest du hier was in 3D gedruckt… Leider gibt´s vom Hersteller des Displays nur sehr wenige Info zu den Abmessungen – hast Du irgendwelche 3D-Druck-Daten (stl o.ä.) zur Abdeckung?
Danke!
Alex
Hi Alex,
vielen Dank für deinen Kommentar!
Die Abdeckung des Displays ist tatsächlich aus dem 3D Drucker, Splittscheid hat hier ganze Arbeit geleistet:
https://splittscheid.de/phoniebox-no2-step-by-step-toniebox-nachbau/
Hier gehts direkt zu der Druckdatei:
http://splittscheid.de/wp-content/uploads/2020/03/Displayhalter.zip
Hallo eine super tolles Projekt und auch sehr schön umgesetzt.
Ich habe eine ganz kleine Frage, welche LED hast für die Powerled verwendet? (Eine ganz normale 5mm LED?)
Danke im voraus, werde das Projekt demnächst nachbauen.
Hi,
das ist ein Taster mit eingebauter LED. Hier der Link dafür:
zu Amazon
Danke für die Antwort, ich stand wohl auf dem Schlauch.
Heute habe ich die Custom PCB bestellt.
Leider ist mir noch nicht ganz klar wofür die Lötpads J3 (PWR BTN) da sein sollen? Könntest du mir einen kurzen Tipp geben damit ich darauf komme 😉
Ich hab dort den Power Button des On Off Shim angelötet damit er mehr Stabilität hat. Die Pins sind nicht verbunden und haben keine Funktionalität
Vielen lieben Dank. Ja genau des habe ich gesehen, dass die Pins keinerlei Verbindung haben, deswegen hat es mich ja gewundert.