The Octacle-Nihaarika

Halloween Costume(Skirt)

About

The Octacle Skirt is inspired by the camouflaging nature of an octopus that can change its skin color. They have special cells in their arms that facilitate this mechanism. Research shows that when different parts of the octopus’s arm are illuminated, the tip of the arm was the most sensitive to light. Using these concepts, I chose to program the code on my skirt.

My Fascination with the Octopus

I have always been fascinated with the camouflaging nature of an octopus and how they squirt ink to deter predators. My observations and research led me to recreate how an octopus reacts in its natural habitats.

A close look at the Octopus
Octopus suckers turning blue
Octopus suckers turning pink

Concept Sketches

Brainstorming ideas for skirt
Final sketch idea for halloween costume

To make this project, I used:

  1. Soft Flexible Wire NeoPixel Strand 
  2. Burgundy leather skirt
  3. Adafruit GEMMA v2 (Adafruit Kit)
  4. White PLA (Courtesy of Becky)
  5. Battery Pack (Adafruit Kit)
  6. Silicone coated wire (VFL)
  7. Soldering iron (VFL)
  8. Flush cutters (VFL)
  9. Wire strippers (VFL)
  10. Fabric scissors (VFL)
  11. Sewing needles (VFL)
  12. Sewing pins (VFL)
  13. Sewing machine (VFL)

Coding and Fabrication Process

Step 1: I began by testing my code using a Neopixel strip on the Arduino Uno Board. I programmed the code using 4 main functions:

-The colorWipe and reversecolorWipe that depicted how the suckers of the octopus react at a different speeds.

-The delay function that is a buffer before the octopus changes its color.

-The pulse function that gradually illuminates the color change.

Step 2: Measuring and pinning desired skirt length to trace a paper template.

Step 3: Cutting the skirt template and determining the size of the octopus suckers on the front and back of the skirt to resemble a tentacle.

Step 4: Resizing the 3D model and converting file to STL ready to 3D print. The 25 suckers are meant to act as light diffusers. If I had the right 3D printer I would have preferred to print the model in NinjaFlex rather than PLA.

Step 5: Process of 3D printing diffusers.

Step 6: Testing code on soft neopixels using the Gemma with alligator clips and my battery back.

Step 7: Soldering the Gemma to the soft neopixels.

Step 8: Taping the neopixels to the skirt paper template to test the effect.

Step 9: Marking positions for neopixels and sewing them onto the skirt.

Step 10: Individually sewing the suckers onto the skirt.

Circuit Digram and Code

#include <Adafruit_NeoPixel.h>

#define PIN A1

#define NUM_LEDS 25

#define BRIGHTNESS 25

// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_RGB     Pixels are wired for RGB bitstream
//   NEO_GRB     Pixels are wired for GRB bitstream, correct if colors are swapped upon testing
//   NEO_RGBW    Pixels are wired for RGBW bitstream
//   NEO_KHZ400  400 KHz bitstream (e.g. FLORA pixels)
//   NEO_KHZ800  800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {

  strip.setBrightness(BRIGHTNESS);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // Some example procedures showing how to display to the pixels:
  
  pulseWhite(5);
 colorWipe(strip.Color(255, 255, 255), 50); // White
 delay(500);
 pulsePink(5);
 colorWipe(strip.Color(255, 5, 180), 20);  // Pink
  delay(500);
  pulseBlue(5);
 colorWipe(strip.Color(0, 0, 255), 50);  // Blue
  delay(500);
    pulseWhite(5);
  reversecolorWipe(strip.Color(255, 255, 255), 50); // White
  delay(500);
   pulsePink(5);
 reversecolorWipe(strip.Color(255, 5, 180), 20);  // Pink
  delay(500);
    pulseBlue(5);
   reversecolorWipe(strip.Color(0, 0, 255), 50);  // Blue
  delay(500);


  // fullWhite();
  // delay(100);



}

// 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 reversecolorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=strip.numPixels(); i>0; i--) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}
void pulseWhite(uint8_t wait) {
  for(int j = 0; j < 256 ; j++){
      for(uint16_t i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, strip.Color(0,0,0, j ) );
        }
        delay(wait);
        strip.show();
      }

  for(int j = 255; j >= 0 ; j--){
      for(uint16_t i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, strip.Color(0,0,0, j ) );
        }
        delay(wait);
        strip.show();
      }
}

void pulsePink(uint8_t wait) {
  for(int j = 0; j < 250 ; j++){
      for(uint16_t i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, strip.Color(j+2,0,j,0 ) );
        }
        delay(wait);
        strip.show();
      }

  for(int j = 250; j >= 0 ; j--){
      for(uint16_t i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, strip.Color(j+2,0,j,0 ) );
        }
        delay(wait);
        strip.show();
      }
}


void pulseBlue(uint8_t wait) {
  for(int j = 0; j < 256 ; j++){
      for(uint16_t i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, strip.Color(0,0,j,0 ) );
        }
        delay(wait);
        strip.show();
      }

  for(int j = 255; j >= 0 ; j--){
      for(uint16_t i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, strip.Color(0,0,j,0 ) );
        }
        delay(wait);
        strip.show();
      }
}

Final Product

Halloween Parade

Takeaways

I really enjoyed this project. The most accomplishing part was understanding the code and being able to resolve minor issues that I was facing. The process of working with the Gemma was fairly easy with minimal soldering to the soft neopixels. I would have loved to use Ninjaflex instead of Hard PLA if I had the right printer. Also, from the beginning of my concept, I was interested in movement triggering the lights effect and so I would like to add this function in the future to my project. This function, would also more closely imitate the octopus’s reaction to camoflaudgye.

5 thoughts on “The Octacle-Nihaarika”

  1. Really cool and high fashion! Maybe adding another small component like a headband with a few suckers on it would tie the outfit together more?

  2. Wow Nihaa! this is a very smart evolution of ideas from the original fairy skirt idea to this structured and stunning element. Have you thought of what the top would look like? It’ll be very cool see the octopus motif repeated on top in a subtle manner!

  3. Nihaa!! This is such a brilliant idea. It’s really original and quite ambitious. I think if you can program the light to be a gradual gradient, it would also look really cool. The brightest light should be where the suckers are bigger. Either way, I love the concept and can’t wait to see the final look.

  4. Nihaa! I love how chic yet halloween appropriate your outfit is! As mentioned by Erika, I am really interested in knowing what your top is going to be like, maybe something with tassels of translucent jellyfish like structure would be great!

Comments are closed.