LED Logo Light Box

by ArduinoPrints3D in Circuits > LEDs

59 Views, 3 Favorites, 0 Comments

LED Logo Light Box

IMG_7754.JPG
IMG_7750.JPG
IMG_7752.JPG
IMG_7753.JPG

This is the LED Logo Light Box, A prototype light box with a customisable logo on the front.

This entry for the Fandom Contest is not for one fandom specifically, it is a piece that showcases the unique logos of each.

Watch a video of it here

Supplies

LOGO.png
  1. 3D printer
  2. Soldering iron
  3. Hot glue gun
  4. filament
  5. Raspberry Pi Pico with the Earlephilhower board package installed
  6. 16 neopixel ring
  7. Breadboard power supply
  8. Power supply cable
  9. Medium size breadboard
  10. Small male to male jumper wires
  11. 300-500 ohm resistor
  12. M3x16 screw
  13. 2.5 x 5 mm neodymium magnet
  14. Arduino IDE

Wiring

IMG_8299.jpg
IMG_8303.jpg
IMG_8304.jpg
pin map.png
IMG_8306.jpg
IMG_8307.jpg
IMG_8308.jpg
IMG_8309.jpg
IMG_8310.jpg
IMG_8311.jpg
IMG_8315.jpg
IMG_8316.jpg

Please refer to pictures for assistance.

  1. Place the Pi Pico on one end of the Breadboard.
  2. Place the Breadboard Power Supply on the other end.
  3. Insert a Jumper Wire into the - rail of the Breadboard to the GND pin of the Pi Pico.
  4. Insert Wires into the 5V, DI, and GND pins of the Neopixel ring
  5. Insert the 5V wire into the + rail of the Breadboard
  6. Insert the GND wire into the - rail of the Breadboard
  7. Insert a 300-500 ohm resistor from GP16 of the Pi Pico to a pin in the empty section of breadboard, trimming excess wire.
  8. Insert the DI wire into the same row as the resistor.
  9. insert a wire from the VSYS to the + power rail on the Breadboard.
  10. Plug the Breadboard power supply cable into the Power Supply and Micro-USB cable into the Pi Pico

Coding

Upload this code or make your own animation on the neopixel ring. This code should display four sections of light fading between random colors at different speeds on the Neopixel Ring.

#include <FastLED.h>
#include <BlockNot.h>

#define LED_PIN 16
#define NUM_LEDS 16
#define COLOR_ORDER GRB
#define LED_TYPE WS2812B

CRGB leds[NUM_LEDS];

// Fade parameters
CRGB fromColor1;
CRGB fromColor2;
CRGB fromColor3;
CRGB fromColor4;
CRGB toColor1;
CRGB toColor2;
CRGB toColor3;
CRGB toColor4;
uint16_t limit = 100;
uint16_t counter1 = 0;
uint16_t counter2 = 0;
uint16_t counter3 = 0;
uint16_t counter4 = 0;
BlockNot Timer1(20, MILLISECONDS);
BlockNot Timer2(20, MILLISECONDS);
BlockNot Timer3(20, MILLISECONDS);
BlockNot Timer4(20, MILLISECONDS);

void setup() {
Serial.begin(115200);
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.clear(true);

// pick starting colors
fromColor1 = CHSV(random8(), 255, 255);
toColor1 = CHSV(random8(), 255, 255);
fromColor2 = CHSV(random8(), 255, 255);
toColor2 = CHSV(random8(), 255, 255);
fromColor3 = CHSV(random8(), 255, 255);
toColor3 = CHSV(random8(), 255, 255);
fromColor4 = CHSV(random8(), 255, 255);
toColor4 = CHSV(random8(), 255, 255);
}

void loop() {
if (Timer1.TRIGGERED) {
counter1 += 1;//count up

float progress1 = (float)counter1 / limit;

if (progress1 >= 1.0) {//if counter has reached 100 reset the fade
fromColor1 = toColor1;
toColor1 = CHSV(random8(), 255, 255);
counter1 = 0;
progress1 = 0.0;

Serial.println( "~section1~ " + String(toColor1.r) + " + " + String(toColor1.g) + " + " + String(toColor1.b));
Timer1.setDuration(random(15, 30), MILLISECONDS);
}

// Blend between current and target color
CRGB blended1 = blend(fromColor1, toColor1, uint8_t(progress1 * 255));

leds[0] = blended1;
leds[1] = blended1;
leds[2] = blended1;
leds[3] = blended1;
FastLED.show();
}
if (Timer2.TRIGGERED) {
counter2 += 1;

float progress2 = (float)counter2 / limit;

if (progress2 >= 1.0) {
fromColor2 = toColor2;
toColor2 = CHSV(random8(), 255, 255);
counter2 = 0;
progress2 = 0.0;
Serial.println( "~section2~ " + String(toColor2.r) + " + " + String(toColor2.g) + " + " + String(toColor2.b));
Timer2.setDuration(random(15, 30), MILLISECONDS);
}

// Blend between current and target color
CRGB blended2 = blend(fromColor2, toColor2, uint8_t(progress2 * 255));

leds[4] = blended2;
leds[5] = blended2;
leds[6] = blended2;
leds[7] = blended2;
FastLED.show();
}
if (Timer3.TRIGGERED) {
counter3 += 1;

float progress3 = (float)counter3 / limit;

if (progress3 >= 1.0) {
fromColor3 = toColor3;
toColor3 = CHSV(random8(), 255, 255);
counter3 = 0;
progress3 = 0.0;
Serial.println( "~section3~ " + String(toColor3.r) + " + " + String(toColor3.g) + " + " + String(toColor3.b));
Timer3.setDuration(random(15, 30), MILLISECONDS);
}

// Blend between current and target color
CRGB blended3 = blend(fromColor3, toColor3, uint8_t(progress3 * 255));

leds[8] = blended3;
leds[9] = blended3;
leds[10] = blended3;
leds[11] = blended3;
FastLED.show();
}
if (Timer4.TRIGGERED) {
counter4 += 1;

float progress4 = (float)counter4 / limit;

if (progress4 >= 1.0) {
fromColor4 = toColor4;
toColor4 = CHSV(random8(), 255, 255);
counter4 = 0;
progress4 = 0.0;
Serial.println( "~section4~ " + String(toColor4.r) + " + " + String(toColor4.g) + " + " + String(toColor4.b));
Timer4.setDuration(random(15, 30), MILLISECONDS);
}

// Blend between current and target color
CRGB blended4 = blend(fromColor4, toColor4, uint8_t(progress4 * 255));

leds[12] = blended4;
leds[13] = blended4;
leds[14] = blended4;
leds[15] = blended4;
FastLED.show();
}
}

3D Printing

Print the diffuser at 0.1 layer height. print base and lid in any color you want and the diffuser in white. Print the pre made logos or make your own with the blank part. Print the logos in black.

Assembly

IMG_7737.JPG
IMG_7738.JPG
IMG_7741.JPG
IMG_7742.JPG
IMG_7743.JPG
IMG_7744.JPG
IMG_7747.JPG
IMG_7748.JPG
IMG_7740.JPG
IMG_7749.JPG
  1. Place the circuit made earlier into the base part, gluing it down with hot glue.
  2. Place the NeoPixel ring into the channel on the lid part and glue it in.
  3. Press-fit the neodymium magnets into the channels on the diffuser.
  4. Screw the base, lid, and diffuser together. If screw holes are too tight heat the screws with a soldering iron.
  5. Press magnets into the logo part, making sure they are the right polarity and attach it to the diffuser.
  6. Plug it in and enjoy!

Notes

This is more of a concept than a finished piece. Some parts may not be perfect but they come together to create a piece of beauty.

Some photos may not exactly resemble the 3d models as updates are being made.

Parts of the code were made with the help of geneterave AI.