Practical Technomancy
IMG_7592.jpeg

Blog

Thinking out loud

Posts in Project: Witch Lights
No cats were harmed in the creation of these videos

Getting a baseline reaction to the Witch Lights from cats.

This is with the acceleration and scanner animation code from last year.

So far, Samhain really LIKES seeing the lights, but doesn't really "chase" them. She just sort of... purrs while staring at the lights. And then talks to me until I make them come back for her.
Of the three cats, Elwood is the one who goes outside and hunts, and so he's the one whose "chase" instinct I'm hoping to capture.
Gilly doesn't even seem to see the LEDs as motion. She got curious where the flickering was coming from, assured herself that the LED strip was neither catnip nor food, and wandered off.
Tool Kit: NeoPixel Reel Tester

One of the problems I anticipated facing while on-site with the Witch Lights is the failure of a NeoPixel strip. Because of the architecture of the lights, a bad strip will take out not just its five meter section of LEDs, but also all strips plugged in downstream.

As one diagnostic tool in my on-site kit, I have this Arduino Uno, which is linked up to one of the waterproof 4-pin connectors that the Witch Lights pixel strips have on each end. To use it, you simply plug one end of a NeoPixel strip into it, and plug in the battery.

IMG_1563.jpg

It runs a color test pattern down the strip, which tells you that the strip works, and also that it doesn't have any bad pixels. So that's what I put it together for.

Right now, though, it's coming out because I'm going to plug it into this new 5-meter pixel strip, which will be used for my workshop test rig.

Progress: Building the test rig
2018-04-29 workbench.jpg

Here we are, about to upgrade the test rig on my workbench.

IMG_1581.jpg

Old Rig

Arduino Mega & 1-meter NeoPixel strip

The current build of witchlights-fastled.ino does not run on the Arduino Mega. It gives memory errors. I don't want to get bogged down with memory optimization at this point in the game. So I'm replacing it with an Arduino Due.

The Due I'm installing is a drop-in replacement module for the control board of the Witch Lights. That way, I'm testing on the exact hardware that will be in production.

The LED strip is a five-meter WS2812B addressible LED strip, with 30 LEDs/meter. Just like the Adafruit NeoPixel strips I used in production, except without the waterproofing. Which won't matter in my home workspace, I sincerely hope.

IMG_1588.jpg

New Rig

Arduino Due and 5-meter NeoPixel strip

And that was fast.

The test rig is in place, and the WS2812B strip works fine.

Next up is creating a new Sprite animation subclass, editing its scanner routine to map to the animation that I was working on the other day.

Speaking of which, it looks like this exported into the arduino sketch format:

//                       1234567890123456789012345678901234567890123456012345678901
strcpy(afc_timing-test, "123456788                                                 ");
strcat(afc_timing-test, "1234567888                                                ");
strcat(afc_timing-test, "  1234567888                                              ");
strcat(afc_timing-test, "     1234567888                                           ");
strcat(afc_timing-test, "       123456677888                                       ");
strcat(afc_timing-test, "        1223344556667788                                  ");
strcat(afc_timing-test, "         111122233344556667788                            ");
strcat(afc_timing-test, "              11111222233344556667788                     ");
strcat(afc_timing-test, "                   11111222333444555666788                ");
strcat(afc_timing-test, "                          1111112223344556788             ");
strcat(afc_timing-test, "                                 11111223456788           ");
strcat(afc_timing-test, "                                     11123456788          ");
strcat(afc_timing-test, "                                        1123467831        ");
strcat(afc_timing-test, "                                            12468531      ");
strcat(afc_timing-test, "                                             11386421     ");
strcat(afc_timing-test, "                                              1287543211  ");
strcat(afc_timing-test, "                                               18865432211");
strcat(afc_timing-test, "                                               886443211  ");
strcat(afc_timing-test, "                                              88765431    ");
strcat(afc_timing-test, "                                            4887654321    ");
strcat(afc_timing-test, "                                            4886421       ");
strcat(afc_timing-test, "                                            138831        ");
strcat(afc_timing-test, "                                            138831        ");
strcat(afc_timing-test, "                                            138831        ");
strcat(afc_timing-test, "                                            138831        ");
strcat(afc_timing-test, "                                            138831        ");

So that's some progress. Taking a break now.