It's been a while, I know. I haven't abandoned the project, but there's been slow progress.

The control modules

The design of the individual modules is finalized now. I've replaced the terminal block with a strip of headers due to the inconvenient fact that they were the most expensive part on the board for no reason. I added some space and tabs for board-edge mounting hardware.

I'm going to make a primary interface module that will have an expansion available for input from a 'keyboard' made up of arcade buttons or something similar.

The solenoids

I've found a source for small solenoid valves at $2 per valve, but they don't have enough throughput for me to be able to use them as basic input valves. I've experimented with rear-valving, but I'm getting the impression that I need to do something else, because they seem to have a tendency to squeak higher when cut off. I think I've got an idea for that, but it'll need testing. I'll post about valves soon.

The horns

I haven't done anything new with the horns yet. There are currently 1 1/2 inch, 1/2 inch, and 1 inch horns constructed. There will be 3/4 inch and 2 inch horns as well. No tuning has been attempted yet; this is likely to be the most time-consuming part of the project, and may yet prove uncomfortably inconsistent or difficult. There are lots of variables.


Solenoid update

A brief test today proved that both the spring and E-clip samples provided by Century Spring will not work for me; the spring (although tiny) provides too much resistance, and the E-clip (the smallest size they supply) is too big. I think these tiny solenoids aren't going to work.

However, another contender has appeared. These solenoid valves might work for me, although they might have a problem with throughput if the connections are too small. I'll see what I can do.


Progress so far

Design progress

Things that are finished:

  1. the programming (base function)
    • command-line-based at the moment
    • takes a MIDI file as an argument
    • sends SPI signal coded for 8x8 output array
  2. the control modules
    • 8x chained 8-out modules
    • individually replaceable
    • hopefully sufficiently isolated in case of failure
  3. the air horn designs
    • 1/2 inch
    • 3/4 inch
    • 1 inch
    • 1 1/2 inch
    • 2 inch
  4. the initial valve concept
    • solenoid-controlled flapper valve

Things that are not done:

  1. converting the python script to function-based operation
  2. confirming solenoid spring return viability (pending delivery of sample spring/E-clip)
  3. drafting the valve design
  4. determining horn size crossover points (aspect-ratio-based?)
  5. layout of the physical format (pending sample measurements of horn sizes)
  6. designing the interface (hardware only? software + display?)

Build progress:

Things that are finished:

  1. 3x version 1 control modules
    • fully functional, planned version 2 has corrected silkscreen and is slightly smaller
  2. a few test horns
    • 1/2 inch design is an overwhelming success
    • 1 inch is effective, improvements can probably still be made
    • the 2 inch horn is problematic at the moment

Things that are not done:

  1. full scale construction of all horns
  2. testing and final construction of valves
  3. completion of control modules and interface
  4. construction/final assembly


Circuit boards arrived!

I don't have any solution for the solenoids yet, because I'm still waiting on the springs and stuff until I have the other electronics figured out, because I'm gonna have to go all-in due to the $50 minimum order from Century Spring. The springs are 99¢ each, which is a bother because they're literally less than 1/4" in any dimension, but the price is probably largely due to their small size (no pun intended). Tiny parts can be harder to produce because of the precision required, and since they are the smallest size available, there's probably almost no demand for them, so that drives the price up more.

Anyways, the title says that PCBs arrived, and they have. I've got all 3 soldered up and I'm currently setting up for testing, which I might take a quick video of when it's working. Soldering went surprisingly quickly and easily, considering the small size and the close proximity of some of the parts as well as my inexperience. I've yet to find out if I left the soldering iron on some pin too long that caused something to fail, but I'm optimistic pre-testing. I'll update the post when I've got some sort of result.

It still bothers me that I switched two of the labels on the I/O headers...


Python is dumb. Also, tiny solenoids!

Python is a great language. It's readable, it looks nice, and it does lots of really cool things.

It's also got quirks.

For example:
x = [1, 2, 3, 4]
sets the variable x to be the list 1, 2, 3, 4. If you then set
y = x
and ask for y, it will also return the list 1-4. The weird part is what happens when you change x after this, then ask for y.
x = [2, 3, 4, 5]
[2, 3, 4, 5]
The reason for this is that the variables are pointing at the same object, instead of y being pointed at an independent duplicate of x. This caused a bug where instead of creating a 'piano roll' of valves on vs. last change, one loop in the code created a great big set of zeros.

I don't understand the point of this design choice on the part of the python developers, but I found a way to deal with it.

In other news, solenoids arrived. They're very small.
They're so small!

Very small.

They also draw 600 mA at 12v, which is inconvenient. They get extremely hot in a short period of time, and therefore are not suitable for connection to the control board without current-limiting resistors.

In addition, they are pull-type but have no return spring, so I need to do something about that. I found a company online called Century Spring and I've asked for a sample of the springs (tapered and very small diameter, impossible to find elsewhere) and E-clips (1 mm groove diameter, unreasonably expensive in many places, less than 3¢ per at CS), which they have agreed to send. I'm hopeful in that department, although I'm a bit disappointed that there's seemingly no inexpensive, simple solution for this part of the project. I don't mind fiddly bits and occasional kludging to make something work, but having to go through three or four different companies just to get solenoids sorted seems a bit much.


Boards are shipped!

I ordered the first iteration of the control boards last weekend, on the 19th of October. I got an email this afternoon informing me that they have returned from the fabrication shop and have shipped. I expect them to be here by the end of the week, and I'm excited. I ordered some more parts from Adafruit, and those should be here tomorrow, so it looks like things are coming along nicely. I'm a bit put out because I went and switched the labels on the clock and latch pins on the I/O headers on the board, so I'll have to keep my eye out to make sure I don't screw that up.


I killed a bug today.

When converting from tick count since the beginning of the file to time since the beginning of the file, I was converting times without accounting for the change in tempo, thus resulting in a considerable portion of the piece being scrambled without my being able to tell what was wrong, since I can't play the output yet, not having the sound-creation actually in place.


Well, at least I fixed it.


Starting off with a bang (I let the smoke out)

Well, that was fun. I managed to fry a shift register somehow, and it looks like my Raspberry Pi is out of commission as well. At least I know that each part of the control system works by itself. The interesting part will be getting everything working together; I hope I haven't found a problem with the hardware.


  1. I have made a couple of PVC air horns.
  2. They can be made in several sizes, from 1/2" ID to 2" and possibly larger if necessary.
  3. They can (theoretically) be tuned.
  4. I have a few MIDI files for Bach organ fugues that I had arranged for brass quintet.
  5. I have a way of controlling the air horns electronically.


     I am building an air horn organ.

Progress so far:

  • MIDI files can be processed using python in order to track what notes should be sounding at a given time (data point at each note-on or -off event)
  • control of a single shift register (mostly) functional
  • power control tested, theoretically functional
  • miswired something and fried one of the shift registers and the RPi2 that I was using to test
  • determined that there are no HDMI cables in the house to hook up the RPiA+ to the TV
  • determined that my WiFi adapter won't work with Raspbian (OS on the Pi)
  • learned to solder
  • designed and ordered first iteration of the controller PCB from oshpark.

Things to do:

  • program control script for the actual output
  • test out control boards
  • find viable inexpensive valve solution
  • revise control boards
  • build lots of air horns
  • tune lots of air horns
  • tune even more air horns
  • check complete control system
  • devise interface
  • final construction
Explanations of the details will follow as I have the opportunity. I'll discuss how the control system works, how the air horns are made, and I'll talk about stuff that goes wrong (or right) as I go along. I'll try to update at least once a week.