Floppy-Musik mit Arduino – inkl. Midi-Unterstützung

Eine kleine Bastelei zwischendurch: Floppy-Music-Drive!

Inspiriert durch dieses Video und diese bei den Pin-Belegungen etwas unklare Anleitung entstand hier nun meine Anleitung.

Benötigt werden:

Material

  1. ein oder mehrere 3,5″ Floppy-Laufwerke
  2. ein Arduino (Uno, Nano…)
  3. eine 5 Volt-Stromversorgung
  4. ein paar Kabel (zum Stecken oder Anlöten)

Software

  1. Moppy von Sammy1Am
  2. TimerOne Bibliothek für den Arduino

Die Hardware ist wie folgt zu „verkabeln“:

3,5″ Floppy Laufwerk(e) mit Blick auf die Rückseite. Die Nummern stellen die Pin-Nummern der Buchse dar. Die Stromversorgung links im Bild kann entweder über ein altes PC-Netzeil erfolgen oder einfach über eine andere beliebige 5 Volt-Stromquelle: rot = +5 Volt. scharz = Masse. Das gelbe Kabel (12 Volt) wird nicht benötigt!

floppyMK1800x600numeriert
3,5″ Floppy Laufwerk Pinbelegung

Verkabelung mit Arduino Uno:

3,5" Floppy Laufwerk verkabelt
3,5″ Floppy Laufwerk verkabelt

Wichtig:
Die Masse (GND) vom Arduino und vom Floppylaufwerk müssen miteinander verbunden werden! Sprich: Die Masse des Stromversorgung-Steckers des Laufwerks links im Bild (schwarzes Kabel) mit der Masse des Arduino (graues Kabel rechts im Bild). Ansonsten erkennt die Floppy die Signale nicht!

Außerdem müssen Pin 12 und 13 miteinander verbunden werden. Pin 12 ist nämlich „Drive Select“. Er muss mit Masse – also irgendeinem Pin der Reihe unten – verbunden werden, damit das Laufwerk überhaupt angesprochen werden kann. Wenn man noch einen Jumper herum liegen hat, kann man auch einfach Pin 12 und 11 verbinden. Das ist völlig egal.

Pro Midi-Stimme wird das Signal auf eine Floppy ausgegeben, es kann daher sein, dass sich beim Anschluss mehrerer Floppies nicht immer jeder Schrittmotor / Lesekopf bewegt.

Zum Anschluss mehrerer Laufwerke einfach die Digital-Pins des Arduinos der Reihe nach anschließen. Wie oben abgebildet. Also z.B.:
Floppy 1 an Pin 2 und 3
Floppy 2 an Pin 4 und 5
Floppy 3 an Pin 6 und 7
usw…

Die Pins an der Floppy sind immer Pin 20 und 18! Die analogen Pins des Arduinos können auch verwendet werden, damit käme man dann auf neun Laufwerke für den Arduino Uno.

Nun den Arduino mit der Moppy Software flashen (uploaden) und per USB am Mac / PC angeschlossen lassen – denn die Musik wird als Midi-Datei am Computer geladen und seriell über den USB-Port an den Arduino live übertragen und abgespielt!

Für die Software haltet ihr euch am besten an die Installationsanleitung der Software. Ich musste unter Mac OS X die Java NetBeans IDE zum compilen nutzen. An der Konsole allein bekam ich es nicht kompiliert. Es fehlte die Swing-Library und da ich mit Java bisher nichts gemacht habe, hielt ich mich bequem an die GUI.

Das Starten der MoppyDesk Software lief daher unter Mac OS X nicht in der IDE, da hier Windows-Pfade zur Laufzeit eingetragen waren. Wichtig ist, dass beim Aufruf die serielle Bibliothek librxtxserial.lib beim Programmstart gefunden wird. Ich habe es auf der Konsole im Verzeichnis dist wie folgt aufgerufen:

java -jar MoppyDesk.jar -Djava.library.path=/pfad/zur/seriellen/bibliothek/

Das war’s. Bei mir funktionierte die Tetris-Melodie zum Testen recht gut, die beim Moppy-Projekt mitgeliefert wird (Verzeichnis Java/MoppyDesk/samplesongs).

Achtung:
Kopiert man gemäß README unter Mac OS X die Datei librxtxserial.lib nach /Library/Java/Extensions, so funktioniert die Arduino-IDE nicht mehr! Siehe Hinweis hier!

Ach ja, und bekommt ihr eine Fehlermeldung mit „…no matching architecture…“ beim Start der Applikation auf dem Mac, so habt ihr – modern wie es sich gehört – ein 64 Bit-System. Aber die bei Moppy mitgelieferte serielle Bibliothek ist nicht für 64 Bit compiled. Als Lösung gibt es hier die passende Bibliothek.

Viel Spaß beim Bastelen!

PS.: Jetzt, wo meine Anleitung fertig ist, habe ich noch diese prima Video-Anleitung gefunden, in der das Ganze auch sehr gut erklärt wird.

 

26 Gedanken zu „Floppy-Musik mit Arduino – inkl. Midi-Unterstützung“

  1. Hi Alfred, sorry für die späte Antwort. Pin 12 ist „Drive Select“. Er muss mit Masse – also irgendeinem Pin der Reihe unten – verbunden werden, damit das Laufwerk überhaupt angesprochen werden kann. Text wie gleich oben korrigiert.

  2. Hi ich habe auch nochmal eine Frage. Also in diesem Tutorial auf YouTube verbindet er den Ground ( z.b. PIN 19) nicht mit dem Ground des Steckers von der Stromversorgung. Geht das trotzdem wenn ichs nicht mache…?!

    MFG

    1. Hi André,

      kann klappen, muss es aber nicht. Wenn man zwei verschiedene Stromversorgung hat (eine beim Arduino und eine für die Floppy), müssen („sollten“) die Leitungen immer verbunden werden, damit die Masse den füglichen Bezugspunkt für die HIGH-LOW-Pegel hat.

      Wenn es die gleiche Stromversorgung ist, sind die Massen automatisch miteinander verbunden. :-)

      Kaputt gehen kann beim Weglassen der Verbindung nichts, es kann höchstens sein, dass die Floppy die HIGH-Signale des Arduino nicht erkennt und es nicht funktioniert.

    1. ich würde immer separate Stromversorgung nehmen. Der Regler auf dem Arduino-Board liefert nur ca. 500mA Strom. Und da ich nicht weiß, wie viele Laufwerke angeschlossen werden und wie viel diese denn an Strom benötigen zur Ansteuerung, gehst du damit auf Nummer sicher. Ansonsten könnte das Arduino-Board Schaden nehmen.

      1. Danke für die schnelle antwort!

        Leider bekomme ich die kiste trotzdem nicht zum laufen….wenn ich in der moppy software connecten versuche stürzt das programm ab :(

    2. Hi,
      sorry dass ich auch noch antworte, aber ich hab’s mal mit der Stromquelle vom Arduino Uno bzw. Arduino Mega 2560 probiert, und zwar als Erstes, da ich erstmal noch keine andere Stromquelle hatte.
      Also ein Laufwerk geht damit, aber wenn man 2 damit benutzt, gehen eher die Laufwerke nicht mehr bzw. können sie keine „richtigen“ Klänge mehr machen, da der Lese- und Schreibkopf sich nicht mehr hin- und herbewegen kann, anstatt dass der Arduino Schaden nimmt. Mehr als 2 Laufwerke hab ich allerdings nicht und konnte somit auch leider nicht probieren, was damit passieren würde.
      Also hatte ich für das andere Laufwerk den anderen Arduino als Stromquelle benutzt (eig. meinen kaputten Arduino Uno, da dort der Microcontroller nicht mehr funktioniert), wodurch ich allerdings wieder das nächste Problem hatte. Die Lösung dazu hatte ich am nächsten oder übernächsten Tag aber auch gefunden.
      Und zwar hatte ich am 1. Laufwerk nur Pin 12 mit einem ungeraden Pin verbunden (mit einem Jumper), weil ich mich gefragt hatte, wozu man die ungeraden Pins überhaupt mit der Masse des Arduinos verbinden muss, denn es lief auch einfach so, aber dann lief das 2. Laufwerk mit der Stromquelle vom kaputten Arduino Uno nicht. Aber danach wusste ich, woran es liegt.
      Um die Signale des Arduinos empfangen zu können, muss das Laufwerk von ihm auch „massiert“ werden, und da das 1. Laufwerk den Strom vom heilen Arduino Uno (bzw. Arduino Mega 2560, wenn ich den mal benutze) kriegt, kann man sich die Verbindung zwischen ungeradem Pin und Masse des selben Arduinos auch sparen. Das ist eben der Vorteil, wenn man den Strom vom selben Arduino nimmt. Und wenn das Laufwerk eine fremde Stromquelle hat, ist es eig. auch egal, welcher ungerade Pin mit der Masse des Signalgebers (Arduino) verbunden wird, denn die ungeraden Pins sind ja eig. „alle“ miteinander verbunden. Bei meinem 2. Laufwerk geht sorag Pin 19 nicht, Pin 17 hat glaube ich einen Wackelkontakt, obwohl diese beiden im Tutorial angezeigt werden, und mit allen anderen ungeraden Pins läuft’s super.

      Zusammenfassung: Du kannst also für jedes Laufwerk auch einen Arduino als Stromquelle benutzen, und wenn’s der Signalgeber ist, musst du von seinem Laufwerk auch keinen ungeraden Pin an seine Masse anschließen. Ich hab’s zwar noch nicht probiert, aber da man an einen Arduino Uno auch ein Netzteil mit bis zu 12V anschließen kann, könnte es vlt. sein, dass man ihn auch für 2 Laufwerke benutzen kann, aber ich glaube eher nicht, dass das geht, da dort ja eh nur 5V rauskommen (außer wenn dann dort auch mehr Ampere rauskommen, als wenn er über USB Strom kriegt).

  3. habe den arduino noch laufen gehabt mit software…..dann kann moppy nicht über die serielle verbindung auf den arduino zugreifen ;)

  4. Ich habe mir ein Floppylaufwerk besorgt leider musste ich feststellen das es keinen Pin 17 und 19 gibt.Dort ist nur ein sehr kleines Loch wo aber kein Draht reinpasst.
    Kann ich die Masse irgendwo anders anschließen oder gibt es eine andere Lösung für dieses Problem.

  5. Ich habe eine frage ich habe alles so verbunden wie im video beschrieben und die Timer One libary auf den arduino geladen und auch sonst alles so wie im video erklärt gemacht.Leider bekommt meine Floppy kein Signal könnte es was damit zu tun haben das ich bei NetBeans folgende Meldung erhalte:Mär 05, 2018 10:14:34 PM java.util.prefs.WindowsPreferences
    WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(…) returned error code 5.

  6. ok habe das problem alleine gelöst bekommen bekomme aber trozdem kein signal auf meine floppy habe nur den pin 1 als gnd.connecten kann ich es kommt nur nix wenn ich versuche eine midi datei abzuspielen

  7. Bei mir ist ein Fehler bei Netbeans von Anfang an aufgetreten.
    Wenn ich das Programm öffne kommt ein Fenster raus wo steht das es keine „Swing-app-framework“ vorhanden ist und wenn ich versuche die Fehlende Libary herunterzuladen kommt ein Fehler das irgendwas mit Proxy nicht stimmt.
    Ich habe auch versucht es Manuell herunterzuladen und installieren, funktioniert leider auch nicht.

    Wenn ich es ignoriere und und Versuche MoppyDesk zu Starten, geht das auch wieder nicht, weil die „MoppyUI“ fehlerhaft ist.
    Höchstwahrscheinlich liegt es daran das „Import org.jdesktop.application usw…. “ nucht vorhanden ist.
    Dabei kriege ich die Libary auch nicht Installiert.

    Weiß nicht was ich machen soll, bräuchte wirklich dringend Hilfe.

  8. Hiermit klappt es, was kann ich aber machen das nicht nur ein Paar Diskettenlaufwerke spielen sondern alle ?
    Und es ist recht leise, kann man sowas auch lauter machen ?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert