How to Make a Rainbow Light Dress

Feel like a glamazon in a dress that rainbows through the colour wheel. Then whirl and twirl to your heart's content.

This dress was designed in collaboration with Minika Ko for the Kollision Fashion Show where art, music and technology collide. It is a quick and easy way to create a dress that is full of colour and light so you can grab all the attention on the dancefloor.

Materials:

  • Dress to be adapted*

  • Adafruit NeoPixel LED Strand 20 LED 4" Pitch

  • Adafruit flora V3

  • Ping pong balls

  • Exacto knife

  • Needle and thread

  • Soldering iron + solder

We chose the 4” pitch strand so that the lights are spread out enough, but choose a strand that works best for your aesthetic.

*Original dress designed by Minika Ko for her RTW collection Kovasky

Modelled by @zubaidax3 at #FashionHub #FutureofFashionConference

 

Step one: Connect the Flora to the Neopixel strip

Use Alligator clips for the test phase.

Connect:

+ve → 3.3v

data → pin 6

-ve → GND

There are three wires in each Neopixel Strip. The wire with the red line on it is the +ve connect this last.

The middle wire is the data wire. This can be connected to any digital pin. We are connecting it to pin #6

The third wire is the -ve connect this first.

Step one: Connect the Flora to the Neopixel strip

Step one: Connect the Flora to the Neopixel strip

Step 4: Creating your design

Step 4: Creating your design

Step two: Check the code

Find example code below

The code is written for an Adafruit Flora because they are sewable, easy to program, reliable and the price is right. If you use a different board then adapt the code accordingly.

You will need to make certain adjustments in the code for your specific design:

  1. How many Neopixels are you using in your strip? I am using 10, so the code reads:

    #define NUM_PIXELS 10 (if you are using 8 Neopixels write: #define NUM_PIXELS 8)

  2. Which pin are you using?* If you are not using pin 6, change it in this line of code. Here where is says 6, you can change to the pin you are using.
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIXELS, 6, NEO_GRB + NEO_KHZ400);

*Choose which pin to use, by checking the pinout diagram at https://learn.adafruit.com/getting-started-with-flora/flora-pinout-diagram

Load up the program to your Flora or other board.

Step 3: Soldering

If you have made the correct connections and your code is running, then you can remove the alligator clips and solder your Neopixel strip to the Flora.

Step 4: Creating your design

IMG_4944.JPG

Create a river of light on the dress with the Neopixel Strand. Using a needle and strong thread, hand sew the strand onto the fabric, with your stitches placed on either side of each neopixel.


IMG_4940.JPG

Step 5: Diffusing the light

Ping pong balls diffuse the light and create a softer more even look in the dress.

Slice the ping pong balls in half with an Exacto knife.

Make four to six holes around the edge of the balls that are large enough to push a needle through.

Hand sew a ping pong ball over each light.


Step 6:

Wear your dress out and be prepared for plenty of attention.


Copy and paste the code into your Arduino IDE:

#include <Wire.h>

#include <Adafruit_NeoPixel.h>

#define NUM_PIXELS 10

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIXELS, 2, NEO_GRB + NEO_KHZ400);

// Parameter 1 = number of pixels in strip

// Parameter 2 = pin number

// Parameter 3 = pixel type flags, added together as needed:

// NEO_GRB Pixels are wired for GRB bitstream

// NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels)

int32_t currentRgb[NUM_PIXELS * 3];

void setup()

{

strip.begin();

strip.show(); // Initialize all pixels to 'off'

}

uint8_t WheelRed(uint8_t WheelPos) {

if(WheelPos < 85) {

//wheelPos 0 .. 85

//result 255.. 0

return 255 - WheelPos * 3;

}

if(WheelPos < 170) {

return 0;

}

return (WheelPos - 170) * 3;

}

uint8_t WheelGreen(uint8_t WheelPos) {

if(WheelPos < 85) {

//wheelPos 0 .. 85

//result 0.. 255

return (WheelPos) * 3;

}

if(WheelPos < 170) {

WheelPos -= 85;

return 255 - WheelPos * 3;

}

return 0;

}

uint8_t WheelBlue(uint8_t WheelPos) {

if(WheelPos < 85) {

//wheelPos 0 .. 85

//result 0.. 255

return 0;

}

if(WheelPos < 170) {

WheelPos -=85;

return WheelPos *3;

}

return 255 - (WheelPos - 170) * 3;

}

uint8_t pos = 0;

int dimFactor = 1;

void loop()

{

pos++;

for (int pix = 0;pix < NUM_PIXELS; pix++) {

strip.setPixelColor(pix, strip.Color(WheelRed(pos + pix*42)/dimFactor, WheelGreen(pos+ pix*42)/dimFactor, WheelBlue(pos+ pix*42)/dimFactor));

}

strip.show();

delay(10);

}