#358 – Mini Floppy Midi Player

#358 – Mini Floppy Midi Player

Hoch die Hände, Wochenende! Ich kann euch gar nicht sagen, wie froh ich bin, dass die Arbeitswoche vorbei ist. Zur Zeit ist es echt stressig und da tun ein paar freie Tage zwischendurch richtig gut.

Bild_1

Erst mal runterkommen. Doch was macht der Herr retrololo, um zu entspannen? Natürlich basteln! 🙂 Die Frage ist nur was? Hm, mal überlegen… Nanu, was ist denn das? Da liegt ja noch ein Diskettenlaufwerk auf dem Schreibtisch! Was es wohl damit auf sich hat?

Bild_2

Ach ja, ich erinnere mich… Das Laufwerk vom Typ „SFD-321B /E“ der Marke Samsung habe ich vor einiger Zeit aus einem Retro-PC ausgebaut, weil es defekt war. Was genau kaputt ist, weiß ich nicht. Erst hat das Ding keine Disks mehr gelesen und leider hat eine Reinigung des Schreib-/Lesekopfs nichts gebracht. Nach einigen weiteren Tests an anderen Systemen wird das Laufwerk mittlerweile gar nicht mehr als Gerät von einem PC erkannt. Eine Reparatur ist vermutlich schwierig und wenn man ehrlich ist, lohnt sich der Aufwand nicht. Also ein klassischer Kandidat für den Elektroschrott? Nicht ganz – da der Motor des Laufwerks grundsätzlich noch funktioniert, können wir vielleicht noch was Nettes damit basteln. Ich denke da an Artikel 34 zurück, in welchem wir ein paar Diskettenlaufwerken das Musizieren beigebracht haben! 😉

Bild_3

In Artikel 50 haben wir dann noch weitere Laufwerke hinzugefügt und daraus einen „Floppy Midi Player“ gebaut, für welchen ich in der Vergangenheit zahlreiche Lieder in Form von MIDI-Dateien erstellt und aufgenommen habe. Ich weiß nicht warum, aber irgendwie reizt es mich, nochmal so ein Gerät zu bauen. Diesmal soll das Projekt aber deutlich kleiner und kompakter werden, schließlich haben wir ja auch nur ein Laufwerk (und keine acht Stück wie beim ersten Mal) zur Verfügung.

Bild_4

Hm, was braucht man nochmal schnell, um das gute Stück zum Piepsen zu bewegen? In jedem Fall Strom, sowie eine Möglichkeit, den Motor des Laufwerks anzusteuern. In den Artikeln 34 und 50 haben wir die Laufwerke mit Hilfe eines PC-Netzteils betrieben. Die Konvertierung von MIDI-Dateien in Steuersignale für den Laufwerksmotor hat dann ein Arduino Mikrocontroller samt der Software „Moppy“ übernommen. Um nicht wieder genau das Gleiche zu machen, wollen wir es diesmal mit einem Raspberry Pi sowie einer anderen Software zu Laufwerksansteuerung probieren. Wie gut, dass hier noch ein Model 3B+ von 2017 herumliegt! 😉

Bild_5

Was mich schon immer gestört hat, ist, dass die Laufwerke eine eigene Stromversorgung benötigen. Bei mehreren Geräten lässt sich das nicht vermeiden, aber da wir nur ein Laufwerk betreiben wollen, können wir versuchen, den Strom direkt vom Raspberry abzugreifen. Dieser besitzt nämlich neben den GPIO-Pins (General Purpose Input/Output) als Schnittstelle zum Datenaustausch auch zwei Pins (Nummern 2 und 4), an denen 5 Volt anliegen. Daran können weitere Komponenten wie z.B. stromhungrige Sensoren angeschlossen werden.

Bild_6

Laut Datenblatt arbeitet das Laufwerk mit 5 Volt und zieht irgendwas zwischen 0,3 bis 0,7 Ampere. Ein originales Raspberry Pi Netzteil liefert bis zu 2,5 Ampere. Abzüglich der max. 0,8 Ampere, die der Mini-PC selbst braucht, bleibt also theoretisch noch genug Power für das Diskettenlaufwerk übrig. Um das zu testen, verbinden wir die Pins 2 (5 Volt, rotes Kabel) und 30 (Masse, braunes Kabel) mit der Stromversorgungseinheit des Laufwerks. Das ist die Stelle, an der sonst der Berg-Stecker von einem PC-Netzteil steckt.

Bild_7

Klappt! 🙂

Fun Fact: Viele der älteren Diskettenlaufwerke verwenden neben 5 Volt auch noch die 12 Volt Leitung eines AT(X)-Netzteils, um damit den Schrittmotor zu betreiben. Wir haben Glück, dass unser Laufwerk etwas neuer ist und ausschließlich mit 5 Volt arbeitet!

Bild_8

Ok, Strom haben wir schon mal. Jetzt kümmern wir uns um die Ansteuerung des Motors. Als Erstes müssen wir den „Drive Select Pin“ auf der Rückseite des Floppydrives mit Hilfe eines Jumpers überbrücken. Das ist notwendig, damit das Laufwerk überhaupt auf Signale reagieren kann.

Fun Fact: Zur Erinnerung: Diskettenlaufwerke benutzen Schrittmotoren, um den Schreib-Lesekopf zu bewegen. Dabei wird eine Schwingung mit einer bestimmten Frequenz erzeugt, die als Schallwelle zu hören ist. Um so schneller sich der Motor bewegt, um so höher ist die Frequenz. So entstehen letztendlich die Töne. Schon irgendwie abgefahren! xD

Bild_9

Um nun vom Raspberry Pi aus den Motor des Diskettenlaufwerks steuern zu können, müssen drei weitere Pins des Laufwerks mit den GPIO-Pins des Mikrocomputers verbunden werden. Prinzipiell kann dafür jeder beliebige GPIO-Pin verwendet werden, sofern die Software, mit welcher man die Laufwerke später steuern möchte, eine flexible Konfiguration zulässt. Ich habe mich für GPIO 20 (gelbes Kabel zur Ansteuerung des Schrittmotors) und GPIO 21 (grünes Kabel zur Ansteuerung der Laufrichtung des Motors) entschieden. Ebenso muss einer der Masse-Pins des Laufwerks (orangenes Kabel) mit der Ground-Leitung des Raspberry Pi verbunden werden.

Not so fun Fact: Die Pinnummern der Buchsenleiste des Raspberry Pi sind nicht die Gleichen, wie die GPIO-Nummern! Hier muss man ganz genau in die Beschreibung schauen, um sich nicht verwirren zu lassen und die falschen Pins miteinander zu verbinden. Glaubt mir, ich weiß wovon ich spreche… 😉

Bild_10

Soviel zur Hardware. Noch kann der Raspberry leider gar nichts, denn ihm fehlt ein Betriebssystem, welches wir ihm auf einer MicroSD-Karte zufüttern müssen. Dafür verwende ich die Software „Raspberry Pi Imager“, weil diese einen automatischen Download verschiedener Systemversionen sowie eine Vorabkonfiguration einiger Grundeinstellungen zulässt.

Fun Fact: Die 16 GB große, bzw. kleine Micro SD Karte habe ich bei einer bekannten, deutschen Drogeriemarktkette für sage und schreibe 4 Euro erworben. Für die meisten von euch ist das vermutlich nichts mehr Besonderes, aber mich haut das immer noch um, dass man „so viel“ Speicherplatz für so wenig Geld erwerben kann. Hätte man das einem PC-Besitzer oder Technik-Enthusiasten vor 20 Jahren gesagt, hätte er einen vermutlich für verrückt erklärt! 😀

Bild_11

Mit eingesteckter Micro-SD-Karte können wir den Mini-PC dann starten. Sicherheitshalber habe ich eine etwas ältere Distribution mit 32-Bit-Kernal verwendet. Aus Erfahrung weiß ich, dass neuere Systeme manchmal Probleme mit hardwarenaher Software machen und meist auch sehr langsam auf einem älteren Raspberry laufen.

Bild_12

Noch ist hier ja nicht viel los… Das sollten wir schleunigst ändern! 😉 Zur Ansteuerung des Diskettenlaufwerks möchte ich die Software „floppymusic“ verwenden. Das kompakte C-Programm wurde explizit für den Raspberry Pi entwickelt und sollte – im Vergleich zur umfangreichen Moppy-Software – für unser eines Laufwerk genau das Richtige sein. Per Befehl „git clone https://github.com/kingdread/floppymusic“ lässt sich der Quellcode herunterladen.

Bild_13

Mit dem Befehl „make MODEL=PI2“ können wir das Programm dann kompilieren und linken.

Fun Fact: Wie bei Linux üblich, müssen vorab einige Tools (z.B. build-essentials) zur Umwandlung des C-Quellcodes heruntergeladen und installiert werden. Die gefühlt ewige Suche nach bestimmten Softwareständen samt der fehlerintensiven Nachinstallation von Paketen mit diversen Abhängigkeiten erspare ich euch! 🙂

Bild_14

Bevor wir die Software nutzen können, muss noch eine Datei namens „drives.cfg“ angelegt und befüllt werden. Darin wird konfiguriert, an welchen GPIO-Pins das Diskettenlaufwerk angeschlossen ist:

Bild_15

Jetzt sollten wir eigentlich bereits in der Lage sein, via Befehl „sudo ./floppymusic ./mid/tetris.mid“ eine erste MIDI-Datei auf dem Laufwerk abzuspielen.

Not so fun Fact: Wichtig ist, dass man das Programm mit root-Rechten (sudo) startet. Ebenso werden nur MIDI-Dateien, welche einen sauberen Header besitzen, unterstützt. Einige der von mir getesteten Dateien (u.a. auch welche, die ich selbst erstellt habe) werden von dem Programm nicht erkannt.

Bild_16

Es klappt tatsächlich und wir hören ein paar sehr kratzige Töne, welche grob nach der Tetris-Melodie klingen. Ganz so gut, wie auf dem großen „Floppy Midi Player“ hört sich das nicht an. Einerseits fehlen ja ein paar Laufwerke und wir haben nur „eine Stimme“, andererseits arbeitet auch die Software floppymusic im Vergleich zu Moppy etwas anders. Beim Abspielvorgang werden alle in einer MIDI-Datei befindlichen Spuren zusammengewürfelt. Ebenso wird im Vergleich zu Moppy leider nur eine Oktave unterstützt und alle Noten, die sich außerhalb befinden, werden einfach höher oder tiefer abgespielt. Dadurch hören sich viele Stücke nicht ganz korrekt an.

Bild_17

Eigentlich hatte ich nicht vor an der Software herumzupfuschen, aber bei einem Blick auf den Sourcecode ist mir aufgefallen, dass sich die Möglichkeit, mehrere Oktaven abspielen zu können relativ einfach implementieren lässt. Also gut, ein paar geänderte Programmzeilen und diverse Kompilierungsvorgänge später können wir „floppymusic“, bzw. unserem Diskettenlaufwerk tatsächlich auch ein paar höhere und tiefere Töne entlocken! 😉

Not so fun Fact: Leider können wir trotzdem nicht einfach die MIDI-Dateien, welche wir für den großen „Floppy Midi Player“ erstellt haben, verwenden, da diese einfach zu viele Spuren haben. Ich könnte mir vorstellen, dass ich hier noch einiges an Zeit in die Vorbereitung der Audiotracks stecken muss, um diese entsprechend vorzubereiten (auf eine Spur zu reduzieren, Noten umsetzen, etc.).

Bild_18

Davon sollen wir uns aber nicht entmutigen lassen. Stattdessen wollen wir unseren Mini Floppy Midi Player noch etwas tunen. Es wäre z.B. schön, wenn man nicht händisch per Terminal und Tastatureingabe einzelne Stücke auswählen müsste. Ganz klar – wir brauchen eine grafische Oberfläche! Das lässt sich recht einfach mit Python und der Bibliothek „guizero“ realisieren. Die benötigten Komponenten sind schnell heruntergeladen und installiert:

Bild_19

Die Entwicklung der GUI ist dann schon etwas komplizierter. Vielleicht liegt es daran, dass ich so gut wie keine Ahnung von Python – geschweige denn von Frontendentwicklung im Allgemeinen – habe, aber ich musste ganz schön kämpfen, bis aus den ersten Versuchen…

Bild_20

…eine halbwegs brauchbare (wenn auch nicht besonders schöne) Oberfläche geworden ist. Mit dem Befehl „sudo python3 ./fmp.py“ lässt sich die Anwendung aufrufen. So kann man bequem per Knopfdruck eine MIDI-Datei auswählen, abspielen, stoppen oder das System herunterfahren.

Bild_21

Mit der Erstellung einer „.desktop-Datei“ können wir uns eine Verknüpfung zu unserer Oberfläche auf dem Desktop anlegen. Ein Eintrag in der Datei „autostart“ sorgt dafür, dass das Programm direkt nach dem Startvorgang des Raspberry automatisch geöffnet wird.

Bild_22

Schon ganz cool, aber noch besser wäre es, wenn man gar keine Maus und Tastatur sowie einen per HDMI angeschlossenen Bildschirm bräuchte. Auch hierfür gibt es eine pfiffige Lösung. Dieser 3,5 Zoll kleine Touchscreen wird ausschließlich über die GPIO-Pins des Raspberry Pi betrieben und kommt mit einem extra dafür geeigneten Gehäuse daher, in welches der Mini-PC samt Display genau hineinpassen. Echt clever! 🙂

Bild_23

An und für sich wird das Display einfach nur auf den Raspberry aufgesteckt. Blöd nur, dass in unserem Fall bereits die leider etwas zu hoch herausragenden Dupont-Kabel zum Anschluss des Diskettenlaufwerks an den GPIO-Pins stecken. Aber wo ein Wille ist, da ist auch ein Weg. Bei der Schlachtung des defekten RAID-Systems (siehe Artikel 123) ist ein Flachbandkabel übriggeblieben, welches zufälligerweise – nachdem wir es auf einer Seite etwas abfräsen – genau auf die Pins passt und ideal neben der Buchsenleiste des Touchscreens Platz findet. Glück muss man haben! 🙂

Bild_24

Die andere Seite des Flachbandkabels lässt sich dann mit weiteren Dupont-Kabeln am Diskettenlaufwerk anschließen. Ein letztes Problem gibt es aber noch: Leider benötigt der Touchscreen neben diversen GPIO-Pins auch beide 5 Volt Pins, d.h. wir müssen die Leitung zum Betrieb des Diskettenlaufwerks an einer anderen Stelle abgreifen. Hier bietet sich z.B. die Unterseite der auf dem Raspberry verlöteten Stiftleiste an. Ein Kabel ist schnell verlötet. Da die Ecken des Raspberrys abgerundet sind, können wir das Kabel gerade so an der Gehäuseecke nach oben zu den restlichen Leitungen legen.

Bild_25

Jetzt wird es Zeit, das Gehäuse zusammenzubauen. Die Dupont-Kabel können recht elegant durch den kleinen Schlitz im Plastikgehäuse (welcher eigentlich zum Einsehen der auf dem Pi verlöteten LEDs gedacht ist) nach außen geführt werden. Da ich keine passenden Kabel zur Hand hatte, habe ich das Laufwerk mit dem Raspberry über eine etwas improvisierte Stiftleiste verbunden. Nicht optimal, aber zum Testen reicht das! 😉

Bild_26

Damit der Mini-PC das Display auch erkennt, müssen wir den dafür benötigten Treiber herunterladen und installieren.

Bild_27

Nach einem Neustart wird dann tatsächlich kein Bild mehr über HDMI ausgegeben, dafür aber auf dem kleinen Touchscreen:

Bild_28

Leider musste ich die grafische Oberfläche (bzw. das Python-Skript dahinter) nochmal anpassen, weil die gewählte ComboBox (das Menü zur Auswahl einer MIDI-Datei) nicht scrollbar ist und so auf dem kleinen Display nicht richtig angezeigt wird. So ein Mist! 😀

Bild_29

Der Ärger darüber ist aber schnell vergessen, denn tatsächlich ist unser „Mini Floppy Midi Player“ jetzt fertig. Um das Gerät einfacher ein- und ausschalten zu können, habe ich noch für 3€ ein USB-Kabel mit Schalter, welches zwischen Netzteil und dem PC gesteckt wird, gekauft. Mit einem einfachen, schnell aus Holz zusammengebastelten Gehäuse sieht das Ding irgendwie richtig abgefahren aus! 😀

Bild_30

Aber hey – es funktioniert. Und mit einem Touchpen lässt sich der Mini Floppy Midi Player auch ganz bequem bedienen. Erfolg! 🙂

Not so fun Fact: Natürlich ist wieder deutlich mehr Zeit in das vermeintliche „Wochenend-Projekt“ geflossen, als ich es mir (im Prolog) vorgestellt hatte. Einerseits ist das nicht überraschend, wenn man bedenkt, dass man einfach nicht immer alle Teile parat hat und andererseits funktioniert nur selten etwas auf Anhieb. Die Kunst ist es, sich von solchen Rückschlägen nicht demotivieren zu lassen. Am Ende vom Tag hat man – auch wenn alles schief geht – meist trotzdem einiges gelernt! 🙂

Bild_31

Auf Bildern lässt sich natürlich nicht besonders gut nachvollziehen, wie das Ding funktioniert, darum habe ich ausnahmsweise mal ein Video erstellt. Keine Angst, das wird nicht zur Gewohnheit! 😛

https://www.youtube.com/watch?v=w-Dw4-MZrzA

In diesem Sinne – bis die Tage, ciao!

Kommentar verfassen