Have any old-school floppy drives lying around? Get hacking! Transform them into an electronic orchestra!!
Being one of the worlds most popular DIY tech projects, Musical Floppy Drives are nothing new. However, myFloppyDriveOrchestra includes several unique features, which separate it from the crowd.
- 1. FPGA - by implementing the drive control on the myRIO's integrated FPGA, I have effectively created a x16 core processor! I have a "core" dedicated to each drive. Although the FPGA allows me to share clocks and synchronisation between each "core", I can control all 16 drives individually and truly in parallel!
- Wireless Interface - No PC is required to play the orchestra. Instead, I implemented a GUI (which allows users to transpose tracks, select songs, monitor processor usage etc), from any iPad or Android tablet.
- Daft Punk Helmet - Using a second myRIO embedded controller, we aren't only playing a daft punk song... but we are also controlling a Daft Punk-esque electronic power helmet!
The Project Overview.
This project uses one myRIO embedded controller and a series of floppy disk drives. The myRIO effectively plays the drives like musical instruments, by stepping the disk drive's integrated motors at specific frequencies.
The first version was a quartet but since then I have scaled the project from a quartet into a 16-piece orchestra!
By referencing the following table, I developed a LabVIEW VI (which runs on the myRIOs real-time processor) that converts a musical note (such as a C4) in to a wave frequency. For example, the note C4 would be a frequency of 261.63 Hz. This frequency value is then passed to the myRIOs on-board FPGA, which generates a digital pulse train used to control the floppy drive motors. To generate the pulse train, I used LabVIEW to create a simple FPGA personality that inverts the digital true/false within a loop, but I dynamically set the loop timing to be half the period of the requested frequency value.
Note: the period has to be halved, because one loop cycle would be true and the next cycle would be false. Therefore, two loop cycles is equal to one wave period. See the formula.
The next task is to change the motor direction when the floppy drive's read head reaches the end or the start of the disk. To ensure that the myRIO never tries to drive the read head beyond the start/end of the disk, I implimented a custom counter on the FPGA, to constantly monitor the position of the read head and invert its direction as appropriat
Step 1: The History Lesson.
loppy disks are made from a thin piece of plastic coated with a ferromagnetic material, which is magnetised to retain data. More specifically, the disk is divided into 80 data-tracks arranged in concentric circles, like the rings of a tree.
Therefore the floppy drive's integrated motors are designed to step the read head through each of these 80 tracks. Using this information, I created 16 custom counters on the myRIO FPGA (one for each floppy-drive) to ensure that the direction of the motor changed when it reached the start or end of the disk. So, for values 0-79 the read head will go forward (writing a digital true on the direction line of the floppy drive), then for 80-159 the read head will go back (a digital false to the direction line).
The ability to create/duplicate many parallel tasks is one of the major benefits of FPGA. By using LabVIEW FPGA, I only had to write ONE of the customer counters for ONE of the drives - I could (literally) copy 'n' paste the code to take control of the remaining 15 drives. Each duplicated counter would carve out its own circuit within the FPGA - allowing each counter to run in independently and in parallel.
Now that the drives can be sent a tonal frequency and produce a musical note, the next part of the project was to teach the myRIO some tunes!!
Step 2: How to Make It
Midi Reader and USB Writer.
To teach the floppy drives to sing, I chose to use MIDI files. To quote wikipedia: "A MIDI file is not a recording of actual music. Rather, it is a spreadsheet-like set of instructions". A MIDI file has up to 15 tracks of messsges, each representing a separate instrument within the song (e.g. piano, syth, gutiar, bass, etc). Each MIDI message includes channel number, the note to be played, note start time and note duration. These messages can then be turned into arrays of notes for each channel on the myRIOs realtime processor, which can then be passed down to the FPGA. In order to make the device easy to use I wanted to have the myRIO read it's playable songs from a USB memery stick plugged into the USB port.
The wiring requirements of myFloppyDriveOrchestra are surprisingly simiple, because each drive needs just two digital lines - one for step and one for direction. You also need to short the drive select pins and conected the ground pins back to DIO ground of the myRIO. The following image illastrates how to wire a "quartet" of floppydrives to the myRIOs integrated MSP Connector. To control a full 16-piece orchestra, you need to replicate this wiring on two MXP connectors on the reverse side fo the myRIO.
Step 3: The Graphical User Interface.
Now that the embedded software (both real time and FPGA) is developed and the hardware wired, there is one final piece of the puzzle... the GUI (graphical user interface). To control myFloppyDriveQuartet (select the music track, start/stop the floppy drives, transpose music notes etc), I created two user interface options.
- PC/Laptop Interface: a simple LabVIEW VI which communicates data from a front panel to a library of network-published shared variables hosted on the myRIO
- Tablet Interface: I created a portable GUI for use with Apple iPad and Android tablets, using the free NI Data Dashboard app. This was a very simple process that required no programming what so ever. As the Data Dashboard GUI connects to the same network-published shared variables, you can use the PC or Tablet GUI without modifying the code running on the myRIO.
The Steps to Execute the Code.
Download the attached soucecode and wire up the drives (as described above)connect your myRIO to the computer and powerRun the RT VIRun the host VIChoose a song and click play.Once that is working, you can then turn that in start-up VI and use the datadash board app to select music with out a computer connected.