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.