Overview

Make this ambitious costume project for Halloween or cosplay event! Before you begin this ambitious and time-consuming project, complete the following prerequisite guides:

To make this project, you will need:

Pattern

Download and tile-print the pattern's three pieces, joining the long center piece with a piece of tape.

Pin in place atop doubled fabric, so you're cutting two of each piece. If your fabric has a front and back, make sure the fabric is doubled with fronts together or backs together (to create mirror image pieces).

The starting point for this pattern was based on an aviator cap pattern on DeviantArt!

Use scissors or a rotaty cutter and mat to cut around your pattern pieces. Use tailor's chalk or a water-soluble marking pen to mark the hash lines that are useful for alignment later.

To assemble the cap, first sew the side panels together, then the center piece, then join the center piece to the side panels. Optionally top stitch your seam allowances, and stitch a folded over edge all around.

Add another rectangle of material for a chin strap, if desired.

Create NeoPixel Strips

Mark silicone coated wire every inch  (or your desired spacing interval).

Trim wires to length and strip both ends.

Using a third hand tool, tin the pads on the pixels and use tweezers to solder bits of small wire in place.

Continue adding wires and NeoPixels to make strands of seven to eleven pixels.

Pay attention to the arrows on your pixels, they should all face the same direction!

Position and Join Strips

Once you have several strips soldered up, you can arrange them on your cap. A foam head is very handy for this!

Use pins to tack on the strips in your desired arrangement.

When you're happy with your design, use more wires to connect the strips in a U-turn.

 

Adding additional power and ground connections is prudent for long runs of NeoPixels, and we think these extra white wires look nice in the design, too:

Solder the data input to pin 6 on FLORA, all power wires to VBATT, and all ground wires to GND.

Test that all your NeoPixels work using the library's sample code! If they don't all come on, double check your pixels' data arrows and that you don't have any short circuits.

When they're all working, it's time to sew them in place! Use clear or color-coordinating thread to stitch just before and just after each pixel, knotting off at each one for the most durable construction.

3D Printed Diffusers

Ninjaflex 

Print a bunch of these "spool" shaped diffusers in white NinjaFlex flexible filament. The design is optimized to print with no support material.

Slicer Settings

For the best quality when printing with NinjaFlex, we recommend the following slicing settings:

  • Retraction: Off
  • Speeds: 45/50
  • Extruder Temp: 230c
  • Infill 10%
  • Raft+Support: Off
  • No Heated Bed

Each diffuser has three sew-tabs you can use to attach over a NeoPixel. Sewing them all on is quite time consuming, but we think it's worth it!

Modify Design

The original solids where created in Autodesk 123D Design. You can customize the diffusers to match your project.

Download the Arduino sketch for the EEG costume cap here:

To create animating patterns for the cap, the pixels are organized into groups based on where they are on the cap, with a new array for each row, listing the pixels in order from front to back.

int R1[] = {25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35};
int R2[] = {24, 23, 22, 21, 20, 19, 18, 17, 16, 15};
int R3[] = {7, 8, 9, 10, 11, 12, 13};
int R4[] = {6, 5, 4, 3, 2, 1, 0};
int L1[] = {46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36};
int L2[] = {47, 48, 49, 50, 51, 52, 53, 54, 55, 56};
int L3[] = {64, 63, 62, 61, 60, 59, 58, 57};
int L4[] = {65, 66, 67, 68, 69, 70, 71};

With each row in it’s own array, you can code up a for loop that steps through multiple arrays at once to create a racing stripe effect.

void flowingStripes(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<11; i++) {
      pixel.setPixelColor(R1[i], c);
      pixel.setPixelColor(R2[i], c);
      pixel.setPixelColor(R3[i], c);
      pixel.setPixelColor(R4[i], c);
      pixel.setPixelColor(L1[i], c);
      pixel.setPixelColor(L2[i], c);
      pixel.setPixelColor(L3[i], c);
      pixel.setPixelColor(L4[i], c);
      pixel.show();
      delay(30);
  }
}