Final Project

For our final project, we were able to select any prototyping process to develop a project of our own choosing. I knew I wanted to challenge myself, so I decided to continue my work with learning how to prototype with Arduino. My goal for this project was to improve upon the ways that I think with my hands and deepen my understanding of physical computing as a rapid prototyping method. I wanted to begin an exploration with textiles, sensors, and an Arduino to create a skirt that responds to light.

It was very tempting for me to attempt to make a beautiful high-fidelity and completed electronic skirt, so I made some deliberate design decisions to preserve the goal for this project. I wouldn’t want this prototype to be confused for a poor attempt at being a seamstress + electrician!

  1. Keep it simple. Yes, I wanted a challenge, but I wanted a challenge that I could manage in the short turnaround time. To this end, I decided to focus on one constellation (the Big Dipper) to prove that I could successfully complete the wiring + coding required for the concept. There’s no need to prove that I know how to do this with multiple constellations for this phase of the design process!
  2. Keep the wires on the outside of the lining. Not only would this make the skirt much easier to wear, I wanted to keep the wires on the outside so I could easily explain my work and learning with the circuits in plain sight. All I would have to do is lift the layers of tulle to reveal the visual circuitry! This would also help remind my audience that this is not a complete skirt, but a prototype that explores electronics, sensors, and textiles. I’m hoping that this will help me gain useful feedback on the concept of the design rather than the visual execution.
Final Prototype Sketch.



PROTOTYPING VIA PHYSICAL COMPUTING


Physical computing is a very hands on process. I spent most of my working time studying + building circuits, soldering, writing programs, and constructing a skirt stable enough to hold to hold the sensors, LEDs, and controls. As someone who is more of a 2-D thinker, I think this prototyping method is great for expanding my design thinking and problem solving techniques and applying it to a new space. This is a wonderful way of exploring in an engaging and tangible way.

In the future, I could see this technique helping me to rapidly prototype and assess interactive concepts. More importantly, this rapid electronic prototyping technique has helped me gain a deeper understanding of the logic and process of computer programming. I now see that what a designer may consider a simple concept may not be so simple for a team member on the development side to implement. I’m certain I will have more opportunities to learn this lesson again!


PROCESS

My process began with a brainstorm of wearables — what could I do with a Lilypad Arduino? What sensors are out there? I knew that I wanted to incorporate responsive constellations, but I wasn’t quite sure how these would function. To get a better handle of my idea, I met with my professor, Maggie Orth, and discussed my ideas with her. With her guidance, I chose to minimize my design to three constellations.

Even before the hands-on work on my project began, I was already iterating on my idea and paring it down to a more manageable project with one constellation, one set of blinking LED lights, and one light sensor.

To make the project easier to complete, I broke the work into three major milestones:

  1. Big Dipper constellation lights up when there is no light input.
  2. LED strip blinks when there is light input.
  3. Sewing tasks complete — patterns, hems, lining, tulle gathering, waistband.

PHASE ONE: PAPER PROTOTYPE OF SKIRT LINING

The lining of the skirt was the most important part of the non-electric portion of the skirt. I needed it to support the LED strip with blinking lights, an Arduino, multiple breadboards, a power source, the LED constellation, and wires.

Before I began work on my final prototype, I first applied what I learned in the beginning of the quarter to make a rapid paper prototype of the skirt lining. This way I could have an exact replica of the lining fabric and I could map out the positioning of the constellation, the length of the wires, and ensure that the lining skirt would fit be properly before I began to cut my fabric!

From this quick exercise, I learned that the pattern I was following was a bit too small! This paper prototyping paid off!

The pattern I followed was a bit too tight on my hips, so I was able to make adjustments before the sewing process began!

PHASE TWO: SEWING THE SKIRT LINING AND CONSTELLATION LEDS

Once I had solidified my design with the paper prototype, my next step was to create the lining of the skirt. I found all of my skirt materials at Pacific Fabrics in Northgate and borrowed an old Kenmore sewing machine from my partner’s mom. I was a bit intimidated by the sewing machine since I haven’t used one in about 15 years, but with some quick YouTube tutorials, I was back in business!

Once I finished the skirt, I attached the LEDs that would form the Big Dipper on the front of the skirt. As I sewed the LEDs through the lining, I made sure to label the ground wire so it was much easier for me to connect the circuits later!

In my original prototype design, I was hoping to gain experience using an Arduino Lilypad. However, I was advised to not pursue using a Lilypad in this stage of the prototyping process as conductive thread is still extremely finicky and is prone to short circuiting. Since I’ve had no prior experience sewing with conductive thread, I decided not to take this risk for the final project. Instead, I decided to pursue physical computing with my Lilypad on a side project.

Putting my middle school Home Ec skills to good use!

PHASE THREE: LEARNING HOW TO USE A SHIFT REGISTER

Since I wanted to control so many LEDs across the front of the skirt, I needed to maximize the space on my breadboard and Arduino with a shift register. With my shift register, I could control up to 8 LEDs with one Arduino pin!

With help from my professor Andy and classmate Tayseer, I was able to learn all about how to properly wire up multiple LEDs with the shift register. While it did take a lot of trial and error, we finally found the correct schematic to follow to complete the circuit!

Next, we attached the photosensor to mimic the skirt’s interaction on the breadboard.

Practice wiring the shift resistor.

PHASE FOUR: SOLDERING

This project was very soldering intensive! I first learned how to solder in my middle school science class, and I was pleasantly surprised that this skill came back to me so quickly! I spent the whole weekend soldering the multiple connections needed to power the constellation LED group and the strip of LEDs that I cut down to fit around the entirety of the skirt. For each group of LEDs, I wired one ground and one 5 volt wire so that the groups were all connected. I also learned how to test my soldering connections with a voltage meter to ensure that I created solid connections between the wires and the LEDs. Needless to say, I spent plenty of time mastering these skills.

While I really wanted to keep consistent coloring for the different LED groups’ ground and power wires, I ran out of wire over the weekend! I made due the best I could with the multiple colors I had on hand. In any case, I think the final design still does visually represent the circuit of the skirt.

PHASE FIVE: POWER STRUGGLES + VICTORY

My wiring had turned into spaghetti!

I struggled a lot to understand why my transistor wouldn’t work. With the help of Andy and Tayseer, we tested each connection to rule out soldering errors (there were none! Success!). Next, we tested the LEDs individually by connecting them to a 9 volt battery. Two secretly dead batteries later, we discovered that the LEDs could turn on when connected to a functioning 9 volt battery. However, we had no luck when trying to switch all the lights on with the Arduino. Why? We suspected that it had to do with the power supply. Instead of the suggested 12 volt battery, I was working with a 9 volt battery to power roughly 54 LEDs.


Since so many people had their hands on my project, and nothing was working correctly anymore, Andy advised me to start from scratch again. Together with Andy, I reconstructed the wiring for the constellation and got it working again. To make things simpler this time around, I made sure to use different colored wire for each pin of the Arduino. Andy also suggested that I used smaller wires to keep my breadboard clean and easy for everyone to understand.

My cleaned-up breadboard + Arduino

While Andy tried problem solving with the transistor, I worked on developing a more complex interaction with the photosensor. Using “else if” in the code, I was able to create a much more sensitive response from the photosensor that slowly turned on the lights of the Big Dipper constellation on the skirt. I initially wanted each light of the constellation to light up one-by-one, but accidentally found that I preferred that the lights did not come on in order. It looked much more natural that way!

The largest victory came at the very end of the afternoon. Andy figured out how to rewire the breadboard + Arduino to the batteries so that the transistor would work how it was supposed to! We had concluded that the soldering joint on the very last LED must have detached itself since the LEDs worked when the batteries were connected to the second-to-the-last mini strip of LEDs. We finally made it work with the aligator clips! I was so happy that I actually started to tear up!

My next steps were to complete soldering, software tweaking, and sewing of the final prototype design!

FINAL PROTOTYPE: CONSTELLATION SKIRT

For my final prototype of this quarter, I created a light-responsive electronic prototype of a constellation skirt. My goals were to expand my physical computing skills, create new opportunities to think with my hands, and explore wearables.

I plan on wearing the skirt to the prototyping studio showcase so everyone can see it in action!

The magic underneath the skirt!
Left: photosensor covered + Big Dipper constellation. Right: photosensor + full light + blinking LEDs.

CONSTELLATION SKIRT VIDEO

USER TEST

My goal for the user test was to see if I had appropriately calibrated the photosensor to work in high-light, low-light, and no-light settings. I found that I had made my sensors didn’t work quite as well in the high-light situations. The sensor read my overhead office light as medium light and triggered the constellation LEDs. For the sensor to work as intended, I flashed a flashlight directly onto the sensor! For the showcase, I’ll arrive early and run a quick calibration so I can adjust the code accordingly.

MHCI+D SHOWCASE

I was so pleased that my final prototype was well received by my peers and faculty in multiple departments. It was really rewarding to explain my design decisions and constrants while wearing the prototype. The visible circuitry came in handy when I was describing my work as well!

WHAT I LEARNED

Collaboration was key to bringing my vision to life. Coding and troubleshooting weren’t the most rewarding parts of this process. However, it was so great to have so many resources online and on campus to make this vision come to life! It was so great to get so much one-on-one attention from my professors and classmates so I could build upon my independent learning.

Electric prototyping is no small task. Even when I was able to troubleshoot a wiring issue with the help of Andy or Tayseer, I found that with the working prototype came more questions. Why did this work? Why did our other methods not work? I have a very curious mind, so it was very challenging for me to wrap my mind around the sometimes mystical appearance of functioning LED lights throughout my process.

Not knowing what you don’t know can add some interesting and unintended design constraints. A lot of my frustrations came down to not knowing enough about my materials to ask the right questions early on. For example, I bought an LED strip assuming that they were all created equal. In reality, I had purchased a “dumb” LED strip that was incapable of blinking at random like I had intended. My strip could only turn on and off and what I really needed were individually programmable neopixels! I had no idea that those kinds of strips were necessary to realize my vision until I saw first hand the capabilities of the LED strip that I had meticulously soldered into a wired skirt. Lesson learned!

MY CODE

/* Original source code: http://learn.adafruit.com/photocells */

/*Connect one end of the photocell to 5V, the other end to Analog 0.
Then connect one end of a 10K resistor from Analog 0 to ground */

int latchPin = 5;
int clockPin = 6;
int dataPin = 4;

int photocellPin = A0; // the cell and 10K pulldown are connected to a0
int photocellReading; // the analog reading from the sensor divider
int LEDpin = 13;
int LEDbrightness;

void setup(void) { // We’ll send debugging information via the Serial monitor Serial.begin(9600); pinMode (13, OUTPUT); pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(3, OUTPUT);
}

void loop(void) { digitalWrite(3,LOW); photocellReading = analogRead(photocellPin);

Serial.print(“Analog reading = “); Serial.println(photocellReading); // the raw analog reading

if (photocellReading > 800) { // GROUP A digitalWrite (LEDpin, LOW); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, 0); digitalWrite(latchPin, HIGH); delay(1000); digitalWrite(3,HIGH); delay(1000); } else if (photocellReading > 750){ // GROUP B digitalWrite (LEDpin, HIGH); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, B00001000); digitalWrite(latchPin, HIGH); } else if (photocellReading > 700){ // GROUP C digitalWrite (LEDpin, HIGH); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, B00001100); digitalWrite(latchPin, HIGH); } else if (photocellReading > 650){ // GROUP D digitalWrite (LEDpin, HIGH); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, 00001110); digitalWrite(latchPin, HIGH); } else if (photocellReading > 600){ // GROUP E digitalWrite (LEDpin, HIGH); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, 00011110); digitalWrite(latchPin, HIGH); } else if (photocellReading > 550){ // GROUP F digitalWrite (LEDpin, HIGH); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, 01011110); digitalWrite(latchPin, HIGH); } else if (photocellReading > 500){ // GROUP G digitalWrite (LEDpin, HIGH); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, 11011110); digitalWrite(latchPin, HIGH); } else if (photocellReading < 500){ // GROUP H digitalWrite (LEDpin, HIGH); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, B11111111); digitalWrite(latchPin, HIGH); }
}

LEARNING RESOURCES

For the construction of the skirt, I followed the following two tutorials:

For the creation of the hardware and coding, I modified these tutorials on LED strips, photosensors, and shift registers:

THANK YOU

Special thanks to Andy Davidson, Taysser Gherfal, and Tobin Valenstein! I could not have completed this project without your support and spare Arduino parts!