- Sat 29 February 2020
- Note
- MaZderMind
- #linux, #python, #hardware, #deutsch, #electronics
Überblick
Vor etwa 15 Jahren hatten meine Eltern die Nase voll davon, dass wir (damals so um die 16 Jahre alt) jeden Samstag das gemeinsame Wohnzimmer zum Feiern belagerten. Mein Vater räumte daher seinen Keller-Arbeits-Raum und wir renovierten dort ein Partyraum hinein. Zu dieser Zeit tauchte auch die Jukebox erstmal auf. Wo genau sie herkommt weiß ich nicht, aber ein Sticke deutet darauf hin, dass sie zumindest Zeitweise im Autohaus am Petersberg stand – vermutlich aber auch nur als Deko.
Die Jukebox, eine Serenade Festival 130D (1967-69) ist im Original ein größtenteils Elektromechanisches Gerät. Die Abspiel-Steuerung basiert auf Motoren, Drehschaltern und Relays. Folglich gab es keine Titel-Vorwahl – eine gewähltes Lied (=eine Seite einer Schalltplatte) spielte ab, danach musste neu gewählt werden.
Das Projekt
Die Jukebox steht schon so viele Jahre hier nutzlos rum. Nach der Renovierung des ehemaligen Paryraums zum neuen Homeoffice-Bastelkeller-mit-Bar sollte die Jukebox ein zentrales Objekt im Raum werden. Als haptische Steuerung für Musik und Beleuchtung. Das wäre mit dem originalen mechanischen Steuerwerk nicht möglich gewesen. Daher war, trotz einigem Hadern, der Plan recht schnell gefasst, die originale Steuerung komplett zu umgehen und auch die ursprünglichen Verstärker und Lautsprecher nicht zu benutzen.
Das Tastenwerk und die damit verbundene Mechanik wollte ich jedoch im Originalzustand erhalten. Als Computing-Basis sollte ein RaspberryPi verwendet werden, so dass z.B. das hinreichend erprobte raspotify zum Abspielen von Musik verwendet werden kann.
Das Tastenwerk
Das Tastenwerk besteht aus einer Eject-Taste, 16 Buchstaben-Tasten (A-Q, wobei das I ausgelassen wurde), 8 Zahlentasten (1-8), einer Halte/Auswurf Spule und zwei 30V Glühlampen. Ist die Magnetspule angezogen, erlaubt er das Einrasten von Tasten, wird er gelöst wir die Auswahl gelöscht. Die Eject-Taste unterbricht den Strom zur Spule direkt und wirft so die Auswahl aus.
Stecker
Die originalen Stecker waren immernoch in gutem Zustand, jedoch war es mir nicht möglich den Steckertyp zu bestimmen oder eine Bezugsquelle dafür zu finden. Daher habe ich mich schweren Herzens entschlossen, die Stecker abzuschneiden und neue, kleinere JST-XH-Stecker zu crimpen.
Elektronik
Auf der Tastenseite kommen zunächst 3.3V Clamping Dioden CM1293A zum Einsatz. Bei Experimenten sind auf den Steuerleitungen bei Schaltvorgängen der Tastenspule Spitzenspannungen von +/- 10V und mehr zu sehen gewesen, die hier abgeleitet werden sollen. Anschließend wird das Signal durch 100 Ohm Widerstände un 4er-Packs EXB-3BV100JV geführt, um die darauf folgenden IO-Expander MCP23S17 zu schützen. Die beiden IO-Expander werden direkt an den SPI0-Bus es RaspberryPi
Tastenspule
Außerhalb des Betriebs (Standby-Modus) soll die Tastenspule und die Glühlampe im Panel komplett deaktiviert werden können. Daher wird die 30V Versorgungsspannung mit einer High-Side-FET Schaltung durch den RaspberryPi steuerbar gemacht.
Die Schaltung ist aus zwei Stufen aufgebaut. In der ersten Stufe wird ein N-Channel Driver-FET DMN6075S verwendet, der mit den 3.3V Systemspannung ausreichend durchgesteuert werden kann. Dieser zieht das Gate des P-Channel FET DMP4065S gegen GND. Die FETs sind beide so gewählt, dass sie mit 30Vdss klar kommen und auch die gemessenen 750mA Last der Spule und Glühlampe aushalten können. Da die Vgs des gewählten P-Channel FETs mit Typ. 10V/Max 20V angegeben ist, wird eine Zener-Diode MMSZ5239B-7-F in Serie geschaltet um Vgs auf 9.1 V zu clampen.
Die Steuerung des Tasten Solenoids erfolgt mit einem Low-Side-Switch, bei dem der selbe N-Channel FET DMN6075S verwendet wird, um die negative Seite der Tastenspule gegen GND zu verbinden. Eine Freilaufdiode ist bereits an der Spule selbst verbaut und kann daher hier entfallen. LEDs zeigen den Schalt-Zustand der FETs an.
Audio DAC
Für die Ausgabe der Musik ist auf dem HAT eine I2S Soundkarte PCM5122 verbaut. Dies ist der selbe Chip wie im HifiBerry Dac+ und er wird vom HifiBerry Kernelmodul direkt erkannt.
Der Schaltplan ist relativ einfach und orientiert sich an den Empfehlungen aus dem Datenblatt und einigen Beispielen zur Verwendung mit dem Raspberry-Pi.
Stromversorgung
Die Tasten-Spule benötigt recht genau 30V. Bei 32V wird sie im Dauerbetrieb und ohne Konvektion bereits zu warm, bei 26V hält sie schon nicht mehr stabil den Magnetarm. Da es sich hier um ein 1-Off-Projekt handelt und Teile-Stückkosten kein Hauptfaktor waren, wählte ich ein externes 30V Plugpack.
Die 30V werden auf den RaspberryPi Hat geführt und dort mit einem Traco TSR-2560. Auch hier gilt: Das Ding ist absurd teuer, aber trivial zu benutzen und hervorragend geeignet, die 2A Peak-Leistungsanforderungen des RaspberryPi auf dem 5V Rail aus den 30V Eingangsspannung zu erzeugen.
Diese 5V werden durch eine Ideal Diode Configuration zum RaspberryPi weitergegeben, wie es in der Hat-Spezifikation gefordert ist.
Für den On-Board gebrauch werden zwei 3.3V Linear-Regulatoren L78L33 verwendet um damit zwei 3.3V Raisl zu erstellen: eine für alle digitalen Systemteile und eine für den analogen Teil des Soundkarten-DACs.
Ein weiterer TSR-2-2450 für die Versorgung von 5V ws2812b RGB-LEDs ist auf dem Schaltplan und dem PCB-Layout zwar vorgesehen, aber nicht eingebaut. Mit 2A kann man ja nur eine Hand voll (ca. 40) ws2812b LEDs auf voller Helligkeit ansteuern und es wurde recht schnell klar, dass das nicht ausreichen würde.
Daher ist neben dem 30V Plugpack auch noch ein dedizierte 5V 40A Netzteil nur für die LEDs in der Jukebox verbaut.
Zusammenbau
Der Jukebox-Pi Hat ist mit größtem Abstand mein komplexstes Elektronik-Projekt. Die Bauteildichte und die damit verbundene Notwendigkeit Widerstände und Kondensatoren auf die Unterseite verlagern zu müssen ohne die Groundplane zu stark zu unterbrechen war eine Herausvorderung.
LEDs
Ursprünglich bestand die Beleuchtung der Jukebox aus zwei Neonröhren und bedruckten Frontgläsern. Leider ist nur das obere Glas erhalten.
Für die Front wurden ws2812b LED-Strips auf einem Holzrahmen montiert und mit Stoff bespannt. Auch das obere Glas wurde mit LED-Stips hinterlegt.
Der Einbau des Lautsprechers im Innenraum erfordete eine Licht- und Schalldurchlässige Front. Daher wurde die Front mit einem Stoff bespannt.
Ansteuerung
Alle ICs, die an den Raspberry-Pi SoC angebunden sind, werden bereits von vorhandenen Linux-Kernel-Modulen unterstützt. Ein Device Tree Overlay-Fragment konfiguriert die SPI Port-Extender, deren PullUps und die verwendeten Interrupt-Leitungen.
Das LEDs-Modul wird benutzt um auf Ausgänge konfigurierten Pins an den Port-Extendern aus dem Userland zugänglich zu machen. Dazu zählen sowohl die Status-LEDs als auch die beiden FETs zum ansteuern der Tastenspule.
Mit dem GPIO-Keys-Modul werden die Eingänge der Port-Extender zu einer virtuellen Tastatur zusammengefasst.
Aus dem Userland sind die Tasten dadurch über die regulären Kanäle, z.B. über das Python-Modul evdev zugänglich. Die LEDs und FETs können über einfache I/O-Operationen gesteuert werden:
echo 1 >/sys/class/leds/solenoid/brightness
sleep 0.25
echo 0 >/sys/class/leds/solenoid/brightness
Die Konfiguration der Soundkarte wurde vom Hifiberry-DAC Overlay übernommen. Die Soundkarte wird dann direkt von ALSA erkannt.
Software
Zur Musikwiedergabe läuft auf dem Raspberry-Pi raspotify als headless Spotify-Client. Dieser läuft im Hintergrund und hat selbst keine Steuer-Optionen sondern wird über die Spotify-API gesteuert, so kann jedes Smartphone und jeder Desktop-Client zur ansteuerung benutzt werden.
Die Jukebox-Controller-Software verwendet den spotipy API-Client um mit der Spotify Web-API zu kommunizieren und darüber den raspotify
-Client zu steuern. Neben der Ansteuerung des Spotify-Clients unterstützt die Jukebox-Software auch das Abspielen von Webradio-Streams, Podcasts und allen Webseiten, die durch youtube-dl unterstützt werden, worunter z.B. mixcloud.com fällt.
Je nach Musik kann die Jukebox-Software passende Animationen auf der LED-Front anzeigen.
Jeder Tasten-Kombination in der Konfiguration kann wahlweise eine Spotify-Playliste, ein Album oder ein Künstler hinterlegt werden. Auch Radiosender und Podcast-Feeds können so auf Tastenkombinationen gebunden werden.