Pixelblaze Pixel Map For LED Helix
Completing first draft of a LED helix mechanical chassis means everything is in place to dig into Pixelblaze and start playing with the software end of things. There are a selection of built-in patterns on the default firmware, and they were used to verify all the electrical bits are connected correctly.
But I thought the Pixel Mapper would be the fun part, so I dove in to details on how to enter a map to represent my helical LED strip. There are two options: enter an explicit array of XYZ coordinates, or write a piece of JavaScript that generates the array programmatically. The former is useful for arrangements of LEDs that are irregularly spaced, building a shape in 3D space. But since a helix is a straightforward mathematical concept (part of why I chose it) a short bit of JavaScript should work.
There are two examples of JavaScript generating 3D maps, both represented cubes. There was a program to generate a 2D map representing a ring. My script to generate a helical map started with the "Ring" example with following modifications:
- Ring example involved a single revolution. My helix has 30 LEDs per revolution around the cylinder, making 10 loops on this 300 LED strip. So I multiplied the pixel angular step by ten.
- I've installed the strip starting from the top of the cylinder and winds downwards, so Z axis is decremented as we go. Hence the Z axis math is reversed from that for the cube examples.
We end with the pixel map script as follows.
function (pixelCount) {
var map = [];
for (i = 0; i < pixelCount; i++) {
c = -i * 10 / pixelCount * Math.PI * 2
map.push([Math.cos(c), Math.sin(c), 1-(i/pixelCount)])
}
return map
}
Tip: remember to hit "Save" before leaving the map editor! Once saved, we could run the basic render3D()
pattern from Pixel Mapper documentation.
export function render3D(index, x, y) {
hsv(x, y, z)
}
And once we see a volume in HSV color space drawn by this basic program, the next step is writing my own test program to verify coordinate axis.