Overview

The Path to Prop Maker 

Use your maker skills and become the Jedi you were meant to be! Construct your own lightsaber using 3D printed parts and electronics from Adafruit. This advanced prop uses an accelerometer to detect swings and hits to trigger super bright NeoPixels with full sound FX!

3D Printed Props

Designed to be 3D printed with multi-material setups for creating custom color combinations. This prop is released as an open source design. Built-in access to the Adafruit Prop-Maker FeatherWing and made to be taken apart and reassembled. It's not just for show, we engineered it to take heavy hits*! Will you join the light side or the dark side?

Our previous prop builds required wiring many boards together to get what essentially is a Prop-Maker FeatherWing. For example, our Ray Gun project employed a micro-controller, audio amp, sound effects board, accelerometer, usb lipo charger, laser module and a perf-board to put it all together. Thats a-lot of wiring! 

Prop-Maker FeatherWing

We think the Adafruit Feather form factor is the perfect size for building props. With the FeatherWing ecosystem, you can easily add-on new features! The Prop-Maker FeatherWing is designed for creating advanced props using motion, lights and sound. The LIS3DH accelerometer can detect steps, swings and hits. It has an on-board class-D audio amp for blasting sound effects. For creating stunning lighting effects, the built-in NeoPixel driver and 3W RGB LED driver are essential.

Hilt Buttons

The hilt design features two buttons for controlling the blade. The clamp allows for any 16mm diameter panel mounted buttons. The length of the buttons are limited to the inner diameter of the hilt (40mm) which accommodates any of these buttons.

Non-Adafruit Parts

Hardware Supplies

Prerequisite Guides

If you're new to Adafruit Feather M4 Express, CircuitPython or soldering, take a moment to walk through the following guides to get you started.

We designed the hilt to be 3D printed with multi-material extrusion but we also offer parts for single extruders. One of the main goals for the hilt was to have the ability to access the electronics via door or hatch. The Prop-Maker FeatherWing is accessible through an opening on the side of the barrel. This allows for adjusting volume, accessing the reset button and any of the on-board components.

With all of the components the saber weights about 1.5lbs (0.68 kg). Removing the blade from the hilt allows for transporting – So it's great for taking to cons and events!

So who's crazy enough to design build their own lightsaber? A Maker, of course! We hope to see both software engineers and mechanical designers use the Adafruit Feather and Prop-Maker FeatherWing to build their own props. Please use our guide as a reference.

Circuit Diagram

Circuit Diagram

This provides a visual reference for wiring of the components. They aren't true to scale, just meant to be used as reference. This diagrams was created using Fritzing software.

Wired Connections

The Prop-Maker FeatherWing is fitted on top of Adafruit Feather M4 Express via short female/male headers. The RGB LED metal pushbutton uses several connections that are wired to the FeatherWing. The speaker is connected via a molex pico blade connector. The battery uses a JST PH connection that plugs in directly to the Adafruit Feather.

On/Off Switch or Button

Tying the enable and ground pins on the Feather will essentially shut off the power – Use a 16mm pushbutton with on/off latch. If you'd like to keep the two buttons in the hilt as momentary push buttons, you can optionally solder a slide switch directly onto the Prop-Maker FeatherWing.

RGB LED Button Connections

  • SWITCH pin on Prop-Maker FeatherWing to signal on Switch
  • GND pin on Prop-Maker FeatherWing to ground on Switch 
  • RED pin on Prop-Maker FeatherWing to RGB LED red cathode
  • GREEN pin on Prop-Maker FeatherWing to RGB LED green cathode
  • BLUE pin on Prop-Maker FeatherWing to RGB LED blue cathode
  • V+ pin on Prop-Maker FeatherWing to RGB LED common anode

NeoPixel Connections

  • NEOPIX pin on Prop-Maker FeatherWing to Data-In on NeoPixel Strip
  • GND pin on Prop-Maker FeatherWing to GND on NeoPixel Strip
  • V+ pin on Prop-Maker FeatherWing to +5V on NeoPixel Strip

Powering

The Adafruit Feather M4 Express can be powered via USB or JST using a 3.7v lipo battery. In this project, a 4400mAh lipo battery is used. The lipo battery is rechargeable via the USB port on the Adafruit Feather.

Software

Setup Adafruit Feather M4 for CircuitPython

Your Feather M4 should already come with CircuitPython but maybe there's a new version, or you overwrote your board with Arduino code! In that case, see the below for how to reinstall or update CircuitPython. Otherwise you can skip this and proceed with the build.

CircuitPython Libraries

Install the necessary Adafruit CircuitPython libraries by downloading the latest bundle. Unzip the file and locate the needed libraries. Drop the libraries into a folder named "lib" on the CIRCUITPY drive.

For non-express boards like the Trinket M0 or Gemma M0, you'll need to manually install the necessary libraries from the bundle.

Required CircuitPython Libraries:

  • neopixel
  • adafruit_lis3dh
  • adafruit_bus_device

Before continuing make sure your board's lib folder or root filesystem has the neopixel, adafruit_lis3dh, and adafruit_bus_device files and folders copied over.

Sound Effects

The code was written to call on five different sound effects depending on the actions. You can make your own audio files or use the royal-free ones we've provided. Be sure to create a new folder named  "sound" on to CIRCUITPY drive and drop in the audio files.

Adafruit CircuitPython supports 16-bit, Mono, 22.050kHz .wav audio format.

  • Power on – on.wav
  • Idle humming – idle.wav
  • Swing whoosh – swing.wav
  • Crash strike – hit.wav
  • Power off – off.wav

Upload The Code

Copy and paste the code below into a new text document (we recommend using Mu as your editor, which is designed for CircuitPython.). Save the file and name it as main.py

Once the files has been uploaded to the drive, the board will automatically reboot and run the code.

Download: file
# pylint: disable=bare-except

import time
import math
from digitalio import DigitalInOut, Direction, Pull
import audioio
import busio
import board
import neopixel
import adafruit_lis3dh
import gc

# CUSTOMIZE YOUR COLOR HERE:
COLOR = (0, 100, 255) #cyan

# CUSTOMIZE SENSITIVITY HERE: smaller numbers = more sensitive to motion
HIT_THRESHOLD = 350
SWING_THRESHOLD = 125

NUM_PIXELS = 85
NEOPIXEL_PIN = board.D5
POWER_PIN = board.D10
SWITCH_PIN = board.D9

enable = DigitalInOut(POWER_PIN)  
enable.direction = Direction.OUTPUT
enable.value =False

red_led = DigitalInOut(board.D11)
red_led.direction = Direction.OUTPUT
green_led = DigitalInOut(board.D12)
green_led.direction = Direction.OUTPUT
blue_led = DigitalInOut(board.D13)
blue_led.direction = Direction.OUTPUT

audio = audioio.AudioOut(board.A0)     # Speaker
mode = 0                               # Initial mode = OFF

strip = neopixel.NeoPixel(NEOPIXEL_PIN, NUM_PIXELS, brightness=1, auto_write=False)
strip.fill(0)                          # NeoPixels off ASAP on startup
strip.show()

switch = DigitalInOut(SWITCH_PIN)
switch.direction = Direction.INPUT
switch.pull = Pull.UP

time.sleep(0.1)

# Set up accelerometer on I2C bus, 4G range:
i2c = busio.I2C(board.SCL, board.SDA)
accel = adafruit_lis3dh.LIS3DH_I2C(i2c)
accel.range = adafruit_lis3dh.RANGE_4_G

# "Idle" color is 1/4 brightness, "swinging" color is full brightness...
COLOR_IDLE = (int(COLOR[0] / 3), int(COLOR[1] / 3), int(COLOR[2] / 3))
COLOR_SWING = COLOR
COLOR_HIT = (255, 255, 255)  # "hit" color is white

def play_wav(name, loop=False):
    """
    Play a WAV file in the 'sounds' directory.
    @param name: partial file name string, complete name will be built around
                 this, e.g. passing 'foo' will play file 'sounds/foo.wav'.
    @param loop: if True, sound will repeat indefinitely (until interrupted
                 by another sound).
    """
    print("playing", name)
    try:
        wave_file = open('sounds/' + name + '.wav', 'rb')
        wave = audioio.WaveFile(wave_file)
        audio.play(wave, loop=loop)
    except:
        return

def power(sound, duration, reverse):
    """
    Animate NeoPixels with accompanying sound effect for power on / off.
    @param sound:    sound name (similar format to play_wav() above)
    @param duration: estimated duration of sound, in seconds (>0.0)
    @param reverse:  if True, do power-off effect (reverses animation)
    """
    if reverse:
        prev = NUM_PIXELS
    else:
        prev = 0
    gc.collect()                   # Tidy up RAM now so animation's smoother
    start_time = time.monotonic()  # Save audio start time
    play_wav(sound)
    while True:
        elapsed = time.monotonic() - start_time  # Time spent playing sound
        if elapsed > duration:                   # Past sound duration?
            break                                # Stop animating
        fraction = elapsed / duration            # Animation time, 0.0 to 1.0
        if reverse:
            fraction = 1.0 - fraction            # 1.0 to 0.0 if reverse
        fraction = math.pow(fraction, 0.5)       # Apply nonlinear curve
        threshold = int(NUM_PIXELS * fraction + 0.5)
        num = threshold - prev # Number of pixels to light on this pass
        if num != 0:
            if reverse:
                strip[threshold:prev] = [0] * -num
            else:
                strip[prev:threshold] = [COLOR_IDLE] * num
            strip.show()
            # NeoPixel writes throw off time.monotonic() ever so slightly
            # because interrupts are disabled during the transfer.
            # We can compensate somewhat by adjusting the start time
            # back by 30 microseconds per pixel.
            start_time -= NUM_PIXELS * 0.00003
            prev = threshold

    if reverse:
        strip.fill(0)                            # At end, ensure strip is off
    else:
        strip.fill(COLOR_IDLE)                   # or all pixels set on
    strip.show()
    while audio.playing:                         # Wait until audio done
        pass

def mix(color_1, color_2, weight_2):
    """
    Blend between two colors with a given ratio.
    @param color_1:  first color, as an (r,g,b) tuple
    @param color_2:  second color, as an (r,g,b) tuple
    @param weight_2: Blend weight (ratio) of second color, 0.0 to 1.0
    @return: (r,g,b) tuple, blended color
    """
    if weight_2 < 0.0:
        weight_2 = 0.0
    elif weight_2 > 1.0:
        weight_2 = 1.0
    weight_1 = 1.0 - weight_2
    return (int(color_1[0] * weight_1 + color_2[0] * weight_2),
            int(color_1[1] * weight_1 + color_2[1] * weight_2),
            int(color_1[2] * weight_1 + color_2[2] * weight_2))

# Main program loop, repeats indefinitely
while True:

    red_led.value = True

    if not switch.value:                    # button pressed?
        if mode == 0:                       # If currently off...
            enable.value = True
            power('on', 1.7, False)         # Power up!
            play_wav('idle', loop=True)     # Play background hum sound
            mode = 1                        # ON (idle) mode now
        else:                               # else is currently on...
            power('off', 1.15, True)        # Power down
            mode = 0                        # OFF mode now
            enable.value = False
        while not switch.value:             # Wait for button release
            time.sleep(0.2)                 # to avoid repeated triggering

    elif mode >= 1:                         # If not OFF mode...
        x, y, z = accel.acceleration # Read accelerometer
        accel_total = x * x + z * z
        # (Y axis isn't needed for this, assuming Hallowing is mounted
        # sideways to stick.  Also, square root isn't needed, since we're
        # just comparing thresholds...use squared values instead, save math.)
        if accel_total > HIT_THRESHOLD:   # Large acceleration = HIT
            TRIGGER_TIME = time.monotonic() # Save initial time of hit
            play_wav('hit')                 # Start playing 'hit' sound
            COLOR_ACTIVE = COLOR_HIT        # Set color to fade from
            mode = 3                        # HIT mode
        elif mode is 1 and accel_total > SWING_THRESHOLD: # Mild = SWING
            TRIGGER_TIME = time.monotonic() # Save initial time of swing
            play_wav('swing')               # Start playing 'swing' sound
            COLOR_ACTIVE = COLOR_SWING      # Set color to fade from
            mode = 2                        # SWING mode
        elif mode > 1:                      # If in SWING or HIT mode...
            if audio.playing:               # And sound currently playing...
                blend = time.monotonic() - TRIGGER_TIME # Time since triggered
                if mode == 2:               # If SWING,
                    blend = abs(0.5 - blend) * 2.0 # ramp up, down
                strip.fill(mix(COLOR_ACTIVE, COLOR_IDLE, blend))
                strip.show()
            else:                           # No sound now, but still MODE > 1
                play_wav('idle', loop=True) # Resume background hum
                strip.fill(COLOR_IDLE)      # Set to idle color
                strip.show()
                mode = 1                    # IDLE mode now

3D Printing

Saber Hilt Parts

Parts are designed to be 3D printed with FDM based machines. STL files are oriented to print "as is". Machines with dual extrusion or single extrusion setups are listed below with parts name and description. Parts require tight tolerances that might need adjusting slice setting. Reference the suggested settings below.

Hilt Dimensions

Use these numbers to reference if these parts will fit on your 3D printer.

  • Inner Diameter: 40mm
  • Outer Diameter: ~50-60mm
  • Full Length/Tall: 12in (30.4cm)
  • Build Volume: 50mm x 60mm x 90mm

Dual Extrusion Parts

Parts that can be printed with multi-material setups are labeled with an "A" and "B" suffix. Machines with multi-material setups will need to be configured using their own software tools for slicing parts. The parts in this project were 3D printed with Ultimaker 3 and sliced with Ultimaker CURA 3.X. 

fwls-emitter.stl

Blade emitter holds polycarb tube

fwls-barrel.stl

Barrel houses the circuit board retainer.

fwls-clamp.stl

Attaches to barrel and battery holder. Houses 2x 16mm panel mounted pushbuttons.

fwls-powercell.stl

Stores the 4400mAh power cell.

fwls-pommel.stl

Houses the 40mm speaker. Screws onto the power cell holder.

Single Extrusion Parts

Single extrusion parts are labeled with "single" as the suffix. These parts were merged for 3D printing with a single extrusion machine. Additional post-processing can be done after printing.

Additional 3D Parts

These pare are separate from the hilt and can be 3D printed with any extrusion setup. 

fwls-feather-mount.stl

Mounting bracket for the Adafruit Feather.

fwls-wing-mount.stl

Mounting bracket for the Adafruit Prop-Maker FeatherWing.

fwls-blade-cap.stl

Press fits onto 1" OD polycarbonate tubes. Use translucent PLA material for best light diffusion.

Parts Assembly

This animation demonstrations how all of the pieces are assembled to form the hilt. The emitter screws onto the barrel. The clamp attached onto the barrel and power cell. Pommel screws onto the bottom of the power cell. An M3 x 16mm screw and nylon lock nut is inserted into the clamp and secures the assembly.

Slice Settings

Use these settings as reference. Values listed were used in Ultimaker's CURA 3.X slicing software.

  • 0.2mm Layer Height / 0.4mm nozzle
  • 0.38mm Line Width (inner & outer widths)
  • 60mm/s printing speed
  • 20% infill

Glitter Infused Filament from Fillamentum

The material used to print the parts in this project are from Fillamentum. From the PLA Extrafill line of filaments, Vertigo Galaxy PLA,  Rapunzel Silver PLA, and Vertigo Gery were used. Material comes in 2.85mm and 1.75mm diameters. 

Dry Fit Parts

The pommel and emitter parts feature threads that tend to have tight tolerances straight off the 3D printer. These parts may need to be dry fitted a few times to loosen up the tolerances. Gradually fasten the parts by twisting them together. If needed, a filing tool can help smooth out the edges.

What If I Don't Have A 3D Printer?

Not to worry! You can use a 3D printing service such as 3DHubs or MakeXYZ to have a local 3D printer operator 3D print and ship you parts to you. This is a great way to get your parts 3D printed by local makers. You could also try checking out your local Library or search for a Maker Space.

FeatherWing

Short Female/Male Headers

The Adafruit FeatherWings uses 12-pin and 16-pin headers. The short female/male headers are designed to be low-profile and works best in this project. In this arrangement, the male headers are soldered to the FeatherWing while the female headers are soldered to the Feather.

Solder Prop-Maker FeatherWing Headers

Start by inserting the short 12-pin and 16-pin male headers into the Prop-Maker. We suggest using a half-size breadboard to hold the headers in place while soldering. Solder all of the header pins to the Prop-Maker.

3d_printing_prop-header-install.jpg

3d_printing_prop-header-solder.jpg

3d_printing_prop-header-soldered.jpg

Install Female Headers

The female headers need to be solder to the Adafruit Feather. Soldering female headers can be a little tricky, so here's a little technique: Insert the female headers onto the male pins (the ones we soldered onto the FeatherWing). Then, Install the Feather to the female headers by laying it on top of the pins, bottom side up (reference the photo). Use a PCB vise to hold the board in place while soldering.

3d_printing_prop-female-install.jpg

3d_printing_prop-feather-install.jpg

3d_printing_prop-feather-solder.jpg

Soldered FeatherWing

Double check your work and ensure there are no cold solder joints. The Feather and FeatherWing should be able to be pulled apart. 

Buttons Wiring

Wiring Buttons

The RGB LED push button will be connected to the Prop-Maker FeatherWing. To make assembly more efficient, we suggest using JST-PH connectors – These allow quick connections of components. Pre-made cables are available and linked the overview page. The RGB LED buttons require a total of six wired connections, so a 4-pin and 2-pin JST connector can be used. We suggest using a wire length of 62mm (2.4in) for each connection.

The second button is extra and does not serve any functionality.

Silicone Cover Stranded Wire

Pre-made JST cables are convenient but making durable connections can be achieved using silicone cover stranded wire. This 28AWG ribbon cable is really nice wire that is flexible and won't easily break. Using this wire and a JST-PH connector kit, you can create custom JST-PH cables.

JST-PH Cables

Take a moment to plan which wires you'd like to use for the buttons. Colored heat shrink tubing can be used to differentiate the connections. Each wire is about 62mm in length (124mm / 4.8in total length). 

Solder Wires to RGB LED Button

Pins of the RGB LED button are labeled on the bottom of the plastic body. Reference these labels to match the wires with the RGB LED pins on the Prop-Maker FeatherWing. The polarity will need to match.

Solder Wires to Pushbutton

A 16mm panel mounted button doesn't require matching polarity, so this can be soldered to which ever pin. These can connect to an available GPIO pin on the Prop-Maker FeatherWing.

 

Red button does not need to be wired. It's available as an extra if you want to write code to make it do something :)

Wired Buttons

Double check the wiring to ensure the buttons have solid connections. Now is a good time to check the wire lengths and trim any excess. The tips of the wires can be tinned with a bit of solder to make attaching them to the pins easier.

Switch Wire

To make assembly more efficient, the switch wire is soldered to the bottom of the Prop-Maker FeatherWing. Reference the labels and solder a 2-pin JST cable to the SWITCH and GND pins.

RGB LED Button Wire

Reference the RGB labels and solder a 4-pin JST cable to the Red, Green, Blue, and V+ pins on the FeatherWIng.

Extra Button

If you plan to write the second button, use an available digital pin, NOT the IRQ pin (it's used for the accelerometer to talk to the Feather M4).

Wired Prop-Maker FeatherWing

Double check your soldering to ensure the connections are solid.

Speaker Wiring

Wiring Speaker

The Prop-Maker FeatherWing features an on-board molex pico blade connector for audio output. The speaker will require a longer wire, so you will need to extend the cable using additional wires.

Suggested Wire Length: 250mm (9.8in)

3d_printing_speaker-wire.jpg

3d_printing_speaker-wire-solder.jpg

3d_printing_speaker-wired.jpg

Molex Pico Blade 2-pin Cable - 200mm

PRODUCT ID: 3922
When 0.1" is too big, and JST PH's too chunky, the ultra-slim "PicoBlade" is a reliable alternative. These are only 1.25mm pitch, but have a nice clicky...
$0.95
IN STOCK

Testing Components

Circuit Test

With the buttons and speaker now wired to the Prop-Maker FeatherWing, we can power up the circuit to test them out. The code and libraries should be uploaded to the Adafruit Feather. Connect all of the components before plugging in the battery. 

Trouble Shooting

The on-board NeoPixel will light up green if the code, wave files and libraries are good. If something isn't quite right, the NeoPixel will flash blue, yellow or red. Here are some common things to look for.

  • Required Libraries: 
    • adafruit_LIS3HD
    • adafruit_bus_device
    • neopixel

Blade Construction

Blade Construction

The blade is made from a thick 1in OD polycarbonate tube and an Adafruit mini skinny NeoPixel strip (1-meter, 144 pixels). The amount of pixels will be determined by the desired blade length. We suggest using sourcing a good quality tube from online shops like UltraSabers.com and TheCustomSaberShop.com

Polycarbonate Tubing

The tubes from UltraSabers.com are available in medium and heavy grade polycarbonate. These ship with press-fitted resin casted tips and include an inner plastic light diffuser. They're available in different lengths that are pre-cut.

Tubes from TheCustomSaberShop.com are less expensive but bare. These require DIY inner diffuser and tip. They're not as thick as the heavy grade polycarbonate tubes from UltraSabers.com. These can be pre-cut in size of your choosing, up to 40in length. 

Mini Skinny Pixels

The Adafruit Mini Skinny NeoPixel strips use NeoPixel Mini 3535 RGB LEDs on a flexible PCB. We found these smaller NeoPixel LEDs can fully illuminate the tube and evenly diffuse light. These do not require a second strip! We see benefits in using Mini Skinnys because you save cost on parts, less wiring work and longer battery life! Standard size RGB LED strips can be used but may require two strips to fully illuminate the polycarbonate tube.

Adafruit Mini Skinny NeoPixel Digital RGB LED Strip - 144 LED/m

PRODUCT ID: 2969
So thin. So mini. So teeeeeeny-tiny. It's the 'skinny' version of our classic NeoPixel strips!These NeoPixel strips have 144 digitally-addressable pixel Mini LEDs...
$64.95
OUT OF STOCK

Plastic Sticks

A strip of corrugated plastic sheet, sometimes referred to as Coroplast, is used to create a backing for the LED strip. This will make the strip more ridged and easier to insert into the polycarbonate tubing.

We used a 20in x 30in semi-translucent sheet that was 4mm thick with 4mm wide corrugations. To fit within the inner diameter of the polycarbonate tube, you will need to measure and cut the sheet down to two strips. These strips will need to be the length of your desired blade. For longer blades, use clear tape to join multiple strips together.

Stripping The Strip

Most NeoPixel strips ship with pre-soldered wires and a weather protective sheathing. The wires and sheathing will need to be removed in order to fit the LED strip into the polycarbonate tubing. Carefully use a box cutter knife to remove the hot glued tips from both ends of the the flexible PCB strip. Use a soldering iron to remove the wires, we'll replace them with a 3-pin JST-PH cable.

3d_printing_strip-remove-tips.jpg

3d_printing_strip-remove-wires.jpg

3d_printing_strip-remove-sheathing.jpg

Solder 3-pin JST Cable

Connect the wires from the 3-pin JST cable to the end of the NeoPixel strip with data in (as noted by the arrow goin to the right direction). Reference the labels on the strip and photos for matching polarity. We suggest using a set of third helping hands to assist in holding wires in place while soldering. 5V (red) is on the left, Data-In (white) middle, Ground (black) on the right.

3d_printing_strip-3pin.jpg

3d_printing_strip-3pin-solder.jpg

3d_printing_strip-3pin-wired.jpg

Strain Relief

Pulling and twisting the cable will eventually wear about the strands of wire. To reduce the amount of stress from excessive handling, use hot glue or a silicone-based adhesive over the solder pads. 

Test NeoPixel LED Strip

Double check your wiring to ensure the polarities are correct. The 3-pin JST connector can be plugged directly into the NeoPixel port on the Prop-Maker FeatherWing. Power the Adafruit Feather on by plugging in the lipo battery. Use the button switch to activate the NeoPixel strip. 

Cut Strip

The number of pixels and length of strip is dependent on your desired blade length. We created a 24in and 32in blade in our builds. The numbers below are from a 144/meter Mini Skinny NeoPixel Strip. Use flush cutters to cut in between the copper pads on the flexible PCB.

  • 24in – 85 x NeoPixel LEDs
  • 32in – 114 x NeoPixel LEDs

Strip Stick Sandwich

We'll sandwich the Mini Shinny NeoPixel strip in between two strips of corrugated plastic. I suggest using double-sided nitto tape to secure the LED strip to one of the plastic sticks and then wrapping the second stick on top with clear tape. The second stick provides stability and light diffusion necessary for even illumination.  

Nitto Tape

Double-sided nitto tape has a strong adhesive that is good for sticking things together. Cut several strips and spaced them out. Evenly distribute the strips of tape across the length of the plastic strip. 

Peel & Stick

Carefully remove the protective film from the top layer of each strip. Position the LED strip over the plastic stick and slowly lower onto the tape. Inch the strip onto the tape by pressing it down. Try to keep the strip straight and true.

Tape Sticks

Place the second plastic strip over the LED strip and wrap clear tape around to secure them together. Hold the two strips together while apply the tape. Try to keep the edges straight and true. 

3d_printing_strip-stick-duo.jpg

3d_printing_strip-duo-tapped.jpg

Test Strip

Power on the circuit to test out the LED strip. The connections should be capable of hand handing and a bit of movement but take care and treat it delicately. 

Install LED Strip

Insert the LED strip assembly into the polycarbonate tubing. The light source is thin enough for it to wrap around the other side and illuminate the tubing. There is a slight variation in the brightness at close inspection but looks fully lit for the most part.

Plug The Tube

The LED strip assembly needs to be secured to the tube or else it will fall out. To keep it in place, use clear tape or hot glue to seal the bottom of the tube. A bit of light leaking near the bottom tube is fine and will actually add a slight lighting effect to the FeatherWing.

3d_printing_strip-tube-end.jpg

3d_printing_strip-tube-tape.jpg

Install Blade to Emitter

The polycarbonate tubing is press fitted into the blade emitter. Insert the 3-pin JST cable through the top opening of the emitter and carefully press the tubing. Firmly grasp the tubing and emitter while forcing them together. You may use... the force to do this (couldn't resist!).

Constructed NeoPixel Blade

At this point we can test out the LED strip again. Take a moment to make tweaks if necessary. I found the light diffusion in the blade construction to be interesting. Originally I used two strips of high density, 5050 NeoPixel strips. I was surprised to find a single Mini Skinny NeoPixel strip could decently diffuse the tubing. There is a slight variation in brightness on the backside but it's not that noticeable. Feel free to experiment with different strips, DotStar LEDs even! I constructed two blades with different lengths and can swap between the two! 

Board Assembly

PCBs, Hardware, and Mounts

The Adafruit Feather and Prop-Maker FeatherWing PCBs are secured to separate mounting brackets. When the boards snap together they form a retainer that slides into the barrel of the hilt. Use the following suggested hardware to secure the PCBs.

Use an M2.5 size tap to create threads in holes of the 3D printed mounting brackets.

Hardware Supplies

3d_printing_feather-screw.jpg

3d_printing_feather-secure.jpg

Secure Adafruit Feather

Hold the PCB and mounting bracket together while inserting a machine screw through one of the mounting holes. Use a screw driver to fasten the screws into the brackets. Fasten the threaded inserts to the screws tightly to secure the parts together. Reference the photos for correct orientation.

3d_printing_wing-screw.jpg

3d_printing_wing-secure.jpg

Secure Adafruit Prop-Maker

Repeat the same process to secure the Prop-Maker FeatherWing to the mounting bracket. I used needle nose pliers to tightly fasten the threaded inserts. I found hex jam nuts to be too big for them to sit beside the headers.

3d_printing_usb-wire.jpg

3d_printing_usb-wire-solder.jpg

3d_printing_usb-wired.jpg

MicroUSB Extension

The orientation of the Feather PCB and Prop-Maker FeatherWing are in a way where the micro USB connector isn't easily accessible in the hilt. Use a micro USB cable and micro USB breakout board to create an extension. The microUSB breakout PCB features two mounting holes that can be used to secure the PCB to the Feather mounting bracket. To create this, I cut a micro USB cable (one with data wires!)  and soldered it to the pins on the breakout.

3d_printing_usb-installed.jpg

3d_printing_usb-feather.jpg

3d_printing_usb-plug-feather.jpg

Install Feather to Prop-Maker

Orient the two PCBs so the headers and pins match. Carefully connect them by firmly pressing them together. The wiring and cables should be kink free with enough wiggle room. 

Install + Connect MicroUSB

Use 2x M2.5 x 8mm flat head machine screws to secure the micro USB breakout to the 3d printed mounting bracket for the feather. Plug in the microUSB cable to the Adafruit Feather with the cable inside the bracket. Double check your wiring for solid connections.

Final Assembly

Install RGB LED Button

Insert the JST cables from the button through one of the holes in the clamp. Press the body of the button through the hole until it's flush. If needed, use a filing tool or hobby knife to open up the hole to loosen the tolerance.

Secure RGB LED Button

Insert the hex nut through the JST cable and fasten onto the thread of the button housing. Tightly fasten the hex nut to secure the button in place. Needle nose pliers can help assist in grasping the hex nut. The clamp is symmetrical so the buttons can be positioned in either direction. 

Install Second Button

Repeat the same process to install the second push button. Most 16mm panel mounted buttons should fit within the clamp. Its about 40mm diameter internal, so as long as the length of the button does not exceed it should fit. Wiring can be adjusted and repositioned for more  clearance.

Install Speaker to Pommel

Place the 40mm speaker into the pommel with the magnet driver facing up. The body of the speaker resides in the pommel with little wiggle room. It doesn't necessary "snap in". Instead, the battery will keep the speaker in place once installed.

Install Battery

Grab the power cell part and insert the 4400mAh lipo battery through the opening. The battery can only be inserted to one side (the one with the threads). The other side will prevent the battery from being inserted all the way through the part. The JST cable from the battery should be coming out through the top (the side with no threads).

Install Speaker Wiring

The molex pico connector is threaded through a cutout on the inside of the powercell. Pass the cable through and pull through the top of the powercell part. There's two available cutouts to allow the cable to pass through.

Powercell and Pommel

The orientation of the battery matters and needs to be installed with the JST cable facing the non-threaded opening. Be sure the side of the powercell with threads are close to the pommel. These two will be joined by twisting them together. Threads!

Install Pommel to Powercell

Place the pommel over the end of the powercell with the threading and begin to screw it on. Fasten the pommel until it's fully tightened. Be cautious of the wiring as it could be damaged by excessive twisting.

Install PCB mount 

Grab the PCB assembly and begin to insert it through the barrel. The cables should go through first. Slowly work the PCB assembly into the barrel by carefully pressing it trough. It the tolerances are too tight, use a filing tool to sand the edges.

Barrel USB Wires

The micro USB breakout is accessible from the top of the barrel. Use this port to program the Adafruit Feather, change sounds, code, etc. Pull the wires through the bottom opening of the barrel. The bottom of the barrel will not allow the PCB assembly to pass all the way through.

3d_printing_barrel-usb.jpg

3d_printing_barrel-wires.jpg

Install Clamp to Powercell

Grab the clamp and orient it with the Powercell. Insert the speaker and battery cables up through the clamp. Bring them together and press the clamp over the powercell. Line up the groves and twist to lock them together. 

Connect Cables

Grab the JST connectors from the wiring assembly and check everything is accounted for. Bring the barrel close and plug in the JST connectors. Take a moment to thoroughly inspect the wiring and ensure the connections and polarities are matching.

3d_printing_clamp-barrel-installed.jpg

3d_printing_clamp-barrel-wires.jpg

3d_printing_clamp-barrel-connect.jpg

Connect Pico

Pull the pico connector from the speaker through the opening in barrel. Rotate the PCB assembly to better access the speaker port on the Prop-Maker FeatherWing. Plug in the connector to the speaker port.

Install Clamp to Barrel

Use your thumb to pull apart the clamp and insert the barrel. Twist the parts until they the notches line up and lock into place. Make sure not to dislodge the clamp from the powercell. 

Connect Battery to Feather

Pull the JST cable from the battery through the opening in the barrel and connect it to the battery port on the Adafruit Feather. You may need to adjust the PCB retainer by turning it to one side to better access the port. If the PCB retainer gets stuck, you can use a file tool to loosen the tolerances by sanding the edges.

3d_printing_battery-jst-connect.jpg

3d_printing_installed-hilt.jpg

Secure Clamp

Insert a M3 x 16mm long machine screw through the hole in tab of the clap. Press it all the way trough and insert a nylon lock nut onto the thread of the screw. Use a screwdriver and pliers to securely fasten together.

Connect NeoPixel Blade

Grab the 3-pin JST cable from the blade and insert it it into the NeoPixel port on the Prop-Maker FeatherWing. The PCB retainer may need to be adjusted to better access the JST port. Wrap the wiring inside of the barrel and begin to twist the emitter onto the barrel. The screw threads mate together and are fastened tightly.

3d_printing_hilt-blade-connect.jpg

3d_printing_hilt-blade-wire.jpg

Threaded Emitter

The Emitter is designed to be removed by unscrewing it from the barrel. The micro USB port is accessible with the emitter removed for recharging the battery or programming the Adafruit Feather.

Test, tweak and Saber!

Give your saber a test by winging it around (careful not to knock anything over!). The durability of your saber lies in your construction. Take the time to true up any edges, shorten or adjust wires and cables. 

Maintenance

Recharging Battery

The Adafruit Feather series has a built-in battery charger with the microUSB port. However, it only has a charging rate of 100mAh – That means it would take 44 hours to fully recharge a 4400mAh battery!

For a faster charge, we recommend using the Adafruit Micro-Lipo Charger – This has a charging rate of 500mAh (0.5A jumper must be soldered) so it only takes 8 hours to fully recharge a 4400mAh battery.

Adafruit Micro-Lipo Charger for LiPo/LiIon Batt w/MicroUSB Jack

PRODUCT ID: 1904
Oh so handy, this little lipo charger is so small and easy to use you can keep it on your desk or mount it easily into any project! Simply plug it via any MicroUSB cable into a USB...
$6.95
IN STOCK
Only use Adafruit Micro-Lipo Charger to charge lithium ion packs from Adafruit!! Other chargers could potentially cause damage.

Reprogramming

The Adafruit Feather and Prop-Maker FeatherWing are accessible by unscrewing the blade emitter. Use the microUSB breakout extension to update code, flash new firmware or recharge the battery (although slowly!). Depending on how the Feather and FeatherWing are oriented, the opening in the hilt allows access to the RESET button, audio volume trim pot, and JST connectors for the speaker and battery.

This guide was first published on Oct 31, 2018. It was last updated on Oct 31, 2018.