Monthly Archives: February 2013

Helix Custom PCBs

So, it turns out that they let just anyone design and print PCBs with a minimum of cost and absolutely no training whatsoever! Hooray amateurism?

The latest batches of PCBs just came in for the Volunt project (a small-scale portable version of Helix). These are the touch controller breakout boards that fit inside the rods and communicate with a series of touch sensors and relay the information via I2C to the microcontroller in the base.

Cypress Capsense Breakouts

Sooooo Tiny

I designed these boards with Fritzing, and had them made by BatchPCB (green), and OSH Park (purple). I have another batch of boards coming for Helix and Volunt from iTead in China, but who knows when they’ll actually arrive.

If you look closely, you can see that the touch boards are populated almost entirely with surface mount components. I did those with this high-tech reflow rig.

 

 

My Glorious Chariot

My Glorious Chariot

Yes, that’s a super-cheap hot plate. I populate the boards with solder paste and the components and set the boards on that little metal plate. Then, I set the dial to the W in LOW, watch it until everything reflows, and pull it off the heat.

If you set the temperature too high, you get this fabulous thing happening.

Mmmmm. Tastes like burning.

Mmmmm. Tastes like burning.

Amazingly, this board still works!

There are much fancier DIY rigs with thermocouples, but I’m incredibly lazy and didn’t bother. This seems to work for my level of detail, and I have yet to render a board unworkable.

Finally, while I’m showing off, here’s my glorious and honorable work space. Honestly, I’m not un-proud of my space frugality. Everything fits, and nothing has caught fire… yet.

My Crib

My Crib

Advertisements

Helix Color Fade Algorithm

(yes, I am aware that it is sideways.)

First, some background. Helix is an art installation that uses an evolutionary algorithm to produce smooth color gradients on a series of helical rods populated by sets of RGB pixels. The organisms in the algorithm are a series of RGB color values, and the fitness function for individuals is how similar each color value is to its neighbors. The smoother the gradient along the organism, the higher the fitness. The higher the fitness, the more those organisms get to reproduce, but with a chance of mutation. Rinse and repeat, and you get smoother and smoother color gradients as time goes on.

Helix Rendering

Helix Rendering

Now, the challenge in this is figuring out how to best display the organisms, both so that their gradients may be appreciated, but also so that we can pack as many organisms in the installation as possible. Ideally, the installation would be able to display many separate populations simultaneously, and thus allow us to do fun things like demonstrate population migrations, founder effects, etc.

So, that leaves us with using the time dimension to display the gradient, by cycling through the lights of each organism’s phenotype once per generation. So, we tried that. Suffice to say, the result is less than pleasing, and not exactly intelligible. The problem is that people have a hard time getting a feel for how smooth a gradient is if they can’t see it all at once. The only light they see is the one that is shining right then, and they have to try hard to remember what colors came before, and they have to imagine the whole sequence, and oh, they’re walking away. So, what can we do? How can we both display the gradient, while having all the organisms represented?

So far, the answer seems to be to offset the cycle, such that each organism is displaying the next locus at any given time, as we go down the line of organisms. So, at timepoint 1, organism 1 is displaying locus 1, organism 2 is displaying locus 2, etc. T2, o1 displays l2, o2 displays l3, etc. This is a little bit of a perceptual hack, because you seem to see the whole gradient moving down the rod, but the truth is that you are seeing one locus from one organism at a time. It may *look* like the evolved gradient because your fitness (and location) neighbors are pretty likely to have a similar genome to you, and thus the locus they are displaying is pretty likely to be the same value that is in that locus for you.

So, this seems to solve the problem, and give approximately the right evolutionary intuition, while allowing us to display as many populations as possible.

Ultimately, I’m not sure that we’ll go with this approach all the time, since it isn’t, in fact, exact, but at the very least, it gives a flavor of a population for when we want to do multi-population evolutionary demonstrations.

Right, so that was all background for the video above. It turns out that if you are displaying colors in sequence without any fading, they are SERIOUSLY uncomfortable to look at, especially in the early stages of evolution. It’s all blinky, jagged, eye-searing, seizure inducing horribleness. So, I added some fades between the colors as they went down the line to make it more pleasant to look at, while still accurately conveying the gradients in the population.