Instructables
Picture of How to Make Musical Floppy Drives






My brother posted a video about this on facebook almost a year ago. Some old floppy drives playing Bach's masterpiece Toccata & Fugue and it got me really interested. So I read about it when the author posted a how-to on his blog and did a couple of tweaking using SammyIAm's Musical Floppy program when the project gained a lot of attention.

WHAT YOU NEED

1) Arduino - Ideally, you need the Arduino UNO but any Arduino would work. You just need to tweak something in the program with the pin assignments. In this mini-project however, I used Duemilanove. It works almost accurately as Arduino UNO and I didn't have to tweak anything.

2) Floppy Drives/Disks - Any floppy drive would work but it's a lot easier to use the 34-pin simply because it's common. Other than that, you would only be needing to determine 3 pins from your floppy. Pin assignments are available online, particularly here. Furthermore, I was trying to acquire a 5.25 floppy drive but to no avail, and ebay sells them around $20 so I said never mind about that. As a result, this project is composed only of the 3.25 floppy disk drives. You also need some floppy diskettes for this project.

3) Power Supply - Again, it depends on you. You can use any 5-volt power supply available but since an ATX power supply is just lying around at home, I conveniently used it instead.

4) CAT5 UTP Cable - Only because of the wires. I want my wires to be color-coded.

5) Breadboard - If you want a solderless-free project.

6) Soldering Iron/Lead - For soldering the pins you would need to connect your CAT5 UTP cable to, but if you still have the flat ribbon cable then good for you. Might as well use that to make it easier.

7) Cutter, Phillips/Flathead screwdrivers - For dismantling purposes.
 
Remove these adsRemove these ads by Signing Up

Step 1: Prepare your power supply.

Again, it depends on you. You can use any 5-volt power supply available but since an ATX power supply is just lying around the house, it would be pretty convenient to use it here. However, if you just have the power supply (without a motherboard), to activate it you need to short two wires, BLACK and GREEN as shown on the image. Connect these two wires and your power supply is then activated.

Step 2: Determine the needed pins for your floppy drives.

Picture of Determine the needed pins for your floppy drives.
Play.bmp
idc34m 2.jpg
GEDC3747.JPG
Like what I said earlier, you only need to determine 3 pins to make the floppy drive sing. If you look at the back of your floppy drive you would see these 34 pins. Just check on the image to determine which is pin 1 and so on. The top pins are the even pins the bottom pins are the odd pins which is the ground. The even-numbered pins are activated by grounding them. Basically, computers have up to two floppy drives A and B. Doesn't really matter which drive you connect your wires to. If you want to set your floppy drive to drive B, then connect wires to pins 12, 11 for the ground. If you want to set your floppy drive to drive A, then connect wires to pins 14, 13 for the ground. But to avoid further complications, just select drive B, pin 12 and 11.

Another pin that we are interested in is the direction pin 18, 17 for the ground. Direction pin determines which direction to move, forward or backward. This movement is actually the one causing the low-note and high-note sound coming out of the floppy drive.

Finally, the last pins we need to connect wires to is the step pin 20, 19 for the ground which basically activates the stepper motor to move.

NOTE: If you still have the flat ribbon cable then I suggest that you use it instead of soldering wires directly to the pins of your floppy drive. Soldering them could fry the boards of your floppy but since I don't have any flat ribbon cables and connector I soldered mine. Solder at your own risk.

Step 3: Test your floppy drives.

Picture of Test your floppy drives.
GEDC3756.JPG
Connect your floppy to your power supply and test the stepper motor. Notice that if you connect your floppy drive to the power supply nothing is happening, that is because you need to connect pins 11 and 12 to activate it. To activate your floppy, you need to permanently connect the drive select pins 11 and 12, so you can go on twist those wires or solder them. You can easily determine if you have the wires connected. Once you connect the wires attached to pins 11 and 12, the light of the floppy drive should turn on.

Next thing you need to do is check on the direction and step pins. Connecting the green wires together pins 17 and 18 would make your stepper move forward. To activate the stepper motor you just need to tap the blue wires which is connected to the step pins. Moving the stepper motor backward, all you need to do is disconnect your green wires then activate your stepper by tapping the blue wires.

Step 4: Connect your floppy to your Arduino.

Connect pins 11 and 12 (Drive Select) to activate your floppy drive. Connect pins 17 and 19 (ground pins for the direction and step of your floppy drive) to the ground of your Arduino. Connect direction pin 18 to pin 3 and step pin 20 to pin 2 of your Arduino.

For the second drive, all you need to do is connect the direction pin 18 to pin 5 and step pin 20 to pin 4. Third drive's pin 18 to pin 7 and step pin 20 to pin 6 and so on...

Step 5: Prepare the sofwares.

WHAT YOU NEED

1) Arduino Software - You can download the software on their website.
2) Timer1 - You can download the following here. Once done with the download, you need to copy this to the library folder under Arduino.
3) JDK 7u4 with NetBeans 7.1.2 - You can download the following here.
4) Moppy Software (Java/Arduino Code) - Program developed by SammyIAm. You can check it out here.
5) RXTXcomm Serial Driver - Download the following here.

Step 6: Establish a connection to your Arduino.

Picture of Establish a connection to your Arduino.
Once you're done downloading and installing everything, especially the Arduino software, Java with Netbeans, establish a communication between your Arduino and computer. You may also need to set-up everything on the hardware side. Connect your floppy drives and power supply.

Before copying the code, make sure that the Timer1 file is saved to the library folder of your Arduino.

Step 7: Open NetBeans.

Picture of Open NetBeans.
Pic 03.jpg
Open your NetBeans and load-up the MoppyDesk project developed by SammyIAm. You can choose to open it through his github or just download the file below. Just make sure that once you download the following file, copy the file to the NetBeansProjects folder usually located at My Documents for Windows. Once you have the MoppyDesk project open, run it by clicking on the green play button. This is where you would encounter the RXTX problem, if not then good for you a new window should appear. However, if you do encounter it, download the RXTXcomm,jar and the rxtxParallel.dll / rxtxSerial.dll files via this website. After downloading, just be sure that you copy the following to its respective folders:

RXTXcomm.jar goes in \jre\lib\ext (under java)
rxtxSerial.dll goes in \jre\bin (under java)

If you still encounter the problem, just message me and we'll try to sort it out or you could just google rxtx issues. I'm sure you'll find solutions on this online.

If all goes well, a new window will appear. The MoppyDesk window will then ask for the Arduino port. Just choose the correct port for your Arduino, load the midi file and hit on START.

Congratulations!!! You have now a musical floppy...

Some tips on midi file:

Choose the simplest midi file as possible. It would be ideal to choose something which is moderate at speed and something that does not sustain a note for too long.

Also, you may want to remove the cover of your floppy drives to make it a bit louder. Some latest manufactured floppy drives designed to make less noise, so if you encounter such, I suggest that you remove the cover or set-up a microphone. You may also choose to edit the audio and amplify it a bit and reducing the background noise helps too.
1-40 of 53Next »
nik.man.543 days ago

are you sure about the connections you wrote in the article? I connected many times and I've tried avery combination, the arduino code compiled, if i manually connect the drive wire the servo move a bit but if i connect everything to the arduino nothing moves.

The motor only briefly spins when I connect the power, then stops. If I sit there, plugging, and unplugging the power, it will *kind of* work, but I have no idea what's going on.

It properly resets the drive when you plug it in, but it doesn't play music.

Aha! It seems to be a problem with the direction set pin. It will work in one direction, but it doesn't flip.

I have no idea why I can't get my drive to reverse the motor.

Never mind, after some trial and error, I figured it out.

I have the same problem, how did you solve it??

I shifted all the wires to the left.

hey i keep getting this message, no matter what i do, i am not quite sure what i am doing wrong, or what i have to do, to get this right.
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)

at java.lang.Runtime.loadLibrary0(Runtime.java:849)

at java.lang.System.loadLibrary(System.java:1088)

at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:123)

at moppydesk.MoppyMainWindow.updateComSelectionMenu(MoppyMainWindow.java:55)

at moppydesk.MoppyMainWindow.<init>(MoppyMainWindow.java:43)

at moppydesk.MoppyUI.startup(MoppyUI.java:19)

at org.jdesktop.application.Application$1.run(Application.java:171)

at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)

at java.awt.EventQueue.access$200(EventQueue.java:103)

at java.awt.EventQueue$3.run(EventQueue.java:694)

at java.awt.EventQueue$3.run(EventQueue.java:692)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

n1cod3mus made it!2 months ago
FK6N132HZ6T6X91.LARGE.jpg
aratk9243 months ago

I get the window and all, but it wont let me connect to my uno, i had used a micro before but that was unfortunately lost in an accident and now it wont work with my uno. If it helps i'm running windows 8 64 bit with the 64 bit environment and everything. When i try to connect it gives me "gnu.io.NoSuchPortException" And when i look back at the output i get

"ant -f C:\\Users\\Alex\\Documents\\NetBeansProjects\\Moppy-moppy-advanced\\Java\\MoppyDesk -Dnb.internal.action.name=run run

init:

Deleting: C:\Users\Alex\Documents\NetBeansProjects\Moppy-moppy-advanced\Java\MoppyDesk\build\built-jar.properties

deps-jar:

Updating property file: C:\Users\Alex\Documents\NetBeansProjects\Moppy-moppy-advanced\Java\MoppyDesk\build\built-jar.properties

compile:

run:

Aug 19, 2014 2:25:22 PM java.util.prefs.WindowsPreferences <init>

WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.

Aug 19, 2014 2:25:27 PM moppydesk.ui.MoppyControlWindow connect

SEVERE: null

gnu.io.NoSuchPortException

at gnu.io.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:269)

at moppydesk.outputs.MoppyCOMBridge.<init>(MoppyCOMBridge.java:29)

at moppydesk.ui.MoppyControlWindow.initializeReceivers(MoppyControlWindow.java:254)

at moppydesk.ui.MoppyControlWindow.connect(MoppyControlWindow.java:201)

at moppydesk.ui.MoppyControlWindow.connectButtonActionPerformed(MoppyControlWindow.java:284)

at moppydesk.ui.MoppyControlWindow.access$100(MoppyControlWindow.java:29)

at moppydesk.ui.MoppyControlWindow$2.actionPerformed(MoppyControlWindow.java:128)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)

at java.awt.Component.processMouseEvent(Component.java:6516)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)

at java.awt.Component.processEvent(Component.java:6281)

at java.awt.Container.processEvent(Container.java:2229)

at java.awt.Component.dispatchEventImpl(Component.java:4872)

at java.awt.Container.dispatchEventImpl(Container.java:2287)

at java.awt.Component.dispatchEvent(Component.java:4698)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)

at java.awt.Container.dispatchEventImpl(Container.java:2273)

at java.awt.Window.dispatchEventImpl(Window.java:2719)

at java.awt.Component.dispatchEvent(Component.java:4698)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)

at java.awt.EventQueue.access$200(EventQueue.java:103)

at java.awt.EventQueue$3.run(EventQueue.java:694)

at java.awt.EventQueue$3.run(EventQueue.java:692)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)

at java.awt.EventQueue$4.run(EventQueue.java:708)

at java.awt.EventQueue$4.run(EventQueue.java:706)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

BUILD SUCCESSFUL (total time: 15 seconds)" It even recognizes that my uno is on com8 and even if i change the com port it sees the new one but wont connect, I've even re-installed everything and it still wont work. Any suggestions?

Alastor1365 months ago

For all the floppy drives I was able to test, the Drive B Enable pins were 12 and 13, instead of 12 and 11. Not sure why!

compukit1 year ago
How many drives you can on an adruino to close and which pins do you have to use.
Thanks in advance.

You have to count your remaining pins

Analogue-Chick (author)  compukit1 year ago
Depends on the model of Arduino that you use, as for UNO, since you will be needing two pins to control a single floppy drive, you can connect up to 8 drives maximum.
cool thats the max drives i gone use :).
thnx :)
Analogue-Chick (author)  compukit1 year ago
Congrats! Hope you post your version here on instructables too. :)
i dont have everyting bad i can upload some imige from it :) hope you like it and i have to solder 2 drive the 11 e 12 pin bekose i forgot somting famalie say when i was a chld (all the botom pins are ground) and the 2 drive dont have te pin 11 bad thy workd :)
20130526_000557.jpg20130526_000322.jpg
hire is the schematiks i drow for the print (whel i modefide it after i have to repear a little mistake i maket ) now it is posibel to use a kabel that is strait or whit a twist in it.
voorbeeld music floppy drive print.bmp.bmp
Analogue-Chick (author)  compukit1 year ago
Thank you for this supplemental data. Will help many people who would want to try this out! Wish you could post your version of Instructables.
Analogue-Chick (author)  compukit1 year ago
Yay! Congrats!!! :D
D-I-O-N10 months ago

I got the rxtx error, but i don't understand how to get the files from the website into my own PC. I tried all kinds of stuff but I don't get how Github works, do you have to download the files??

Please help!!! ;)

greynolds610 months ago
I've got this successfully working with 6 floppy drives. No soldering required, just use jumper wires and a breadboard.

If anybody wants to check out my circuit diagram then it's here:
http://easyeda.com/6oGASrJDVd

It's probably not very good but feel free to improve it. I do believe it's pretty much correct. The best thing would be to make a proper edge connector soldered into place, rather than just pushed together.

YYMV however though because of the floppy drive types - some are very quiet!

The java software I've found it quite flaky and often crashes. Also more complicated midis don't even have a chance.
cadder1 year ago
can we program the microprocessor with PIC16F877 ?
najc12251 year ago
cant seam to download the moppy software any suggestions?
What would need to be changed to accommodate 4 floppy drives? (How would i get another pin to have output) I connected it to the next pin in line, and it didn't seem to work... I take it as probably because the code doesn't have it written for another pin? How would this be changed?
I made it with four, and had the extra connected to one of the other drives (Two floppies, same output) http://www.youtube.com/watch?v=VGtxO9Bie0k But i would love to have four floppy drives, with four different outputs...
ambrewer1 year ago
Would like to get this working, but despite plenty of googling around RXTX issues, I can't get Netbeans IDE to run the MoppyDesk due to a run time error:
"java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path"
Fixed as follows in Windows7 64bit: "copy rxtxSerial.dll into WINDOWS/system32"
ajv09871 year ago
So im using ribon cable and cat 5 ethernet. im confused because im hooked in to all the right pins but i cant get any of six different drive to step unless i get frustrated and i mash a big wire across the pins. this is frustrating
Analogue-Chick (author)  ajv09871 year ago
If you have a perfectly working floppy drive and you can't get it to step connected to your Arduino, try flipping the direction and step wires. Some floppy drives have their stepper motor in reverse, otherwise check on your connection as indicated in step 4. Good luck!
acuadras1 year ago
NetBeans is normal for a long afternoon to compile the MoppyDesk
compukit1 year ago
hi when i try to run the program in netbeans noting wil happen and i got this
ant -f C:\\Users\\game-laptop\\Downloads\\FD2U3TRH2MYKAEN\\MoppyDesk run
init:
Deleting: C:\Users\game-laptop\Downloads\FD2U3TRH2MYKAEN\MoppyDesk\build\built-jar.properties
deps-jar:
Updating property file: C:\Users\game-laptop\Downloads\FD2U3TRH2MYKAEN\MoppyDesk\build\built-jar.properties
compile:
run:
apr 29, 2013 11:44:05 AM java.util.prefs.WindowsPreferences
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:123)
at moppydesk.MoppyMainWindow.updateComSelectionMenu(MoppyMainWindow.java:55)
at moppydesk.MoppyMainWindow.(MoppyMainWindow.java:43)
at moppydesk.MoppyUI.startup(MoppyUI.java:19)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:697)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
how can i fix this
Analogue-Chick (author)  compukit1 year ago
Have you copied everything on the MoppyDesk.rar? You should copy everything, download the MoppyDesk.rar located at the bottom of this 'ible. Also, download this version of NetBeans, JDK 7u4 with NetBeans 7.1.2. Could also be some compatibility issue.
yes the program is now working only the flopy drivers dont turn if i coneckt pin 11 and 12.
so if i run te program the flopy drive dont do enny thing.
is it not posibel to use in stad of a floppy a harddisk bekose i have lost of ide and scusi disk hire dowing noting :)
thnx
agis681 year ago
wow really amazing and amusing....
I've been wanting to try this for a long time. Got it to work without any real problems. I used steppermotors instead of floppydrives and changed your code a bit so they won't change direction. Thanks for your very clear instructable!
Drewseph1 year ago
I got mine working perfectly a while back, thanks for the Instructable :)
Sadiek1 year ago
What if there is a pin at position 3? I've tested them as you instructed and they don't seem to work. Do you have any solution for this problem? The drives I tested that didn't have a pin at position 3 work fine, but with a pin at position 3 don't.
GlitchBob1 year ago
What's the best way to setup the breadboard so that the connections can go in to one area, and back out to the arduino, or at the very least all the grounding taken care of? I'm very much a n00b at this, although I've set up 5 (nearly 6) floppy drives thus far... I'd like to make use of the breadboard to clean up the mess of wiring.
1-40 of 53Next »