For my final project I made a companion light for my online show Dumpster Fire.
Instructables link: https://www.instructables.com/Garbage-Light/
video link: https://youtu.be/8EvMQiX6GAA
Dumpster Fire?
Dumpster Fire is an online show that airs on transmissionpit.com. Each episode is made of ‘found footage’ that is less found and more directly sourced from other media artists.
Each episode airs only once, and never again.
https://carmeldeberg.myportfolio.com/dumpster-fire-online-show



Since the show online runs once, I wanted to create a very easily DIY-able light that would act as a countdown timer for when the show will start, and then be a companion light show during the episode.
Viewers can follow the instructables and send me their board info. I add all the participating boards into my Arduino cloud, and five minutes before the show starts, I trigger the code to be transmitted to the Arduinos.
My cat was very concerned with what was going on:


Working on my circuit:

My code:
// Include the NeoPixel library
#include <Adafruit_NeoPixel.h>
// Define the pin where the NeoPixel data line is connected
#define LED_PIN 6
// Define the number of LEDs on your NeoPixel strip
#define NUM_LEDS 8
// Create an instance of the NeoPixel strip
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
// Array of colors to cycle through
uint32_t colors[] = {
strip.Color(255, 0, 0), // Red
strip.Color(0, 255, 0), // Green
strip.Color(0, 0, 255), // Blue
strip.Color(255, 255, 0), // Yellow
strip.Color(0, 255, 255), // Cyan
strip.Color(255, 0, 255), // Magenta
strip.Color(255, 255, 255) // White
};
int numColors = sizeof(colors) / sizeof(colors[0]);
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to ‘off’
}
void loop() {
for (int i = 0; i < numColors; i++) {
pulseColor(colors[i], 1000); // Pulse the current color over 1 second
}
}
// Function to create a pulsing effect
void pulseColor(uint32_t color, int duration) {
int steps = 256; // Number of brightness steps
int stepDelay = duration / (steps * 2); // Time per step
// Fade in
for (int brightness = 0; brightness < steps; brightness++) {
setStripColor(color, brightness);
delay(stepDelay);
}
// Fade out
for (int brightness = steps – 1; brightness >= 0; brightness–) {
setStripColor(color, brightness);
delay(stepDelay);
}
}
// Function to set all LEDs on the strip to a specific color and brightness
void setStripColor(uint32_t color, int brightness) {
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, dimColor(color, brightness));
}
strip.show();
}
// Function to adjust the brightness of a color
uint32_t dimColor(uint32_t color, int brightness) {
uint8_t r = (uint8_t)((color >> 16) & 0xFF);
uint8_t g = (uint8_t)((color >> 8) & 0xFF);
uint8_t b = (uint8_t)( color & 0xFF);
r = (r * brightness) / 255;
g = (g * brightness) / 255;
b = (b * brightness) / 255;
return strip.Color(r, g, b);
}
Reflections/next steps:
Instead of having the aluminum foil be the shell, the shell should be cardboard that is lined with aluminum foil.
I would like to try with a different web-enabled board and led strip. The led strip needs to be one that has a casing as trying to adjust the sculpture Is too much for the delicate solder/wires on the pixel strip.
I also recently taught my students an additive color theory class. As I was writing up these reflections, it has occurred to me that there is an opportunity to design the instructions for the light in a more detailed way that could also passively teach viewers some color theory as well.