Remember the famous floppy drives? They’re back… with multiplied force (yes, THAT „force”) and some friends!
I have bought some more drives in order to expand the previous project back in 2012, which spent four years in a carton box. Together with new floppy drives, some more hardware has arrived: hard disk and optical scanners. Now I have the whole computer hardware orchestra – 64 floppy drives, 8 hard disks and 2 scanners – The Floppotron.
How does it work? The principle is simple. Every device with an electric motor is able to generate a sound. Scanners and floppy drives use stepper motors to move the head with sensors which scans the image or performs read/write operations on a magnetic disk. The sound generated by a motor depends on driving speed. The higher the frequency, the greater the pitch. Hard disks use a magnet and a coil to tilt the head. When voltage is supplied for long enough, the head speeds up and hits the bound making the „drum hit” sound. The disk head coil can also be used as a speaker to play tones or even music, but… that would be too easy and too obvious.
Every column of 8 floppy drives is connected to one 8-channel controller built on ATMega16 microcontroller. One controller acts as one voice with envelope simulation – the higher the volume, the more drives are playing. This allows to make ADSR-like shape and simulate a musical instrument, like a piano (exponential decay) or string instrument (sine, „vibrato”). The boards which were made a few years ago, were designed as a stand-alone „players” with optional USB-to-UART bridge and was not intended to be chained. My goal was to re-use old stuff and get the job done as fast as possible, so I used the on-board ISP (which in fact is a SPI interface) connector to link 8 drivers in a SPI chain. Long SPI chain with unidirectional communication is not an example good and reliable design, but it did not require any hardware modification and took a minute to build a controller network, so let’s call it… good enough for this kind of project.
Scanner and disk head controllers share the same base with floppy controllers, but have a different „instrument interface”. For driving the coils, I used 2 push-pull outputs (H-bridge) built with discrete SMD MOSFETs. Scanner head controllers were built using of-the-shelf boards – an Arduino Uno (firmware also builds for ATMega328 using AVR-GCC / Atmel Studio; none of this Arduino crappy software and libraries was used) and L298 breakout to save time needed to draw and etch the boards. PC interface (another Arduino board) receives the data over UART (USB-UART), buffers the messages and keeps the timings while passing packets to „musical instruments” over SPI interface, so a Windows hiccup will not affect the playback. It can also be driven by anything else like Raspberry Pi, Android smartphone (with USB-UART or UART-over-Bluetooth adapter) or another microcontroller.
Host application was written in Python 2.7. I wrote it mostly on some boring lectures when I was still studying at the university, so it’s a one big mess, but… at least it does the job. It parses the simple language used for writing note sequences arranged in tracks tied to a specific controller / channel and merges those parallel tracks into one command list which is transferred over COM port. It can also partially generate „song script” from MIDI file which speeds up the „song porting” process.