Pop Art Character Glasses

For this Halloween, I decided to be a pop art comic artist. I have always wanted to do this character because I was mesmerized by the makeup behind this look. I also personally love the era of pop art and retro culture.

For the costume I decided to make glasses with WOW written on it that light up use Arduino to animate to show the WOW.

Materials

  1. Retro Glasses
  2. Laser Cutter
  3. Acrylic
  4. Glue Gun
  5. Gemma
  6. Wires
  7. Solder and Soldering Iron
  8. Arduino Metro
  9. Wire strippers and Cutters
  10. Side Light LED Strip

Things that I would have done different and Lessons :

I underestimated the problems relating to GEMMA. While I was planning out my project, I did not expect connecting GEMMA to my project as the most difficult part. If I were to do this again, I would try to completing the circuit and soldering it to GEMMA before working on the other parts of my project.

Some takeaways:

  1. Soldering LED is not easy, so practice before you work on your actual LED.
  2. Always have backup options to be on the safe side.
  3. Finish the project a week before the deadline to prevent any last minute problems.

Process Photos:

Code :

Mrs. Knight

I dressed up as Mrs. Knight, a self-interpretation of Mr. Knight from the Marvel show Moon Knight. I teamed up with Vani and Brydon for the Halloween costume.

Mrs. Knight, Moon Knight and Khonshu
Mrs. Knight

We were extremely excited about the idea of dressing up as characters from Moon Knight. I decided to become Mr. Knight as I wanted to dress up in a suit! We assembled all the materials required for our costume first and below is the list of the materials I ended up using for my final costume:

Since the main objective of the project was to get something to light up, I started with programming the code for the eyes and the batons. For the eyes, we did a simple white light but since the batons has a button attached to the circuit, I used the buttoncycler code that would switch between white light, blue light, and a fade from white to blue.

White eyes arduino code
Buttoncycler arduino code for the baton

I did a series circuit for both the eyes and the baton lights, similar to the one Becky had done in the Mystic LED halloween hood. Since the NeoPixel mini buttons were extremely small, I had solder the NeoPixels to the Gemma a couple of times as the NeoPixels were getting fir

Getting the mask right was a challenge. I tried to sew a white mask with fabric but that wasn’t successful. After a lot of brainstorming, I decided to play around with the mask in my own. Rohitha helped me in getting the right shape for the mask. Using foam, I added in the details on the mask, like the crescent and the stitch marks across the face. After attaching a surgical mask onto the white mask, I added a coat of white acrylic paint and smudged with some light grey paint using a sponge to give it some worn our texture. I did 2 layers of the painting and smudging. To keep the paint intact and give it a finish, I mod podged my entire mask. Overall, I am happy with how the mask turned out! For the batons, I taped my circuit to where I will be holding it so that I easily click on the button. Moreover, I taped the entire wooden dowel, painted it grey and glued the golden leather pieces to the ends.

It was fun to dress up in an all-white costume for a change. Since I already owned a white shirt, I just had to purchase the white pants. Even though I sewed the vest, it didn’t turn out the way I wanted it to but I am okay with it since this was my first time sewing a piece of clothing all by myself.

There was definitely a lot of learning involved and a lot of frustration points too. Learning to improvise as you go was one of the biggest takeaways for me.

If I had more time, I would have definitely experimented with the lighting for the batons and make the baton themselves look more “authentic”. Since I couldn’t successful complete the vest, I would have finished the vest and added that to the final costume. And lastly, I would have played around with some other NeoPixel lights for the eyes and batons, something that was easier to solder but looked cooler too!

EVA

I went as EVA from Wall-e for Halloween 2022, and here is how it went!

Its started of with some basic sketches

The most frustrating part of the Costume for me was actually curating the different parts of the Costume… Because amazon gave up on me.
I did a very last minute Micheal’s run in Secaucus – because all the New York stores were out of Everything – its Halloween!

This is the shopping list :
– Foam Roll 8 mm(Micheal’s)
– Velcrose (Home depot)
S.W.A.T Helmet
– White paint(Blick)
– Arduino Gemma M0
LED Strip
– Chipboard

Here are some Process Images

Since we have 2 pieces of circuit we needed to make a parallel connection, you can use this circuit diagram for reference :

There were many design alteration during the process especially with the costume itself because foam is difficult to work with on the sewing machine, so I had to use foam glue and take for most part. also the head is difficult to carve out so we ended yup using a helmet and painting it white.

Power Shoes

I was trying to build power boots with an infinity mirror. Based on cosplay foam crafting skills and infinity mirror effect.

I used pekakura Designer and a buzz lightyear armor template to build my project

Material list

A pair of shoes

2X GEMMA

Black foam sheet

RGB strip

Arcrylic

double side mirror film

plastic mirror

hot glue gun!

Thanks to Becky’s tutorial, I can easily create these project

https://www.instructables.com/Easy-Infinity-Mirror-With-Arduino-Gemma-NeoPixels/

Code:

//based on NeoPixel library sample sketch byttoncycler.ino by Tony Dicola for Adafruit: https://github.com/adafruit/Adafruit_NeoPixel/blob/master/examples/buttoncycler/buttoncycler.ino

#include <Adafruit_NeoPixel.h>

#define BUTTON_PIN   2    // Digital IO pin connected to the button.  This will be
                          // driven with a pull-up resistor so the switch should
                          // pull the pin to ground momentarily.  On a high -> low
                          // transition the button press logic will execute.

#define PIXEL_PIN    1    // Digital IO pin connected to the NeoPixels.

#define PIXEL_COUNT 50
#define BRIGHTNESS 80

// 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 bistream
//   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(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

bool oldState = HIGH;
int showType = 0;

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  strip.setBrightness(BRIGHTNESS);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // Get current button state.
  bool newState = digitalRead(BUTTON_PIN);

  // Check if state changed from high to low (button press).
  if (newState == LOW && oldState == HIGH) {
    // Short delay to debounce button.
    delay(20);
    // Check if button is still low after debounce.
    newState = digitalRead(BUTTON_PIN);
    if (newState == LOW) {
      showType++;
      if (showType > 6)
        showType=0;
      startShow(showType);
    }
  }

  // Set the last button state to the old state.
  oldState = newState;
}

void startShow(int i) {
  switch(i){
    case 0: colorWipe(strip.Color(0, 0, 0), 50);    // Red
            break;
    case 1: colorWipe(strip.Color(255, 0, 0), 50);  // Red
            break;
    case 2: colorWipe(strip.Color(0, 255, 0), 50);  // Green
            break;
    case 3: colorWipe(strip.Color(0, 0, 255), 50);  // Blue
            break;
    case 4: pulseWhite(5); 
            break;
    case 5: rainbowFade2White(3,3,1);
            break;
    case 6: fullWhite();
            break;
  }
}

// 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 rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    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 rainbowFade2White(uint8_t wait, int rainbowLoops, int whiteLoops) {
  float fadeMax = 100.0;
  int fadeVal = 0;
  uint32_t wheelVal;
  int redVal, greenVal, blueVal;

  for(int k = 0 ; k < rainbowLoops ; k ++){
    
    for(int j=0; j<256; j++) { // 5 cycles of all colors on wheel

      for(int i=0; i< strip.numPixels(); i++) {

        wheelVal = Wheel(((i * 256 / strip.numPixels()) + j) & 255);

        redVal = red(wheelVal) * float(fadeVal/fadeMax);
        greenVal = green(wheelVal) * float(fadeVal/fadeMax);
        blueVal = blue(wheelVal) * float(fadeVal/fadeMax);

        strip.setPixelColor( i, strip.Color( redVal, greenVal, blueVal ) );

      }

      //First loop, fade in!
      if(k == 0 && fadeVal < fadeMax-1) {
          fadeVal++;
      }

      //Last loop, fade out!
      else if(k == rainbowLoops - 1 && j > 255 - fadeMax ){
          fadeVal--;
      }

        strip.show();
        delay(wait);
    }
  
  }



  delay(500);


  for(int k = 0 ; k < whiteLoops ; k ++){

    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 ) );
          }
          strip.show();
        }

        delay(2000);
    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 ) );
          }
          strip.show();
        }
  }

  delay(500);


}


void fullWhite() {
  
    for(uint16_t i=0; i<strip.numPixels(); i++) {
        strip.setPixelColor(i, strip.Color(0,0,0, 255 ) );
    }
      strip.show();
}


// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

uint8_t red(uint32_t c) {
  return (c >> 8);
}
uint8_t green(uint32_t c) {
  return (c >> 16);
}
uint8_t blue(uint32_t c) {
  return (c);
}

Paper Doll!

For my Halloween costume, I chose to become a paper doll. This costume was inspired by my childhood self, who loved to play with paper dolls. Paper doll is a toy where you’re able to put together different outfits for your doll/character and by putting different clothing cut-outs together. This was one of my favorite ways to play. I went through a phase where me and friend started to make our own outfit pieces. We loved to draw, color those drawings and cut them out and store them all in a wardrobe we made out of shoebox for our dolls. 

So when I was thinking of the Halloween costume for this class, I was excited to create a paper doll outfit for my own self! This idea Laos particularly excited me since it would look all DIY and I was excited to see a 2D paper dress on me with a an LED strip that serves as its very sparkly border.

Here’s the final outcome:

Making this was fun and definitely a learning experience!

I was running off of this simple sketch!

I used one of my dress as an overlay to get a ballpark idea of my sizing.
I used foam core and divided the board for horizontally symmetry. Later, I scored the line with a bone tool, for it to sit better on me. Something I learnt only by trying it out.
This captures the dress making experience.

Talking about the code. I had worked ahead of time and customized the ‘button cycler’ example code and soldered the button on my Gemma and light trip for testing the code. In the code I changed the code to have some colors that I thought would work better with my outfit like – pink, teal, peach and the rainbow and got rid of any excess buttons I wasn’t a fan off.

Here’s a link to the code and may circuit diagram.

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

#define BUTTON_PIN   7

#define PIXEL_PIN    2  // Digital IO pin connected to the NeoPixels.

#define PIXEL_COUNT 8  // Number of NeoPixels

#define BRIGHTNESS 160


Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

boolean oldState = HIGH;
int     mode     = 0;    // Currently-active animation mode, 0-9

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  strip.begin(); // Initialize NeoPixel strip object (REQUIRED)
  strip.show();  // Initialize all pixels to 'off'
  strip.setBrightness(BRIGHTNESS);
}

void loop() {
  // Get current button state.
  boolean newState = digitalRead(BUTTON_PIN);

  // Check if state changed from high to low (button press).
  if((newState == LOW) && (oldState == HIGH)) {
    // Short delay to debounce button.
    delay(20);
    // Check if button is still low after debounce.
    newState = digitalRead(BUTTON_PIN);
    if(newState == LOW) {      // Yes, still low
      if(++mode > 3) mode = 0; // Advance to next mode, wrap around after #8
      switch(mode) {           // Start the new animation...
        case 0:
          colorWipe(strip.Color(  0,   0,   0, 0), 50);    // Black/off
          break;
        case 1:
          colorWipe(strip.Color(251,   93,   129,0), 50);    // PINK
          break;
        case 2:
          colorWipe(strip.Color(  36, 210,   241,0), 50);    // TEAL
          break;
        case 3:
          colorWipe(strip.Color(  241,   151, 148), 50);    // Peach
          break;
        case 4:
         rainbow(10);
      
      }
    }
  }

  // Set the last-read button state to the old state.
  oldState = newState;
}

void colorWipe(uint32_t color, int wait) {
  for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
    strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment
  }
}

// Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
void rainbow(int wait) {
  // Hue of first pixel runs 3 complete loops through the color wheel.
  // Color wheel has a range of 65536 but it's OK if we roll over, so
  // just count from 0 to 3*65536. Adding 256 to firstPixelHue each time
  // means we'll make 3*65536/256 = 768 passes through this outer loop:
  for(long firstPixelHue = 0; firstPixelHue < 3*65536; firstPixelHue += 256) {
    for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
      // Offset pixel hue by an amount to make one full revolution of the
      // color wheel (range of 65536) along the length of the strip
      // (strip.numPixels() steps):
      int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
      // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
      // optionally add saturation and value (brightness) (each 0 to 255).
      // Here we're using just the single-argument hue variant. The result
      // is passed through strip.gamma32() to provide 'truer' colors
      // before assigning to each pixel:
      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
    }
    strip.show(); // Update strip with new contents
    delay(wait);  // Pause for a moment
  }
}

I also ran into a lot of troubles that my Gemma gave me. Even though my code was ready to go, my Gemma decided to not work or even reset. After trying everything – restarting my computer, double tapping may Gemma, changing the wires incase the one I am using has some free charges, I was sad and thought I would have to work from a new Gemma.

Gemma reset not working 😕

The next day, before changing my Gemma, I gave my Gemma a last try and somehow the double tap turned green. I believe I carried an extra wire from home and it was this wire that actually made the Gemma work and detect the port in the Aurdino software for me to upload the code. Still a mystery though since it was the Gemma that finally responded to the rest double tap.

Some Magic! I was so relieved though.

Then came the soldering fun! I had then ordered this neopixel strip from adafruit’s website. The advantage of this was that the LED’s were visible in the front. This looked great on the outfit and attached to the top very easily with a few pins that I dug into my foam board to secure it.

However, it was a nightmare to solder if you had to make a parallel connection. It was too thin a strip. So when I would try to solder one wire, the other one would come off or the chrome of the strip itself would come off, I tried it 5 times and took about 6 hours to solder the parallel part.

My littles soldering video!

What I would do better next time here maybe is all three wires on separate joints. (Something I learnt by asking becky.)

The first strip worked yay!

The second one working was the best feeling ever!

Onto attaching the carefully soldered Gemma and the strip to may outfit.

To wear my outfit, I used velcro and Duct Tape to secure the velcro joints. It survived the entire parade. Yay!

Here’s a little video of the code working

Khonshu

Khonshu is the traveling moon god of the night sky. He is heavily featured in the Marvel IP Moon Knight where he bestows upon his servants powers to carry out his justice and vengeance. This was done as part of a group costume with Vani and Heba. Vani is the Moon Knight who dons the ceremonial armor of Khonshu and is the default agent of vengeance, Heba is Mrs. Knight, her own interpretation of the split ego of the Moon Knight.

At the inception of the idea I was extremely excited, I felt that I had most of what I needed to make it. On top of that, the character design of Khonshu includes a lot of flowing cloth which I have always been a big fan of. Wearing the costume was honestly quite cozy. My Judo pants and Karate gi were very spacious and comfortable to wear, the large sheet I draped over myself was also quite comforting. The two components that I didn’t quite enjoy wearing were the balaclava and the plague doctor’s mask. I couldn’t see ANYTHING out of that mask.

One thing in particular that I learned to do for this project was rudimentary styling for large fabrics. The way I styled it wasn’t quite sophisticated or complex. I was inspired by the look of Biblical shepherds in iconography, the way the cloth sits on the figures are interestingly graceful and mysterious. If I were to do the project again, I would spend even more time styling the large fabric, perhaps combining different pieces and textures to create an even more interesting look. I would also begin crafting and compiling materials even sooner, perhaps in August or September. There were some really cool high visibility bird skull masks on Etsy that would’ve been much more accurate, but unfortunately they take up to 5 weeks to ship so it was not feasible. I would also like to add lustrous aluminum and brass elements to further bring forth the more ethereal visage of Khonshu.

Lightbulb Kirby

“this would be cool”

In its finality, here is the entire process of creating the costume in which I am so gleefully standing in the photo above.

Initial Idea

inspiration art

So Kirby is a video game character created by Masahiro Sakurai under HAL laboratories, for nintendo in 1992. The most recent release of the game is Kirby and The Forgotten World. In the game, Kirby is the hero and must save the world by solving puzzles and crushing his enemies. One trait it has had since the very beginning is that of being able to suck up objects into its mouth and gain the properties of the object. In this game, Kirby has the opportunity to suck up a lightbulb which if he does so, turns him into a lightbulb and allows him the power of light.

2D thinking

Physical Making

From the initial sketches, materials were ordered off of the following list:

  • Materials:
  • round reed (rattan)
  • artificial cat gut (for binding reeds)
  • Black garbage bags
  • poly-batting
  • poly-fill
  • light pink cotton sateen fabric
  • RGB led strip
  • lithium ion battery
  • black wool fabric
  • white felt
  • white linen
  • pink silk thread
  • yellow hard hat
  • 3/4 plywood
  • nuts and bolts

then, I got to work…..

WORK

when in doubt, pivot to garbage bags

Time for an Arduino break

circuit diagram with lemon for extra flair

Final results

Take aways

I would say that this project reminded me that my eyes are almost always bigger than my stomach, meaning that if I think something would look hella cool upon perfect execution, I don’t think twice. While this project was not a total loss, i can see many places where given a stronger work ethic, knowledge of costume making and more time (oh where did it all go), it could be elevated to the next level. But since time is always at a premium (especially in this program) I am happy to say it turned out all right. I find soldering incredibly relaxing and arduino mildly frustrating, and there were some very cool work flow processes that I have heretofore never done. But if I could tell my past self about this project, I would say buy pre-made rings for the body, pattern with muslin, buy a bigger battery, and don’t touch the hot glue, because it is hot. Also, I would try and integrate the LED’s into the mouth and try and route the rattan rings so that they are not visible. Also visibility was not great.

Horns and Flowers

For this Halloween, I decided to dress up as the original character that I created during doodling sessions.

Thank you Shuncheng for the photo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
The light (blue) wrapping around the headset
The components: Neopixels mini + Gemma
I was planning the wire directions and having it as a reference before I dived into soldering
THEY WORKED (kinda looked like a stick)

Lighting demonstration (in hand): https://drive.google.com/file/d/19QdrI_sya8fL57lMTesx0xytlh1rQ_-F/view?usp=share_link

Lighting demonstration (around headset): https://drive.google.com/file/d/1H1rgx87lP-WiUEMKeRn76pbc8YEzj4wt/view?usp=share_link

A Nightmare on Rezz Street

First off, huge shout out to Noah and Pedro at AdaFruit for the in depth tutorial! https://learn.adafruit.com/rezz-inspired-neopixel-glasses

SpaceDad?

Rezz is a favorite DJ of mine, and her shows are absolutely legendary! I was hyped to have built these with a little help from the guys at Adafruit. I had a few hiccups with this project, but overall, it was a success. If I had more time I would have loved to figure out how to make my own animation with the NeoPixel Triple-Ring Board.

This project got me familiar with using the Itsy Bitsy M4 as well as uploading CircuitPython to the Itsy Bitsy using the Mu Editor. It was also a practice in soldering things very closely together, which hopefully after this project I will be better at going forward! Below are some in progress photos of my soldering and 3D Printed frames

Initially I encountered some issues getting my LED’s to light up. So I checked my connections and plugged my Itsy Bitsy into Arduino. Once I figured the solder joints were ok, I then realize that my CircuitPython code was not unzipped. Once I unzipped the code I downloaded off the Adafruit tutorial and put that on the Itsy Bitsy, my code worked!!

Success!

Additionally, here’s the circuit diagram courtesy of the Ruiz Brothers’ tutorial:

https://learn.adafruit.com/rezz-inspired-neopixel-glasses/circuit-diagram

You can also find the code here: https://learn.adafruit.com/rezz-inspired-neopixel-glasses/software

Happy Halloween!