I designed and built a modular holographic art piece using a laser-engraved piece of acrylic, RGB LED strip, and custom 3D-printed base.

This was a project done during my high school digital electronics class.

The internals consist of an Adafruit Trinket and a RGB LED strip, which is connected to the Trinket using a single inline resistor on the data pin. photo of the soldered electronics

They’re housed inside a custom 3D-printed base, which includes space for an external switch and USB power supply input. photo of the internal electronics

Inserted in the base is a laser-cut piece of acrylic, which is modular and easily swappable. photo of the assembled base and acrylic

Finally, I wrote some simple animations of my own.

#include <FastLED.h>

#define LED_PIN     1
#define NUM_LEDS    15
#define BRIGHTNESS  255
#define LED_TYPE    WS2812
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];

void setup() {
       delay(1000);
       FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
       FastLED.setBrightness(BRIGHTNESS);
}

void loop() {
       /* Animation 1 */
       for (int i = 0; i <= 510; ++i) {
              static int hue = 0;
              FastLED.showColor(CHSV(hue++, 255, 255));
              delay(20);
       }
       /* slow color change across the entire spectrum of RGB colors */

       /* Animation 2 */
       for (int c = 0; c < 3; ++c) {
              int brightness = 0;
              for (int i = 0; i < BRIGHTNESS; ++i) {
                     FastLED.showColor(CHSV(160, 255, brightness++));
                     delay(7);
              }
              for (int i = 0; i < BRIGHTNESS; ++i) {
                     FastLED.showColor(CHSV(160, 255, brightness--));
                     delay(7);
              }
       }
       /* slowly waxing/waning blue glow */

       /* Animation 3 */
       for (int n = 0; n < NUM_LEDS; ++n) {
              leds[n] = CHSV(map(n, 0, NUM_LEDS - 1, 0, (255 - (255 / NUM_LEDS))), 255, 255);
       }
       for (int c = 0; c < 40; ++c) {
              FastLED.show();
              CRGB temp = leds[0];
              for (int i = 0; i < NUM_LEDS; ++i) {
                     if (i == NUM_LEDS - 1) {
                           leds[i] = temp;
                     }
                     else {
                           leds[i] = leds[i + 1];
                     }
                     delay(20);
              }
       }
       /* rainbow spectrum wrapping around the strip */
}

And it’s finished! photo of the completed project