OK everybody welcome the newest member to the Nanoleaf family! Little Baby Nanoleaf!! Now with lettered and numbered lenses! Also check the Baby Nanoleaf lenses https://www.printables.com/model/427212-baby-nanoleaf-lenses .
LEDs or Neopixels can be glued in horizontally. I put 2 LED slots for easy assembly and customization. I used Neopixels, an Attiny85, a micro USB cable, 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
I use 60 LEDS per meter or 3.2ft 100 led/ IP30-(this describes the LEDS waterproofing)
Push button https://www.amazon.com/
Micro USB Cable https://www.amazon.com/
Attiny85 https://www.amazon.com/
Alternatively you can purchase a WS2812B controller (ONLY USE THE POWER SUPPLY YOUR LIGHTS ARE RATED FOR!!!)
WS2812B controller https://www.amazon.com/
5V 3Amp Power supply - ALITOVE 5V 3A 15W AC 100V~240V to DC https://a.co/d/0hkH8SWY
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/
#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 49
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(50); // 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() 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); // 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 rainbow3(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, 3); // 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 rainbow4(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, 6); // 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 }}
The author marked this model as their own original creation.