What you're getting

Crystal Glow Knuckles

This wearable LED glow ring is a great way to get started with the Pro Trinket. It has a LiPo power source, 3 NeoPixel LED's, and a power backpack to charge passively via USB. All the printed components can be generated in a single build without support material.

Prerequisite Guides

Before getting started you should take a look at the Adafruit guides that cover the tech we'll be putting inside this ring.

3D Printers Can Make Things That Make Things

This is also an intro to mold making and casting using a 3d printer, as the silicone glow crystals are cast out of a mold that prints right along with the ring components.

Design overview

Basic Assembly

This design stars 3d printed parts. The printed components are designed to fit together pretty closely. They also hug the circuitry pretty tightly. Depending on your printer, infill, material, astrological sign, etc. you may have to file off a little here and there to get everything to snap together. Hopefully the tolerances designed into the components will be enough to equal smooth sailing.

The ring is built like a sandwich, with all the components mounting into the ring body layer by layer except for the cast crystals, which get pushed up into a retaining chanel in the ring cap. To manage wires, you'll want to do a test of the whole circuit with wires that are a little long and then trim them to length and re-solder once you have a sense for where everything should fit.

Wiring Overview

Here is how you hook up the electronics that power the ring. If you get confused during assembly, refer back to this diagram. If you're new to electronics, it helps to assemble and program everything leaving the wires long so you can easily resolder and troubleshoot. When you get an understanding of the design and where things fit in the ring, trim the wire down for the final assembly.

Gather your materials

Collect Your Supplies

The first step is to get all of the required components together.

This project will require:

You'll need these tools:

  • Soldering Iron
  • Hot glue gun
  • Xacto
  • Nail file

Optional stuff that I used to make the process easier:

Cast your crystals

Cleanup

You should start by cleaning up your prints. Whiskers hanging off your parts or overflowing blobs of material should be trimmed off with an Xacto or matte knife.

Mold Assembly

Assemble the crystal mold according to this diagram. The top portion should simply snap onto the bottom with just a little bit of force. Getting it back off after everything's cast should be easily done by hand. If you're having trouble, slip a flathead screwdriver underneath one of the arms of the top half to pry it up.

Collect Casting Materials

Gather everything you'll need to cast the silicone in one place. This means finding your silicone, gloves, stirring sticks, measuring cup, scale, and mold.

Measure and Mix

Measure and mix your silicone. Any two-part RTV silicone will work here, but I'm using a 50/50 ratio rubber called EcoFlex 00-50 because I happen to have it on hand. The mold only requires about 15g of material to fill, but you should mix up 20 to 30 grams of material just to make sure you have a little to spare in case you spill or a lot sticks to the side of your cup.

I use a vacuum chamber to degas my silicone to make it extra clear and bubble-free. This isn't an essential step, but it adds an extra bit of polish that helps the ring look professional.

If you've never cast anything in silicone before, this is an excellent tutorial on mixing, degassing, and pouring rubber.

Fill Mold

Pour your silicone through the holes in the top of the mold. When it's filled to the top rotate the mold around and tap it gently against your work table to make sure you work out any trapped bubbles. If you accidentally overfill the mold and silicone is flowing down the sides just wipe it down until the silicone's flush with the top.

Don't worry about a little bit of over or under filling. You can always trim bits away if they're preventing your ring from snapping together during final assembly.

Cure and Demold

Let your silicone cure overnight. I keep the cup everything was mixed in around to poke at the bottom and tell when everything's cured so I can cheat and pop parts out ASAP. Some brands of silicone will cure much faster, but everything's guaranteed to be cured and safe to demold in 24 hours.

All you have to do to get the silicone out of the mold is pop off the top and gently pull the silicone by a corner. It should gradually come away from the mold. Now's your chance to clean up any dangling bits or thin sheets of material that crept between the two mold halves (this skin is called mold flash).

If your silicone is tacky and you're worried about it picking up dust from the environment you can dust the part with talc, but if your part is fully cured any dust that settles on it should be easily removed with a damp paper towel.

Wire LiPo Backpack

Cut and Solder

The process of soldering the Power Backpack to the Trinket Pro is thoroughly coverd in this tutorial. I'd just like to remind you that you've got to cut the trace indicated in the image above to be able to turn the ring on and off using the slide switch.

Once your backpack is soldered to your board, cut the pins sticking up out of the board with some wire cutters to keep everything neat.

Wire Neopixels together

Solder Neopixels

Wiring the NeoPixels is simple. Just set each one in a cavity on the LED holder and wire them according to the diagram on the back. Just remember to keep your wire colors consistant. I used red for power, white for ground, and black for digital signal.

You can find a thorough guide on wiring and troubleshooting NeoPixels here.

Wire Neopixels to Trinket

Connecting Everything to the Board

Now it's time to wire the NeoPixels to your board. I left about 3cm of wire on the LED's so the holder could rotate around without snagging the wires or leaving loose coils hanging out of the ring.

Solder the LED ground to the Pro Trinket ground. Solder the LED 5V pad to the Bat+ connection. Remember that you're soldering these to the flat side of the Pro Trinket, so everything's going to be soldered with the board upside-down. You're also connecting these wires to the pins you trimmed off from the Power Backpack. It's not going to be a bulletproof connection, but since these components aren't going to be moving around inside the ring the wires fatiguing and snapping shouldn't be a problem.

The LED data line (black wire) goes to Pin 0 on the Trinket. It's labeled RX on the board. This one's just a standard through hole soldering job so it should be no problem.

If you're confused, this diagram should help.

Wire switch

Switch Wiring

Wiring the switch is simple. All you have to do is solder wires to any two taps on the switch and then solder the other two ends to the through holes in the power backpack (the same holes you cut the trace between before). I also added a little bit of heat shrink tubing to the wires on the switch end to keep anything from shorting out.

Program Trinket and test code

Program and Test

Now, you should be able to plug in the Pro Trinket to your computer viat the USB A/Micro B cable and get some code on it. The code below is modified from the LED Longboard tutorial.

I found that it was easiest to get Arduino open and get the code all set before plugging the Pro Trinket in, as it's only available for downloading code for a few seconds before it goes into a different mode that doesn't speak to the USB port.

Now, when you unplug the USB port and flip the switch the Trinket should boot for about five seconds and you'll see a rainbow wave of color across the NeoPixels.

Download: file
#include <Adafruit_NeoPixel.h>

#define PIN 0

// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(20, PIN, NEO_GRB + NEO_KHZ800);

// Here is where you can put in your favorite colors that will appear!
// just add new {nnn, nnn, nnn}, lines. They will be picked out randomly
//                          R   G   B
uint8_t myColors[][3] = {{232, 100, 255},   // purple
                         {200, 200, 20},   // yellow 
                         {30, 200, 200},   // blue
                          };
                               
// don't edit the line below
#define FAVCOLORS sizeof(myColors) / 3

void setup() {
  strip.begin();
  strip.setBrightness(40);
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
//flashRandom(5, 8);  // first number is 'wait' delay, shorter num == shorter twinkle
//flashRandom(5, 5);  // second number is how many neopixels to simultaneously light up
//flashRandom(5, 11);
//colorWipe(strip.Color(232, 100, 255), 50); // Red
//colorWipe(strip.Color(200, 200, 20), 50); // Green
//colorWipe(strip.Color(30, 200, 200), 50); // Blue
rainbowCycle(20);
}

// Fill the dots one after the other with a color
void 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(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

void flashRandom(int wait, uint8_t howmany) {
 
  for(uint16_t i=0; i<howmany; i++) {
    // pick a random favorite color!
    int c = random(FAVCOLORS);
    int red = myColors[c][0];
    int green = myColors[c][1];
    int blue = myColors[c][2]; 
 
    // get a random pixel from the list
    int j = random(strip.numPixels());
    
    // now we will 'fade' it in 5 steps
    for (int x=0; x < 5; x++) {
      int r = red * (x+1); r /= 5;
      int g = green * (x+1); g /= 5;
      int b = blue * (x+1); b /= 5;
      
      strip.setPixelColor(j, strip.Color(r, g, b));
      strip.show();
      delay(wait);
    }
    // & fade out in 5 steps
    for (int x=5; x >= 0; x--) {
      int r = red * x; r /= 5;
      int g = green * x; g /= 5;
      int b = blue * x; b /= 5;
      
      strip.setPixelColor(j, strip.Color(r, g, b));
      strip.show();
      delay(wait);
    }
  }
  // LEDs will be off when done (they are faded to 0)
}

Trim wires and install electronics

Lay Out Components

Start assembling everything into the ring base by putting a dot of hot glue down where the switch rests. You should be able to push the switch into this recess, feeling just a bit of friction as it goes in.

Insert Trinket

Next, place the Trinket face down so that the small plastic pin protruding up from the center of the ring base fits into the screw hole of the trinket. The wires from the battery should slip into the little notch next to the switch.

To keep everything together, use a tiny dot of hot glue to hold the LiPo to the Trinket.

Place LED Holder

Now, rotate the LED holder into place and make sure you don't have too much wire around keeping the ring from fitting together cleanly. I ended up having to trim down the switch and LiPo wires to save space, but your mileage may vary.

Insert crystals into ring cover

Assemble Cap

You're almost done. Take your cast crystals and pop them into the ring cover. You should be able to feel when the gasket around the crystals lines up with the recess printed into the cap. You may have to work everything together by squeezing along the seam between the cap and the crystals with a finger, but it should work itself out.

Snap ring together

Snap Cap to Base

Tuck the LED holder up into the cavity in the silicone line it up for snapping the cap onto the base. Angle the cap to get the snaps on one side aligned and then press down to let the other set slide home. If you don't feel a click, it might be because some material slumped on the overhangs of the cap while it was printing. You can adjust this with a small file or emery board.

Wear and admire

You've Got It

If you've gotten this far you should have a glowy LED crystal ring on your hands. Remember to charge it by plugging in the USB every so often and it should give you hours of irridescent fun at a time.

This guide was first published on Jun 04, 2015. It was last updated on Jun 04, 2015.