March 17, 2024
Description
LEDs or Neopixels can be glued in either horizontally or vertically. I put 2 LED slots and tons of mounting holes for easy assembly and customization. I used an Attiny85 , 5V 3Amp power supply, 2 position switch, and a push button. I also designed a base with a spot for an IR motion detector. The code I used to program the ATTINY85 is at the bottom.
Neopixels https://www.amazon.com/
2 Â Position switch https://www.amazon.com/
Push button https://www.amazon.com/
Attiny85 https://www.amazon.com/
5V 2Amp power supply https://www.amazon.com/
Motion detector https://www.amazon.com/
Â
Alternatively you can purchase a WS2812B controller (ONLY USE A POWER SUPPLY YOUR LIGHTS ARE RATED FOR!!!)
WS2812B controller https://www.amazon.com/
5V 2Amp Power supply https://www.amazon.com/
Simply print out your shapes and some connectors. Assemble into desired shape then cover the extra slots with the side cover. Then string through your LED strip, mount it to the wall with screws or adhesive, add your lens, plug in the power and done!
The code I use is ArduinoIDE and the Adafruit libraries https://www.adafruit.com/Â
I can also make these for you, just message me at https://beautifulleds.etsy.comÂ
Â
// NEOPIXEL BEST PRACTICES for most reliable operation:// - Add 1000 uF CAPACITOR between NeoPixel strip's + and - connections.// - MINIMIZE WIRING LENGTH between microcontroller board and first pixel.// - NeoPixel strip's DATA-IN should pass through a 300-500 OHM RESISTOR.// - AVOID connecting NeoPixels on a LIVE CIRCUIT. If you must, ALWAYS// Â connect GROUND (-) first, then +, then data.// - When using a 3.3V microcontroller with a 5V-powered NeoPixel strip,// Â a LOGIC-LEVEL CONVERTER on the data line is STRONGLY RECOMMENDED.// (Skipping these may work OK on your workbench but can fail in the field)
#include <Adafruit_NeoPixel.h>#ifdef __AVR__#include <avr/power.h> // Required for 16 MHz Adafruit Trinket#endif#define LED_PIN Â Â 3
// How many NeoPixels are attached to the Arduino?#define LED_COUNT 72Â
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() { #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif strip.begin(); strip.show(); // Initialize all pixels to 'off' strip.setBrightness(200); // Set BRIGHTNESS to about 1/5 (max = 255) } void loop() {{  colorWipe(strip.Color(255, 0, 0), 20); // Red  colorWipe(strip.Color(255, 127, 0), 20); // Orange  colorWipe(strip.Color(255, 255, 0), 20); // Yellow  colorWipe(strip.Color(0, 255, 0), 20); // Green  colorWipe(strip.Color(0, 0, 255), 20); // Blue  colorWipe(strip.Color(75, 0, 130), 20); // Indigo  colorWipe(strip.Color(148, 0, 211), 20); // Violet  rainbow(5);  rainbow2(5);  rainbow3(5);  rainbow4(5);  colorWipe(strip.Color(148, 0, 211), 20); // Violet  colorWipe(strip.Color(75, 0, 130), 20); // Indigo  colorWipe(strip.Color(0, 0, 255), 20); // Blue  colorWipe(strip.Color(0, 255, 0), 20); // Green  colorWipe(strip.Color(255, 255, 0), 20); // Yellow  colorWipe(strip.Color(255, 127, 0), 20); // Orange  colorWipe(strip.Color(255, 0, 0), 20); // Red }}
// Fill the dots one after the other with a colorvoid colorWipe(uint32_t c, uint8_t wait) {Â for(uint16_t i=0; i<strip.numPixels(); i++) {Â Â Â strip.setPixelColor(i, c);Â Â Â strip.show();Â Â Â delay(wait);Â }}
void rainbow(int wait) { for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {  // strip.rainbow() can take a single argument (first pixel hue) or  // optionally a few extras: number of rainbow repetitions (default 1),  // saturation and value (brightness) (both 0-255, similar to the  // ColorHSV() function, default 255), and a true/false flag for whether  // to apply gamma correction to provide 'truer' colors (default true).  strip.rainbow(firstPixelHue, 1/2);//  // Above line is equivalent to:  // strip.rainbow(firstPixelHue, 1, 255, 255, true);  strip.show(); // Update strip with new contents  delay(wait);  // Pause for a moment }}
void rainbow2(int wait) { for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {  strip.rainbow(firstPixelHue);  strip.show(); // Update strip with new contents  delay(wait);  // Pause for a moment }}
void rainbow3(int wait) { for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {  strip.rainbow(firstPixelHue, 3);  strip.show(); // Update strip with new contents  delay(wait);  // Pause for a moment }}
void rainbow4(int wait) { for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {  strip.rainbow(firstPixelHue, 6);  strip.show(); // Update strip with new contents  delay(wait);  // Pause for a moment }}
Â
License:
Creative Commons — Attribution — Noncommercial