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.

Like the project? Here’s some another records.

I still have an annoying analog entry phone in my flat. It does not have the numeric keypad to type the passcode and enter the staircase. I am too lazy to open the block door with a key every time I come back home, but this can be solved easily. Of course I did not mean the replacement of the entry phone with a new, digital one – that would be too easy and too obvious. Here’s my quick weekend project – analog entry phone hack, which opens the door after ringing in the secret passcode consisting of short and long rings. Traditionally, I have added some useless functionality like PCM audio playback from the SD card to make it more fun. It can play some samples, e.g. from retro games, an Arnie movie quote or… a barking dog when the guest or postman calls.

The circuit is installed in the handset. It detects the call signal and simulates the button press with a relay switch if signal matches the programmed pattern. It is also connected to the microphone output and can play the audio files on guest call or passcode input. I have built this circuit in an hour using components I had around – ATMega328P microcontroller, universal soldering board, relay, 3,3V LDO regulator and some passives.

You can download the source code and schematic below. The whole project was made in a couple of hours, so the sources looks a little messy. The circuit does not provide proper isolation from the entry phone circuit, so if you are going to built it yourself, you might want to add some optoisolators.

  Pobierz plik:
  Rozmiar: 1.07 MB, pobrany 5583 razy.

After a long break I decided to reactivate the blog. This time I have a nnew, even more useless invention – an unusual bluetooth accesory.

Most of you probably use smartphones with touch screens, but some people still prefer classic mobile phones. Now you dan dial the numbers from your little notebook just like in the good, old days!

The device is based on Nordic Semiconductor nRF51422 chip (NRF51 DK board). It is recognized as a bluetooth keyboard, so no additional software is required. All you need is a phone with Bluetooth 4.0 Low Energy (BLE) support. The firmware is a modiffied HID keyboard example from the SDK, so it took me only about an hour to add a rotary dial support. The dial itself which generates the pulse dial signal was taken out of an old phone. The board could be powered from a 3V coin cell battery, but I have connected a large, flat, 4,5V battery because small coin batteries are not hipster enough!

You can get the source code below. NRF51 SDK 8.0.0 is required to build(available here). I have built it with Keil 5, but it should also work with ARM GCC or IAR compilers.

  Pobierz plik:
  Rozmiar: 3.65 MB, pobrany 698 razy.

It’s been awhile since my last post… Work, studies and other stuff.

Last weekend i was working on my MSc graduation project. I had to build a prototype of my circuit and unfortunately I ran out of copper laminate. I have found some old, low-quality leftovers with uneven copper layer. To improve the etching result I had to provide the constant flow of etching solution  (sodium persulfate) . I looked around my room for any items i could use and here it is! I’d like to introduce You my unique, great, wonderful, terrific, magnificent, superb, glorious, outstanding and amazing invention – a unique, great, wonderful, terrific, magnificent, superb, glorious, outstanding and amazing automatic PCB etching machine!

To build this extremely advanced device, I used an old CD-ROM drive and a strawberry ice-cream box. It must be a strawberry ice-cream. Not chocolate, vanilla, lemon or any shit, but strawberry – otherwise it just won’t work. The CD tray is controlled by one of my test boards with ATMega8 connected to drive’s eject button through the transistor and relay coil.

Yeah, it’s a little dumb, but it works. A perfect solution for the fast result ;-) .

PS: Stay tuned for my new project! It’s almost complete!

Dawno tu nic nie pisałem z powodu braku czasu – praca, studia, itp.

Ostatniego popołudnia zająłem się moją pracą magisterską, która wymagała stworzenia prototypu mojego układu. Niestety, skończył mi się laminat i wygrzebałem z szafy jakieś stare resztki niskiej jakości z nierównomierną warstwą miedzi. Aby polepszyć wynik trawienia, potrzebowałem zapewnić stały ruch substancji trawiącej (nadsiarczan sodu). W tym celu rozejrzałem się po pokoju za przedmiotami, które mógłbym wykorzystać i tak powstał ten oto wynalazek. Przedstawiam mój wspaniały, wyjątkowy i niepowtarzalny wynalazek, którym jest wspaniałe, wyjątkowe i niepowtarzalne automatyczne urządzenie trawiące PCB.

Do budowy tego bardzo zaawansowanego technicznie urządzenia został wykorzystany stary napęd CD oraz pudełko po lodach truskawkowych. Muszą to być koniecznie lody truskawkowe. Nie czekoladowe, nie waniliowe, nie cytrynowe, a truskawkowe – inaczej urządzenie nie będzie działać. Napęd jest sterowany za pomocą płytki testowej z mikrokonotrlerem (ATMega8) poprzez tranzystor i przekaźnik podłączony do przycisku wysuwania tacki.

Pomimo swojego wyglądu, wynalazek bardzo dobrze wykonuje zadanie – płytka wytrawiła się bardzo ładnie. Głupie, ale działa! ;-)

PS: Już niedługo kolejny projekt.

[English translation below]

Z powodu braku czasu ostatnio nic nie pisałem. Przyszły święta i znalazłem chwilę na rozbudowę poprzedniego projektu cieszącego się sporą popularnością. Oto obiecany powrót stacji dyskietek. Tym razem jest ich aż 8, a obok nich mój panel LED 64×16, nad którym ostatnio pracowałem. Z okazji świąt… świąteczna piosenka:

Planuję napisać coś więcej na temat zasady działania oraz budowy „dyskietkowej orkiestry” oraz odpowiedzieć na najczęściej zadawane pytania, ale już nie dzisiaj – to jest temat na większy artykuł. Niedługo pojawią się kolejne melodie – subskrybuj mój kanał YouTube!

Wesołych Świąt!


I didn’t wrote anything since october because I was very busy last 3 months. Now I have a few free days so here’s the new video – as promised. Floppy drives are back. This time there’s 8 drives and my 64×16 LED display I was working on recently. It’s Christmas time, so… here’s some Christmas song:

I am planning to write some more detailed description of how it works, FAQ and responses and maybe the instructions how to build the „floppy orchestra”, but not today. It’s a topis for separate long article. There will be more floppy music soon, so come back later or subscribe my YouTube channel.

Merry Christmas!


2 floppy drives – $5
A microcontroller – $3
Almost 2 million views in 5 days – PRICELESS!


Mój ostatni film – Floppy music DUO – Imperial march – Imperial March – został obejrzany prawie 2 miliony razy w ciągu ostatnich kilku dni. Został umieszczony na wielu portalach, takich jak,, Yahoo czy Reddit. Podobno dziś rano został nawet pokazany w TVN24! (Czy ktoś może to potwierdzić? ;-)  ) Nie spodziewałem się aż tak dużej popularności. Dziękuje.

Jak już obiecałem, będą kolejne filmy. Obecnie jestem dość zajęty, gdyż właśnie zaczął się rok akademicki (już trzeci ;-) ), a oprócz tego pracuję nad dwoma innymi projektami. Spróbuję znaleźć trochę wolnego czasu w weekend. W międzyczasie spróbuję znaleźć jakieś stacje 5,25′.

Przepraszam za duże opóźnienia w odpowiadaniu na pytania. Zostałem zaspamowany Waszymi wiadomościami\komentarzami i potrzebuję trochę czasu żeby się przez nie przebić ;-) .

Dużo osób wyraziło chęć budowy takiego urządzenia.
Czy byliby byście zainteresowani zestawami do samodzielnego montażu?



My last video – Floppy music DUO – Imperial march – has been viewed almost 2 million times in just a few days. It hat been posted on many sites like Yahoo, Reddit, polish or Someone said that it has even been shown in TVN24, polish news television ths morning!  I didn’t expected so much popularity. Thank you!

As I promised, I will make some new videos soon. Currently I am a little busy – two other projects and back to the university classes after summer holidays. I will try to find some time at the weekend. In the meantime I will try to get some 5,25 drives.

Sorry for the big delay in responding to your questions – I am spammed and I need some time go get through all this messages ;-) .

A lot of people wrote, that he would like to build this device.
Are you interested in a self-assembly kit?

Hello! Here’s an English translation of my previos post. My English isn’t perfect so there might be some mistakes ;-) .

Summer holidays are comming to an end, I have passed all september exams and now I am procrastinating doing some dumb things instead finishing two other, more serious projects ;-) .
Here’s what polish AGH University of Science and Technology students do in their free time. I’d like to introduce my another, totally useless device – a musical floppy drives.

First attempt:

And now it’s time for the double:

How does it work?

It’s nothing new and it’s very simple. The sound comes from a magnetic head moved by stepper motor. To make a specific sound, head must be moved with appropriate frequency.
FDD has a simple interface – the description may be found for example [ HERE ]. To move the head you need to activate the drive by pulling the DRVSB0 or 1 (depends on the cable you have and the connector – notice the crossover on the FDD ribbon cable) pin low and then falling edge on STEP pin makes the head move one step in direction dependent on DIR pin state.
An ATMega microcontroller is generating those frequencies and it makes the drives play music.

Now it’s tome to call some older buddies (5,25′ or 8′ drivers) and make an orchestra!

Niedawno złożyłem mały próbny panel 32×8, w celu zapoznania się z nowymi tajwańskimi ;-) sterownikami LED. Próby wyszły całkiem nieźle, a testowy wyświetlacz postanowiłem do czegoś wykorzystać. Wygrzebałem plugin do Winampa, który kiedyś napisałem na szybko i połączyłem go z tym wyświetlaczem. Całość prezentuje się całkiem nieźle, panel świeci mocnym jednolitym światłem, więc postanowiłem go Wam pokazać.

Na koniec smutna wiadomość. Schematów i źródeł nie będzie.

[English translation available HERE]

Wakacje się kończą, egzaminy w „kampanii wrześniowej” zaliczone, a ja zamiast kończyć dwa komercyjne projekty zajmuje się głupotami – bo jak wiadomo głupoty cieszą najbardziej ;-) .
Oto, co robią studenci AGH w Krakowie w wolnym czasie. Przedstawiam mój kolejny, kompletnie bezużyteczny wynalazek – grające stacje dyskietek.

Pierwsza próba:

A teraz czas na duet:

Nie jest to nic nowego. Zasada działania jest bardzo prosta. Dźwięk powstaje poprzez ruch głowicy, która jest przesuwana krokowo z odpowiednią częstotliwością. Opis interfejsu można znaleźć np. TUTAJ. Wystarczy jedynie aktywować stację przez podanie stan niskiego na DRVSB0 lub 1 (w zależności czy mamy taśmę z crossem i do której wtyczki podłączona jest stacja) i wybrać kierunek ruchu głowicy (stan niski\wysoki na DIR), a zbocze opadające na STEP spowoduję ruch głowicy o jeden krok. Całością steruje mikrokontroler ATMega.

Teraz tylko pozostało zgromadzić kilku starszych kumpli (5,25′) i stworzyć orkiestrę! ;-)

Sesja się zbliża, więc tradycyjnie zacząłem już prokrastynować (a Wy? ;-) ). Ostatnio zacząłem pisać bibliotekę do obsługi klawiatury PS/2 w C dla AVR i postanowiłem na szybko w godzinkę lub dwie stworzyć jakiś praktyczny projekt w celu jej przetestowania. Początkowo nie planowałem tego publikować, ale pokazałem to kilku osobom i się spodobało, więc być może spodoba się i Wam. Mi zabawa tym wynalazkiem sprawia radochę jak dziecku ;-) .

Oto moje elektroniczne „pianino” z komputerowej klawiatury PS/2.
Od strony elektronicznej układ jest bardzo prosty – mikrokontroler ATMega, kondensatory, głośnik, gniazdo PS/2, które barbarzyńsko wyciąłem wraz z kawałkiem uszkodzonej płyty głównej, gdyż nie chciało mi się go wylutowywać i klawiatura PS/2 ze złomu, którą wspaniale oznakowałem zielonym markerem i powyciągałem kilka klawiszy by układ klawiszy przypominał klawiaturę pianina.

Na zdjęciach widać moją uniwersalną płytkę, w której siedzi Mega32 i programator USB DIY – USBAsp. Głośnik pochodzi z obudowy komputerowej.

Czas wspomnieć coś o softwarze, który jest główną częścią projektu. Być może kogoś to zainteresuje.

Jak już wspomniałem, napisałem go w C i skompilowałem pod AVR-GCC. Program dzieli się na dwie części – obsługa PS/2 i właściwy program – pianino.

Warstwa fizyczna PS/2 jest bardzo prosta. W przypadku klawiatury oprócz VCC/GND wykorzystywane są jedynie linie DATA i CLK. Opis można znaleźć m. in.
[TUTAJ] . W chwili naciśnięcia/puszczenia przycisku klawiatura przesyła 11 bitów (start, data(8), parity, stop) generując przy tym zegar na linii CLK. Zegar połączyłem z wejściem INT0 mikrokontrolera i włączyłem zewnętrzne przerwanie. Dane można odebrać na dwa sposoby – w momencie wystąpienia przerwania można odebrać wszystkie 11 bitów lub odbierać po 1 bicie w każdym przerwaniu. Ja zastosowałem drugą opcję. Dlaczego? Dzięki temu nie marnuję czasu pomiędzy bitami. Jeśli odbierałbym cały bajt, musiałbym czekać na aż klawiatura prześle wszystkie 11, a że działoby się to w przerwaniu zablokowałbym inne przerwania aż do zakończenia odczytu, co mogłoby być niepożądane w przypadku korzystania innych często występujących przerwań. Minusem jest możliwość utraty synchronizacji, kiedy na linii CLK pojawi się jakiś „śmieć” (moja klawiatura ze złomu jest lekko upośledzona i czasem je wysyła ;-) ) – można to wyeliminować wywołując co jakiś czas funkcję synchronizującą.
Po odebraniu 11-go bitu, bajt trafia do kolejki klawiatury – struktury zawierającej bufor o definiowalnej wielkości i flagi. Dzięki zastosowaniu bufora główna pętla nie musi „interesować się” życiem klawiatury – wystarczy jedynie ściągnąć z kolejki klawisz (o ile tam się znajduje). Ponadto takie podejście umożliwia podłączenie dwu lub więcej klawiatur – wystarczy tylko stworzyć dodatkową strukturę i przerobić funkcje tak, by operowały na wskaźnikach zamiast na globalnej strukturze (stworzyłem globalną dla zwiększenia wydajności/wygody).

Co do algorytmu pianina – mikrokontroler generuje proste tony (przebiegi prostokątne) za pomocą wbudowanego sprzętowego timera. W momencie, gdy chcę wygenerować dźwięk, przeliczam wartość docelowej częstotliwości na odpowiednią wartość wpisywaną do rejestru (właściwie rejestrów, bo jest to liczba 2-bajtowa) timera, zależną od częstotliwości taktowania i zmieniam stan wyjścia, do którego podłączony jest głośnik przy każdym przerwaniu.
Pianino posiada własną kolejkę klawiszy – dzięki niej program „pamięta”, jakie klawisze są aktualnie wciśnięte i zmienia ton w odpowiedni sposób.
Niestety mając tylko jeden kanał niewiele można zdziałać, ale przy zastosowaniu pewnego triku można nieco urozmaicić dźwięk. Zastosowałem taki sam trik jak w starych DOSowych grach (to były czasy, nie? ;-D ) – w momencie wciśnięcia dwu klawiszy częstotliwość jest przełączana z jednego tonu na drugi 20-50ms, co daje (przynajmniej częściowe) wrażenie dwóch tonów jednocześnie. Tryb dwutonu można wyłączyć/wyłączyć za pomocą odpowiednich klawiszy.

Na koniec najciekawsza opcja – nagrywanie sampli. Pozwala ona nagrać 4 sample o długości do 65 nut (w przypadku, gdy wszystkie dźwięki/przerwy są krótsze od 4 sek.). Podczas nagrywania zapisuję w pamięci zdarzenie (wciśnięcie/puszczenie klawisza N) i odstęp od poprzedniego zdarzenia w rozdzielczości około 16ms (1/64) do zajmuje 2B. Jedna nuta to wciśnięcie i puszczenie klawisza. 65*2*2B*4 sample daje 1040B potrzebnej pamięci na sample. oczywiście, można by to bardziej skompresować, ale nie było sensu marnować czasu na pisanie efektywniejszego algorytmu, bo nie taki był cel tego projektu. W przypadku ATMegi8/16 trzeba by zmniejszyć ten obszar o połowę – potrzebna jeszcze miejsca na kolejki, zmienne pomocnicze i stos (no końcu). Sample możnaby też zapisywać na EEPROMie – były by trwałe.
Sample można odtwarzać i jednocześnie grać drugą linię. Algorytm odtwarzania ma małe niedociągnięcia, które widać przy przełączaniu oktaw, ale jak już pisałem, celem projektu była biblioteka PS/2.

A teraz najważniejsze – 2 filmiki: na jednym demonstracja działania tryby dwutonowego i sampli na znanej piosence polskiego zespołu a na drugim… marsz turecki ;-) .

Jeśli będą chętni, to udostępnię kod programu/bibliotekę PS/2 jak tylko ją dokończę i napiszę dokumentację – pisać.
Jak mi się zechce, to dopiszę obsługę myszki – można by modulować nią dodatkowo tony klawiszy (coś na zasadzie wajchy w keyboardach ).
Jeśli ktoś chciałby się pobawić, to załączam skompilowany program dla ATMegi32 (8MHz). Schemat połączenia (tak jak było mi wygodnie na mojej płytce testowej):

Do tego oczywiście głośnik do masy, VCC=5V dla atmegi i klawiatury i do tego jakiś elektrokit filtrujący miedzy VCC a GND i kondensatory do kwarcu 8MHZ około 27-30p. Program dodatkowo wysyła dane pomocne w debugowaniu po RS232 i czasem się przywiesi na starcie co jest powodem synchronizacji PS/2, której w bibliotece jeszcze nie ma .

Link do mojego tematu w serwisie

Firmware v. 0.1 (alpha):
  Pobierz plik: avrpiano/arvpiano_aplha_0_1_m32_8MHz.hex
  Rozmiar: 25.62 KB, pobrany 1110 razy.

© 2010 Silent's Homepage Administracja Suffusion WordPress theme by Sayontan Sinha