Maker.io main logo

NeoPixel Tiara

2022-09-16 | By Adafruit Industries

License: See Original Project Wearables Arduino Gemma

Courtesy of Adafruit

Guide by Becky Stern

Overview

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.‎

This guide was written for the Gemma v2 board but can be done with either the ‎v2 or Gemma M0. We recommend the Gemma M0 as it is easier to use and is ‎more compatible with modern computers!‎

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

project_1

Build it!‎

build_2

This diagram uses the original Gemma, but you can also use the Gemma M0 with ‎the exact same wiring!‎

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.‎

wire_3

wire_4

wire_5

wire_6

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

connections_7

connections_8

connections_9

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.‎

trim_10

trim_11

trim_12

trim_13

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

bits_14

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

solder_15

solder_16

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

 

power_17

power_18

power_19

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

The Arduino code presented below works equally well on all versions of GEMMA: ‎v2 and M0. But if you have an M0 board, consider using the CircuitPython code ‎on the next page of this guide, no Arduino IDE required!‎

Click to Download the NeoPixel Library

Installing Arduino libraries is a frequent stumbling block. If this is your first time, ‎or simply needing a refresher, please read the All About Arduino Libraries tutorial.‎ If the library is correctly installed (and the Arduino IDE is restarted), you should be ‎able to navigate through the “File” rollover menus as follows: ‎

File→Sketchbook→Libraries→Adafruit_NeoPixel→strandtest

Connect up your NeoPixels in a solderless breadboard and use alligator clips to ‎attach to GEMMA, referring to the circuit diagram if necessary. ‎

You’ll need to change a few lines in the 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:‎

Download File

Copy Code
// SPDX-FileCopyrightText: 2017 Dano Wall for Adafruit Industries
// SPDX-FileCopyrightText: 2017 Becky Stern for Adafruit Industries
//
// SPDX-License-Identifier: MIT

//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.begin();
  strip.setBrightness(40);
  strip.show(); // 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));
      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)
}

View on GitHub

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) needs 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! You can take apart this prototype and get ready to ‎put the pixels in the collar. Refer to the NeoPixel Uberguide for more info.‎

CircuitPython Code

code_20

GEMMA M0 boards can run CircuitPython — a different approach to ‎programming compared to Arduino sketches. In fact, CircuitPythoncomes factory pre-loaded on GEMMA M0. If you’ve overwritten it with an ‎Arduino sketch, or just want to learn the basics of setting up and using ‎CircuitPython, this is explained in the Adafruit GEMMA M0 guide.‎

These directions are specific to the “M0” GEMMA board. The original GEMMA ‎with an 8-bit AVR microcontroller doesn’t run CircuitPython…for those boards, ‎use the Arduino sketch on the “Arduino code” page of this guide.‎

Below is CircuitPython code that works similarly (though not exactly the same) as ‎the Arduino sketch shown on a prior page. To use this, plug the GEMMA M0 into ‎USB…it should show up on your computer as a small flash drive…then edit the file ‎‎“code.py” with your text editor of choice. Select and copy the code below and ‎paste it into that file, entirely replacing its contents (don’t mix it in with lingering ‎bits of old code). When you save the file, the code should start running almost ‎immediately (if not, see notes at the bottom of this page).‎

If GEMMA M0 doesn’t show up as a drive, follow the GEMMA M0 guide link ‎above to prepare the board for CircuitPython.‎

Download Project Bundle

Copy Code
# SPDX-FileCopyrightText: 2017 Mikey Sklar for Adafruit Industries
#
# SPDX-License-Identifier: MIT

import time

import board
import neopixel

try:
    import urandom as random
except ImportError:
    import random

numpix = 7  # Number of NeoPixels
pixpin = board.D1  # Pin where NeoPixels are connected
strip = neopixel.NeoPixel(pixpin, numpix, brightness=1, auto_write=True)
colors = [
    [232, 100, 255],  # Purple
    [200, 200, 20],  # Yellow
    [30, 200, 200],  # Blue
]


def flash_random(wait, howmany):
    for _ in range(howmany):

        c = random.randint(0, len(colors) - 1)  # Choose random color index
        j = random.randint(0, numpix - 1)  # Choose random pixel
        strip[j] = colors[c]  # Set pixel to color

        for i in range(1, 5):
            strip.brightness = i / 5.0  # Ramp up brightness
            time.sleep(wait)

        for i in range(5, 0, -1):
            strip.brightness = i / 5.0  # Ramp down brightness
            strip[j] = [0, 0, 0]  # Set pixel to 'off'
            time.sleep(wait)


while True:
    # first number is 'wait' delay, shorter num == shorter twinkle
    flash_random(.01, 1)
    # second number is how many neopixels to simultaneously light up
    flash_random(.01, 3)
    flash_random(.01, 2)

View on GitHub

This code requires the neopixel.py library. A factory-fresh board will have this ‎already installed. If you’ve just reloaded the board with CircuitPython, create the ‎‎“lib” directory and then download neopixel.py from Github.‎

Download neopixel.py from GitHub

Wear it!‎

wear_21

Plug in a coin cell battery holder or rechargeable Li-poly battery! You can pin the ‎battery up into your hairdo or attach to the tiara with glue.‎‎ ‎

Glamour shots by Andrew Tingle.‎

制造商零件编号 3501
ADAFRUIT GEMMA M0 - MINIATURE WE
Adafruit Industries LLC
制造商零件编号 1222
WEARABLE PLATFORM GEMMA V2 MINI
Adafruit Industries LLC
制造商零件编号 1260
FLORA PLATFORM RGB NEOPXL V2 4PK
Adafruit Industries LLC
制造商零件编号 1463
ADDRESS LED RING SERIAL RGB
Adafruit Industries LLC
制造商零件编号 783
BATT HLDR COIN 20MM 2 CELL LEADS
Adafruit Industries LLC
制造商零件编号 290
HOOK-UP SOLID 22AWG 300V BLK 25'
Adafruit Industries LLC
Add all DigiKey Parts to Cart
TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum