The Harmonic Clock

The Harmonic Clock is an Arduino based visualisation device, built to read incoming MIDI stream, filter messages based on preset cyrteria and display selected values on a circular LED display.

Click here for assembly gallery, or click one of the links below to learn more:

How are octave and circle connected
Octave is double the base frequency.

Notes go higher and highe, but the funny part is that most sounds are not just pure sines, but also so called higher harmonic frequencies, which resonate at multiplies of original frequency. So lower C and upper C might have a lot of identical harmonic content, and from melodic standpoint are almost indistinguishable, unless your ears are specifically trained for that. And if we consider the fact that we hear frequencies logarythmically, we can treat an octave as one unit (or 2PI), and warp it around. Than an octave will represent a full circle, and frequencies falling in between will be marked as an angle on a circle. That is the basic philosophy behind the harmonic clock.
What do I need do build one?
First of all, you'll need an Arduino or similar board. I used the standard Duemilanove, but the same method can be applied to any microcontroller design.

We'll need a bunch of SIPO shift registers and a 4N2x transoptor.
and some diodes.
Actually, quite a few of those:

For my design I used 4094 shift registers and 4N27. I used 24 LEDS + 1k resistors with them(plus three to illuminate the center and two status ones) Decide on a colour you want. It's always good to throw in some toggle switches and a variable resistor (potentiometer) for channel selection menu and rotation speed control, but that feature hasn't been fully coded yet so you don't have to worry about those. Have in mind that you might want to power it from USB so we shouldn't really take much more than 500mW so don't go mad on power output just yet.

Of course you'll need an enclousure and as we are using a 12-step harmonic system the obvious thing to do is to use an old clock, take the mechanism out and put an Arduino inside.

So how exactly does it listen to music?
Is it complicated?
No its not. Unless you never soldered anything in your life in which case I would recommend starting with someting a bit simpler, but if you did your first button and blinking LED you'll be fine. But it is a bit of work and sometimes the difficult party may be: how do I fit it into that clock, so just make sure your clock isnt too small for your skills.
I didnt make my own PCB and you don't have too, I did it on a strip board and used a piler to cut copper into shape.
How many LEDS?
The main idea is that we want to drive a series of LED's - I used 24, and arduino doesn't even have enough digital outputs to drive them, so I used a SerialIn-ParralellOut shift register (4094) and feed it with data in series, bit by bit. Because it also has a serial out at the end so you can feed the last bucket to the next chip and chain them together. For my 24 the solution runs fast enouch to update display few hundred times per second, which is enough to do some basic fading if you want to (my code does that). This way we only use If you really want LOTS of seperate leds you can use additional digital ouputs sharing the same clock and strobe lines.
Soldering LEDs is the most time consuming part of the assembly, but it's not too bad, it took me around 1,5-2h + some extras later on.
Software features one octave in two rows or two octaves displays using two LED rings, there's a channel selection menu under button2, with on/off and solo per channel, finally there's a screensaver which I had running in my studio for last couple of weeks.
There are still some bugs but its perfectly ready for casual use
Download software
Software is written in Arduino enviroment.

And then, finally

This is how my first one looks like.

You can click or here for DEMONSTRATION OF USE
Or on the picture for assembly gallery