DIY Neopixel Lightsaber Blade
I designed this lightsaber in Blender, and I sell the files on my Etsy. I got requests from a number of Instagram followers for a tutorial on how to make the lightsaber blade for a Lightsaber lamp. This Instructable will discuss the building of the blade itself.
Supplies
- Windows PC with Arduino IDE installed (or IDE of choice)
- USB-A to USB-Micro data cable ($7)
- Raspberry Pi Pico ($8)
- 3.2 ft 144 LED WS2812 LED strip ($12)
- Lightsaber blade ($15) - I purchased this 15" blade from the Etsy seller Bossaber. It is a replacement blade for an ultrasaber (1" diameter).
- 3D printer with white filament (plastic type does not matter). This will be used to print a diffuser.
- Drill and 5/8" drill bit
- (Optional) 2 on/off pushbutton switch ($8) to change colors, some wiring, and one 10K Ohm resistor
Remove Cap and Drill Hole Through the Tip
Unfortunately, I didn't think of taking good photos as I was making this... Thankfully, it is a fairly straightforward process. Pull off the white cap on the base of the lightsaber blade. This will give you access to the inside of the tube. You should see a reflective material lining the inside walls.
Take your drill and 5/8" drill bit, and drill a hole straight through the center of the blade's tip. The 5/8" bit leaves a hole just wide enough for the LED strip to pass through.
At this point, you should have holes on both ends of the saber blade.
Insert the LED Strip Into the Blade
Fold the 3.2' LED strip in half and insert it into the blade from the tip down (we want the Pi to be on the tip side of the blade). Print the DiffuserTube.stl that is included here. This tube is the full 15" tall. Depending on your printer, you may need to cut this in half and print the cuts twice. This tube diffuses the light of each individual LED pixel and makes it look more uniform. This gives a much more realistic effect that looks insane (especially on camera!)
A short mp4 video is included to show what the end result looks like. I apologize for the not-great quality of it. I didn't think to document my steps with good photos along the way.
Wire Up the Hardware
Take notice of the arrows on the WS2812 LED strip. Be sure to wire the leading end to your pi! Wire up your hardware exactly as pictured. The Pi Pico's GPIO1 pin is used as an output to command the LED color, and GPIO 17 and 18 are used as inputs to toggle between 4 desired color combinations. Conveniently enough, the Pi pico can adequately power the whole led strip solely from its VBUS (+5V) port.
Program the Pico
Plug in your USB-A to USB-micro data cable into your Pico and your computer. Open Arduino IDE and configure it for a Pi Pico on its auto-assigned COM port. Program your Pi Pico with the included Neopixel_Lightsaber.ino file. You will see 4 different color combinations that can be selected via the push button switches (red, green, blue, green crackle). These can be easily modified if you'd like a different color. The code is included here as well as the file itself below.
// This was written and compiled in Arduino IDE 2.2.1 for a Raspberry Pi Pico
// You will need to install the Adafruit_NeoPixel library
// Swaps among 4 different color options via 2 on/off switches.
#include <Adafruit_NeoPixel.h>
#define PIN_NEO_PIXEL 1 // Arduino pin that connects to NeoPixel
#define NUM_PIXELS 144 // The number of LEDs (pixels) on NeoPixel
#define PIN_SW1 16
#define PIN_SW2 17
#define CRACKLE_DELAY 50 // 50ms crackle flash
// 2 Switches were insterted to switch between 4 color options
int SW1 = 0;
int SW2 = 0;
Adafruit_NeoPixel NeoPixel(NUM_PIXELS, PIN_NEO_PIXEL, NEO_GRB + NEO_KHZ800);
void setup() {
NeoPixel.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
pinMode(PIN_SW1, INPUT_PULLUP);
pinMode(PIN_SW2, INPUT_PULLUP);
}
void loop() {
NeoPixel.clear(); // set all pixel colors to 'off'. It only takes effect if pixels.show() is called
int SW1 = digitalRead(PIN_SW1);
int SW2 = digitalRead(PIN_SW2);
//GREEN
if (SW1 == 0 && SW2 == 0){
for (int pixel = 0; pixel < NUM_PIXELS; pixel++) { // for each pixel
NeoPixel.setPixelColor(pixel, NeoPixel.Color(0, 255, 0)); // it only takes effect if pixels.show() is called }
NeoPixel.show(); // send the updated pixel colors to the NeoPixel hardware.
}
//RED
else if (SW1 == 1 && SW2 == 0){
for (int pixel = 0; pixel < NUM_PIXELS; pixel++) { // for each pixel
NeoPixel.setPixelColor(pixel, NeoPixel.Color(255, 0, 0)); // it only takes effect if pixels.show() is called
}
NeoPixel.show();
}
//BLUE
else if (SW1 == 0 && SW2 == 1){
for (int pixel = 0; pixel < NUM_PIXELS; pixel++) {
NeoPixel.setPixelColor(pixel, NeoPixel.Color(0, 0, 255));
}
NeoPixel.show();
}
//GREEN CRACKLE - Generates a randomized white flash
else if (SW1 == 1 && SW2 == 1){
for (int pixel = 0; pixel < NUM_PIXELS; pixel++) {
NeoPixel.setPixelColor(pixel, NeoPixel.Color(0, 255, 0));
}
int crack = random(3,140);
NeoPixel.setPixelColor(crack, NeoPixel.Color(255,255,255));
NeoPixel.setPixelColor(crack + 1, NeoPixel.Color(255,255,255));
NeoPixel.show();
delay(CRACKLE_DELAY);
NeoPixel.setPixelColor(crack, NeoPixel.Color(0, 255, 0));
NeoPixel.setPixelColor(crack + 1, NeoPixel.Color(0, 255, 0));
NeoPixel.show();
delay(random(500,5000));
}
}
Downloads
Package It All Up!
At this point, your blade is ready to be assembled. Insert the tip of your blade into the base and the butt of your blade into the 3D printed lightsaber emitter. There should be some LEDs sticking out that go up inside the emitter. These are what gives the Kyber crystal its glow.
Hide the electronic components inside the 3D printed base (All 3D printed files are included with the purchase of the Etsy link above).
It doesn't have to look pretty because no one will ever see it. I used hot glue to secure my Pi pico and switches inside the base and that works great. Plug in your Pi Pico to a power source to confirm functionality. If done properly, you should be able to cycle among your decided colors.
Figure Out How You Want Power
You have a couple options that you could potentially use for power. I dedicated my USB cable to this project to power everything via USB. I drilled a hole in the side of the base just big enough for the USB cable to pass through. I ran it through that and hot glued the USB cable in for a permanent connection.
You could potentially also use a rechargeable battery to power your Pi Pico as well. If you do decide to go this route, please take great care that you understand what you're working with. External battery packs such as LiPo or LiFe batteries can be extremely dangerous if used improperly and can be a great fire hazard.
In the end, you want a 5V power supply. USB is perfect for this and relatively safe, so I'd suggest going the USB cable power route, but other options do exist. Power supply options are to be chosen with experience level and desired usage in mind.
ENJOY!
That is it! Enjoy your incredibly realistic lightsaber blade!