Introduction: Making the TFF: a Dress That Gets Excited When Tweeted

The idea of this dress comes from a series of tweets with online friends @shineslike and @arduinogirl.  @shineslike and I had taken a half day Arduino workshop given by @arduinogirl at the MCN 2011 conference. I was immediately inspired creatively by the sensory and interactive opportunities. Over the next few months I struggled with the electronics learning curve, but my ever supportive online friends really made it a blast.  Acquaintances 'IRL' (in real life), online we had become TFFs —Twitter Friends Forever.

These online connections happen quietly in fiber-optical pulses, dimensions accessed through my iPhone.  The TFF brings the excitement and interaction back into the physical world.  When the wearer receives a tweet, the vintage-inspired dress flutters its wings and sings like a bird. Surely, this celebratory display will attract tweets—and moreTFFs. It was debuted at the 2012 Museums and the Web conference where I was united IRL with my TFFs


This dress aspires to be an homage to the many fulfilling friendships that have been able to hatch and grow online.

Step 1: What's in This Instructable?

The TFF project breaks down into different streams of work including sewing, mechanics, electronics, and programming. 
  • Dress - Reviewed resources for designing clothes from Built by Wendy-Dresses and Pattern Magic books. Vintage-inspired KAS fabric
  • Bird songs - From the start I just wanted to cannibalize greeting cards with bird sounds. I love these songs.
  • Wings - Looked at many a costume designer videos on YouTube. These wings are not be huge, just a little flutter and hopefully not costume-like
  • Tweet sensor - to activates the dress
  • Arduino Code - to pull it all together

Step 2: Designing the Dress

I had never designed a dress from scratch before, so this was a laborious and iterative (though satisfying) process. For guidance and inspiration I referred to the very accessible Built by Wendy-Dresses and the very beautiful, but difficult to understand, Pattern Magic.

The key is to do all your testing and iterating with cheap fabric called muslin. I recommend starting with a dress pattern model. For example, I started with a simple dress pattern from the Built by Wendy book.  Trace that model and sew it in muslin. Try it on, play with it! Modify the design with pins and rubberbands, by cut and re-sew it. Turn on music, dance in front of a mirror, cut it more (don't cut yourself.)

When you've got something you like in the muslin, then trace it back to paper, marking folds, seams and match ups. Use a ruler and only trace half of each element (if the dress is intended to be symmetrical.) Then, cut that pattern on a fold in muslin, re-sew it and see if it works. (or play with it, dance with it and repeat.)

I'm sure an experienced designer could simplify this step, but I must have looped through this step 4 or 5 times to iterate the design. When evaluating your progress, take into consideration the differences between your quality of your final fabric and the muslin. In the case of the TFF, the vintage canvas fabric is vastly different from the diaphanous muslin.

Have fun at this stage--make it what you want!

Step 3: Sewing the Dress

Once you've had your fun and are completely happy with the muslin, trace the final paper pattern, it's time for the moment of truth: cutting into the expensive fabric. I picked particularly pricy threads making this a bit of a scary transition.

Preparing the pleated top
With such busy fabric, my design called for the pleating of the bodice (the shirt part of the dress) to provide extra texture and abstract the figurative graphic pattern which would be visible on other parts of the dress. Using the paper pattern I defined how much fabric height I would need for the bodice and cut it a width of it (with patterned fabric it's important to always cut the same direction.)

I folded 1/2 inch overlaps and pressed with an iron creating the pleats. Beware: I had seriously underestimated how much fabric this treatment would require and had to sew widths together just for my small top. I almost ran out of fabric!

With the pleats ironed in place, I used fusable interfacing to hold the seams in place for sewing.

Cutting/Sewing
With the pleats, you can't really cut on the fold, so I folded the final paper pattern and cut a new final full sized pattern of the top front in paper.  Otherwise treat the pleated fabric as you would any fabric in the sewing--really thick barely manageable fabric.

Some problemsolving had to happen along the way to make up for this very thick fabric. For example, the shoulder seams would have never laid flat down using regular seams.  Instead, I tucked the pleated front into the back pieces (like a coin going into a slot) and hand sewed these parts together to obscure the construction.

Indeed many little issues needed to be solved at this step since the muslin hadn't needed to deal with finished seams. Putting it together in the right order can be complicated, but that's part of the fun.

Step 4: Adding Bird Songs

Those little singing greeting cards can be pretty useful for projects.  They have power, an amplified speaker and can simply be activated by hijacking the switch used in the card. You can just find one you like and cut the gut out for your project.

For the TFF, I found wonderful high-quality bird song cards at PadBlocks. Since they were $8.00 each, I first experimented with the cheapest cheesiest Easter singing card from the drug store (always experiment with the cheapest thing possible!) I soldered to the + and -. Touching the wires closes the circuit and makes the bird sing.

I attached the speaker card under the waist of the dress with speaker facing out and fed the wires to the back opening of the dress.

Step 5: Making the Wings

The shape of the wings had been drawn in paper at an earlier stage, and here they need to be designed with seam allowances and to allow for the mechanical structure to move the wings. The dress is intended to be easily worn as a regular non-twitter dress when desired, so the mechanical components are all designed to be easily removed. If you're going to put this much effort into a dress, you'll want to be able to use it more broadly.

Using the paper designs, seam allowances are added to create new paper patterns.  Four of each size of the triangle shapes are cut--two sets of two for for each side. Two triangles are sewn together on two of the three sides and the third side tucked in to leave the shape open as a pocket.  All of the triangles are placed and pinned to the back of the dress and sewn with pockets facing inward to hide the wire structure.

Moving the wings
I investigated several options for moving the wings such as electric motors with flaps, levers and muscle wire.  The challenge in this project was that we want reliable movement, but the dress moves and is soft.  I ultimately settled on using servos since they were easy to guarantee and control movement. You may come up with a better movement... let me know!

Heavy gauge wire is bent into the wing pockets with a hook at the waist.  The servos are attached to the hooks and then attached to the same Arduino pin to guarantee symmetrical movement on each side.


The servos don't really give the wings a 'flutter', but rather a nice slowish movement.

Arduino code for Servos:

#include <Servo.h>
Servo myservo;  // create servo object to control a servo

// set pin numbers:
const int servoPin = 9;     // Servos Pin (using one pin for both to mirror wing movement


// variables will change:
int servoCounter = 0;   // initial position of servos


void setup() {
  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object


void loop(){

//SERVOS (based on Sweep)
    for (int servoCounter = 0; servoCounter < 15; servoCounter++){ //repeat this pattern 15 times

      for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(1);                       // waits 1ms - very fast for the servo to reach the position
  }
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees
  {                               
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(1);                       // waits 11ms for the servo to reach the position
  }

}

Step 6: Using the IPhone Headphone Jack As the Tweet Trigger

Determining how the dress would be triggered from the tweet proved to be the most head banging problem--though in the end the solution was quite simple.

I originally believed the best way would be through using the Twitter API and moving data around through Processing talking to the Arduino through TouchOSC. When I realized that the Twitter4J Java library wouldn't load on iOS and other limitations of mobile. I read books asked friends, my head was spinning.

Enter the lo-fi solution!
Now that Twitter is well integrated into the iPhone, the phone can be set to make a sound notification whenever my twitter name is mentioned. This solution harnesses that sound to trigger the dress through use of the LM339 voltage comparator. (Thanks to my dad for leading me in this direction!)

The LM339 compares two voltages and acts as a voltage switch when those two voltages are different. Using Rob Paisley's tutorial, I was able to connect the headphone jack and determine when a sound came through the iPhone.

Please note, this solution does not require the Arduino, it's purely a voltage switch.  In fact, the whole project would not need an arduino or any coding if the wing solution did not use servos.  The servos require signal from the Arduino to direct their movement.

Step 7: Putting Together the Electronics

Now that we have a Tweet trigger switch thanks to the iPhone jack and LM339 comparator, it's time to pull the parts together.

  • Voltage switch is attached as an input pin on the Arduino
  • Birds and Servos are attached to output pins
  • 4 AA battery power supply
  • The code watches the input pin and when the switch is closed, the birds sing and then the Servos turn 15 times
Arduino code:

/*
#TFF Twitter Dress
with lots of inspiration from across the internet (Sweep, Button, Arduino Cookbook)
*/

#include <Servo.h>
Servo myservo;  // create servo object to control a servo
                // a maximum of eight servo objects can be created

// constants won't change. They're used here to
// set pin numbers:
const int headphonePin = 2;     // the number of the headphone comparative pin
const int ledPin =  13;      // the number of the LED pin
const int servoPin = 9;     // Servos Pin (using one pin for both to mirror wing movement
const int birdPin = 6;

// variables will change:
int headphoneState = 1;         // variable for reading the headphone status
int servoCounter = 0;   // counter for the number of button presses
int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
  pinMode(ledPin, OUTPUT);    //LED test pin
  pinMode(birdPin, OUTPUT);    //Birdsongs pin   
  pinMode(headphonePin, INPUT); // initialize the Headphone comparator pin as input


  //for troubleshooting--take out in final
//  Serial.begin(9600); 
}

void loop(){

//  int val;
//  val = digitalRead(headphonePin); //for troubleshooting over serial
// digitalWrite(birdPin, LOW);   // set the Birds off
  // read the state of the headphones:
  headphoneState = digitalRead(headphonePin); //Is there a tweet noise, or is it quiet?
/*

*****QUIET STATE*****

*/
  // In the circuit, when there is no noise, output is HIGH
  // In this quiet state, we want nothing triggered, or LOW
  if (headphoneState == HIGH) {    
    // keep functions off   
    digitalWrite(ledPin, LOW);
    digitalWrite(birdPin, HIGH); 
  }
/*

*****TRIGGERED STATE*****

*/
  else {
    // Else means a tweet has triggered an alert
    // For this we want to set off the sequense of bird songs and servo wings
    //turn LED on:
    digitalWrite(ledPin, HIGH);
    digitalWrite(birdPin, LOW);   // set the LED on
    delay(10000);
    digitalWrite(birdPin, HIGH);

    //SERVOS (based on Sweep)
    for (int servoCounter = 0; servoCounter < 15; servoCounter++){ //repeat this pattern 15 times

      for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(1);                       // waits 1ms - very fast for the servo to reach the position
  }
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees
  {                               
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(1);                       // waits 11ms for the servo to reach the position
  }

    }
  }
}



Step 8: Attaching the Electronics Into the #TFF Dress

In a final step a pouch is made to hold these electronics when the dress is worn as the TFF.  It easily snaps off to turn it back into a dress. This is one area of improvement needed--the electronics are just too fat and heavy! The whole dress gets pulled down unattractively. This is easily solved by going with an Arduino mini and a lighter battery power supply. I'll be embarking on that step very soon and subsequently upload a video of the final product.

Thanks! I hope you got something out of this instructable.  Be sure to tweet me, and the dress, @lili_czarina! Final video to come!

Arduino Challenge

Participated in the
Arduino Challenge