NeoPixel Tiara for Birthday or Prom

You can make a crown of light for prom or your birthday this year! A few free-wired NeoPixels make you the cyber-pageant queen.

For this project you will need:

Glamour shots by Andrew Tingle.

To keep up with what I’m working on, follow me on YouTubeInstagramTwitterPinterest, and subscribe to my newsletter. As an Amazon Associate I earn from qualifying purchases you make using my affiliate links.

Before you get started, follow the Gemma M0 guide or the Classic Introducing GEMMA guide 

Build it!

Above is the circuit diagram for the simple tiara. All ground pads are connected to GND on GEMMA, likewise all power pads are connected to Vout on GEMMA, and data lines are chained from D1 to the inward facing arrow on the first pixel, then from each pixel’s outward facing arrow to the next pixel’s inward facing arrow.

Strip the insulation from a long piece of solid-core hookup wire and clip it to one side of your headband. This will be the pixels’ ground bus.

Insert perpendicular wires through holes in the headband and curl their stripped ends around the long ground bus wire.

Crimp wire connections with pliers.

Be sure wire connections are tidy enough to nest snugly against the hair band, and solder connections in place.

Trim wires to the silhouette you like, then strip the ends. Bend the stripped ends over and hand the NeoPixels from them (through the pad marked -). Solder all NeoPixels, making sure they’re facing the same way.

Next use bits of wire in the shape of staples to connect up the data lines.

Solder wires from the + side of each pixel, and cut to length. Strip the ends and solder to one long power bus.

Connect power, ground, and data lines to GEMMA at the input end of the pixel chain. Plug in over USB and program it up! The basic sketch flashes the seven pixels randomly.

Get creative with your tiara design! This one uses a NeoPixel ring in the center, and the wiring is barely different than above.

Arduino Code

You’ll need to change a few lines in the NeoPixel library’s sample “strandtest” code regarding the data pin (1), type of pixels (RGB vs GRB), and number of pixels (5). The resulting (and slightly simplified) code is below:

//Random Flash animation for Neopixel circuits
//by Dano Wall and Becky Stern for Adafruit Industries
//based on the Sparkle Skirt, minus the accelerometer
#include <Adafruit_NeoPixel.h>

#define PIN 1

// 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(7, 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.setBrightness(40);; // Initialize all pixels to 'off'

void loop() {
flashRandom(5, 1);  // first number is 'wait' delay, shorter num == shorter twinkle
flashRandom(5, 3);  // second number is how many neopixels to simultaneously light up
flashRandom(5, 2);

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));;
    // & 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));;
  // LEDs will be off when done (they are faded to 0)

From the Tools→Board menu, select the device you are using:

  • Adafruit Gemma M0
  • Adafruit Gemma 8 MHz 

Connect the USB cable between the computer and your device. The original Gemma (8 MHz) need the reset button pressed on the board, then click the upload button (right arrow icon) in the Arduino IDE. You do not need to press the reset on the newer Gemma M0.

When the battery is connected, you should get a light show from the LEDs. All your pixels working? Great!

Wear it!

Plug in a coincell battery holder or rechargeable lipoly battery! You can pin the battery up into your hairdo or attach to the tiara with glue

Thanks for following along! If you enjoyed your experience, please share this guide with a friend.

If you like this project, you may be interested in some of my others:

To keep up with what I’m working on, follow me on YouTubeInstagramTwitter, and Pinterest.

Originally posted on Adafruit

%d bloggers like this: