The concept is simple: using a Python Ephemeris and a weather service the intensity of the NeoPixel arrays are set as a function of the transit of the sun across the sky. The colour of the light is set based on the current weather, not to simulate the colour temperature but, to provide an obvious abstraction of major weather conditions. The fixture itself is placed to indirectly light the space's white ceiling. The effect is to give us cave dwellers a basic idea of what the world will look like when we next emerge.
In the above video you see three colours displayed (using the hyperclock at 6000X). The current version provides a Weather Underground client that polls the current weather conditions and displays coloured light for four condition buckets:
White : Sunny/Clear to partly cloudy
Blue : Normal (for Seattle). e.g. overcast, rain, drizzle, fog.
Green : Snow (because I love snow)
Red : Emergency. e.g. large hail, tornados, volcanic ash, etc;
The cape has an 16x2 character display that shows three pages of data:
The phases of the day that the Internet Skylight simulates are morning twilight, daytime, evening twilight, and night. Twilight is calculated using "civil twilight" which is when the center of the sun is 6˚ below the horizon. If a weather API is used then the current temperature and barometric pressure is used when calculating light refraction over the horizon.
The percentage displayed on page 2 of the LCD display is the percentage that the current time is between the start of morning twilight and the end of evening twilight. This percentage goes from 0 to 100 through the day and from 100 back to 0 during the night. This progression can be used when hacking the skylight to coordinate effects. The default program uses this percentage to calculate the current light intensity level offset from the start of the daylight curve (see Figure 1). The two twilights exist only as control points in the 5th-order daytime Bézier curve.
One interesting challenge was powering 512 NeoPixels from a single supply. My first attempt to build this project naively used a 2.5A "wall wart". When the white light hit ~65% the voltage would drop below a critical level and the BeagleBone would reset which was fortunate because it prevented the wall wart from 'splodin'. So I went back to the shed and actually measured the current to find that I needed 20A of power at 5V. That's a large supply for 5V and I didn't think I would be able to find such a beast without resorting to a bulky PC power supply with a noisy fan. Fortunately SparkFun sells the Mean Well 5V 20A switching power supply which works perfectly without active cooling.
But it does get hot. Really hot. Too hot to touch using full brightness, white-light. The arrays are attached to ABS plastic planks with an air-gap underneath them. In retrospect I should have designed a heatsink to bolt the PCBs to. We'll see how long they last as-is but I fear the heat will start killing pixels before too long. I did add a --brightness
switch to the skylight program and am running this build at 95% of maximum.