The Blooming Dress
HTMAA has taught me a lot: how to laser cut, mill boards, make flexible PCB crowns, use web interfaces and stay calm in the midst of utter chaos, among other things. For my final project, I wanted to add one of my own fabrication skills that I have developed over the years: sewing. I decided to make a dress with actuating roses, that would bloom based on capacitive touch.
Getting the leaf right
While I have worked with fabrics, I haven't made motorised garments before so it was important that I made some tests first. I pulled together a first proof of concept very quickly using a foam sheet and some thread:Pulling the thread would close the petal, and letting go of the thread would slowly open it. However, I thought I could do more than that and designed a curved structure that could be sewn into the fabric. I printed it using PLA filament:
It is hollow inside for the thread to go into. Even though I made it as thin as I could, I didn't think it was a successful design. It was too rigid and heavy for the fabric. In hindsight I should have used flexible filament instead.
I then had another idea: 3D print directly onto the fabric a skeleton that would allow the petal to curve when pulled, but would go back to its original form when not pulled. I talked to Ozgun about this, and she sketched out a neat design. I designed it in Fusion:
While it is a very nice design, my fabric is a bit flimsy which means it would collapse the petal both when opened and closed.
I then experimented some more: I sandwiched a foam piece between two satin petals, which worked fine but doesn't allow the thread the move back up when unpulled because there is too much friction. Too much friction is not ideal because it could damage the actuating thread.
I ultimately decided to sandwich a thin plastic sheet between two petals. I sewed them together using the Brother sewing machine and melted holes in several places. The leaves are cut in a heart-like shape and I would have a thread coming out of each half.
Channels
The design of the dress involves attaching a 360 servo motor on the hip that would pull the threads. Because of the curved nature of the bodice, I needed something to guide all the threads to the same place. I decided to make very thin, sewable channels using flexible filament.PCB design
I used InkScape to draw a silhoutte. I only drew half the shape, then copied and mirrored it:I then imported it into svg-pcb which was pretty straightforward: you have to copy the path in the geo.pathD() function. This is how the code looks like:
let silhoutte = geo.pathD([], "m56.827,-41.626L55.948,-41.703L55.123,-41.774L54.349,-41.84L53.624,-41.901L52.945,-41.958L52.308,-42.011L51.712,-42.06L51.153,-42.107L50.628,-42.15L50.135,-42.191L49.671,-42.229L49.233,-42.267L48.818,-42.302L48.424,-42.338L48.047,-42.372L47.685,-42.407L47.335,-42.441L46.994,-42.477L46.66,-42.514L46.329,-42.552L45.999,-42.592L45.667,-42.634L45.33,-42.679L44.985,-42.728L44.63,-42.779L44.262,-42.835L43.878,-42.894L43.475,-42.959L43.05,-43.028L42.601,-43.103L42.124,-43.184L41.617,-43.271L41.039,-43.374L40.477,-43.483L39.931,-43.596L39.402,-43.714L38.889,-43.838L38.392,-43.968L37.912,-44.104L37.448,-44.247L37.001,-44.396L36.57,-44.552L36.155,-44.715L35.757,-44.886L35.375,-45.065L35.009,-45.252L34.66,-45.447L34.327,-45.651L34.011,-45.863L33.711,-46.085L33.427,-46.317L33.16,-46.558L32.909,-46.81L32.674,-47.071L32.456,-47.344L32.254,-47.627L32.069,-47.921L31.9,-48.227L31.747,-48.545L31.611,-48.875L31.491,-49.217L31.387,-49.571L31.3,-49.939L31.23,-50.32L31.195,-50.672L31.197,-51.058L31.234,-51.477L31.305,-51.925L31.409,-52.403L31.543,-52.907L31.706,-53.436L31.897,-53.988L32.114,-54.562L32.356,-55.156L32.621,-55.767L32.907,-56.394L33.212,-57.036L33.536,-57.689L33.877,-58.354L34.233,-59.027L34.603,-59.708L34.985,-60.393L35.377,-61.082L35.779,-61.773L36.187,-62.463L36.602,-63.152L37.021,-63.837L37.443,-64.516L37.865,-65.188L38.288,-65.85L38.709,-66.502L39.126,-67.141L39.538,-67.766L39.944,-68.374L40.341,-68.964L40.729,-69.534L41.053,-70.009L41.369,-70.478L41.677,-70.939L41.976,-71.393L42.267,-71.84L42.549,-72.279L42.823,-72.711L43.087,-73.135L43.342,-73.552L43.588,-73.961L43.824,-74.362L44.05,-74.756L44.266,-75.143L44.472,-75.521L44.668,-75.892L44.853,-76.255L45.027,-76.61L45.191,-76.957L45.344,-77.297L45.485,-77.628L45.615,-77.951L45.733,-78.267L45.839,-78.574L45.933,-78.873L46.016,-79.164L46.085,-79.446L46.143,-79.721L46.187,-79.987L46.219,-80.245L46.237,-80.494L46.242,-80.735L46.234,-80.967L46.213,-81.264L46.187,-81.558L46.159,-81.849L46.126,-82.138L46.09,-82.424L46.049,-82.708L46.005,-82.991L45.956,-83.272L45.904,-83.552L45.847,-83.831L45.786,-84.109L45.72,-84.387L45.649,-84.665L45.575,-84.944L45.495,-85.223L45.411,-85.503L45.321, -85.784L45.227,-86.066L45.128,-86.35L45.023,-86.636L44.914,-86.925L44.799,-87.215L44.679,-87.509L44.553,-87.806L44.422,-88.106L44.285,-88.411L44.142,-88.719L43.994,-89.031L43.84,-89.348L43.679,-89.67L43.513,-89.996L43.341,-90.329L43.164,-90.666L42.984,-91.007L42.801,-91.351L42.617,-91.697L42.245,-92.394L41.87,-93.09L41.683,-93.437L41.497,-93.782L41.312,-94.124L41.128,-94.462L40.947,-94.796L40.768,-95.125L40.592,-95.448L40.419,-95.764L40.25,-96.074L40.086,-96.375L39.926,-96.668L39.772,-96.951L39.623,-97.225L39.48,-97.487L39.344,-97.738L39.214,-97.976L39.092,-98.201L38.978,-98.413L38.872,-98.61L38.775,-98.791L38.687,-98.957L38.609,-99.106L38.54,-99.238L38.483,-99.351L38.424,-99.472L38.36,-99.613L38.29,-99.772L38.216,-99.949L38.138,-100.142L38.055,-100.35L37.97,-100.573L37.881,-100.808L37.789,-101.055L37.696,-101.313L37.6,-101.58L37.504,-101.855L37.406,-102.138L37.307,-102.427L37.209,-102.721L37.111,-103.019L37.013,-103.32L36.917,-103.622L36.822,-103.622L36.822,-103.925L36.729,-104.227L36.638,-104.528L36.55,-104.826L36.466,-105.119L36.384,-105.408L36.307,-105.69L36.235,-105.965L36.167,-106.231L36.104,-106.488L36.047,-106.733L35.996,-106.967L35.951,-107.188L35.914,-107.395L35.83,-107.926L35.763,-108.434L35.714,-108.921L35.681,-109.386L35.665,-109.831L35.665,-110.256L35.681,-110.662L35.713,-111.048L35.761,-111.417L35.824,-111.767L35.902,-112.1L35.996,-112.417L36.104,-112.717L36.226,-113.002L36.363,-113.272L36.515,-113.527L36.679,-113.769L36.858,-113.996L37.05,-114.212L37.255,-114.414L37.473,-114.605L37.704,-114.785L37.948,-114.955L38.203,-115.114L38.471,-115.264L38.751,-115.404L39.042,-115.536L39.344,-115.661L39.658,-115.778L39.983,-115.888L40.318,-115.992L40.664,-116.091L41.041,-116.186L41.465,-116.279L41.934,-116.37L42.443,-116.46L42.989,-116.548L43.567,-116.634L44.174,-116.718L44.805,-116.799L45.456,-116.879L46.124,-116.956L46.805,-117.03L47.495,-117.102L48.19,-117.171L48.885,-117.238L49.577,-117.302L50.262,-117.363L50.937,-117.421L51.596,-117.475L52.237,-117.527L52.854,-117.575L53.445,-117.62L54.006,-117.662L54.531,-117.7L55.018,-117.735L55.463,-117.765L55.861,-117.792L56.208,-117.815L56.502,-117.834L56.737,-117.849L56.909,-117.86L57.016,-117.867L57.052,-117.869,56.818,-41.626L57.697,-41.703L58.522,-41.774L59.295,-41.84L60.02,-41.901L60.7,-41.958L61.336,-42.011L61.933,-42.06L62.492,-42.107L63.016,-42.15L63.509,-42.191L63.974,-42.229L64.412,-42.267L64.827,-42.302L65.221,-42.338L65.598,-42.372L65.96,-42.407L66.31,-42.441L66.651,-42.477L66.985,-42.514L67.316,-42.552L67.646,-42.592L67.978,-42.634L68.315,-42.679L68.659,-42.728L69.014,-42.779L69.382,-42.835L69.767,-42.894L70.17,-42.959L70.595,-43.028L71.044,-43.103L71.521,-43.184L72.027,-43.271L72.606,-43.374L73.168,-43.483L73.713,-43.596L74.243,-43.714L74.756,-43.838L75.252,-43.968L75.733,-44.104L76.196,-44.247L76.644,-44.396L77.075,-44.552L77.49,-44.715L77.888,-44.886L78.27,-45.065L78.636,-45.252L78.985,-45.447L79.318,-45.651L79.634,-45.863L79.934,-46.085L80.218,-46.317L80.485,-46.558L80.736,-46.81L80.971,-47.071L81.189,-47.344L81.391,-47.627L81.576,-47.921L81.745,-48.227L81.898,-48.545L82.034,-48.875L82.154,-49.217L82.257,-49.571L82.344,-49.939L82.415,-50.32L82.45,-50.672L82.448,-51.058L82.411,-51.477L82.339,-51.925L82.236,-52.403L82.102,-52.907L81.938,-53.436L81.747,-53.988L81.53,-54.562L81.289,-55.156L81.024,-55.767L80.738,-56.394L80.432,-57.036L80.108,-57.689L79.767,-58.354L79.411,-59.027L79.042,-59.708L78.66,-60.393L78.267,-61.082L77.866,-61.773L77.457,-62.463L77.043,-63.152L76.624,-63.837L76.202,-64.516L75.779,-65.188L75.357,-65.85L74.936,-66.502L74.519,-67.141L74.107,-67.766L73.701,-68.374L73.303,-68.964L72.915,-69.534L72.592,-70.009L72.276,-70.478L71.968,-70.939L71.668,-71.393L71.378,-71.84L71.095,-72.279L70.822,-72.711L70.558,-73.135L70.303,-73.552L70.057,-73.961L69.821,-74.362L69.595,-74.756L69.379,-75.143L69.173,-75.521L68.977,-75.892L68.792,-76.255L68.617,-76.61L68.454,-76.957L68.301,-77.297L68.16,-77.628L68.03,-77.951L67.912,-78.267L67.806,-78.574L67.711,-78.873L67.629,-79.164L67.559,-79.446L67.502,-79.721L67.458,-79.987L67.426,-80.245L67.407,-80.494L67.402,-80.735L67.411,-80.967L67.432,-81.264L67.457,-81.558L67.486,-81.849L67.519,-82.138L67.555,-82.424L67.595,-82.708L67.64,-82.991L67.688,-83.272L67.741,-83.552L67.798,-83.831L67.859,-84.109L67.925,-84.387L67.995,-84.665L68.07,-84.944L68.15,-85.223L68.234,-85.503L68.323,-85.784L68.418,-86.066L68.517,-86.35L68.621,-86.636L68.731,-86.925L68.846,-87.215L68.966,-87.509L69.092,-87.806L69.223,-88.106L69.36,-88.411L69.502,-88.719L69.651,-89.031L69.805,-89.348L69.965,-89.67L70.132,-89.996L70.304,-90.329L70.481,-90.666L70.661,-91.007L70.843,-91.351L71.027,-91.697L71.4,-92.394L71.774,-93.09L71.961,-93.437L72.148,-93.782L72.333,-94.124L72.516,-94.462L72.698,-94.796L72.877,-95.125L73.053,-95.448L73.225,-95.764L73.394,-96.074L73.559,-96.375L73.718,-96.668L73.873,-96.951L74.022,-97.225L74.165,-97.487L74.301,-97.738L74.43,-97.976L74.552,-98.201L74.666,-98.413L74.772,-98.61L74.87,-98.791L74.957,-98.957L75.036,-99.106L75.104,-99.238L75.162,-99.351L75.221,-99.472L75.285,-99.613L75.355,-99.772L75.429,-99.949L75.507,-100.142L75.589,-100.35L75.675,-100.573L75.764,-100.808L75.855,-101.055L75.949,-101.313L76.044,-101.58L76.141,-101.855L76.239,-102.138L76.337,-102.427L76.436,-102.721L76.534,-103.019L76.631,-103.32L76.728,-103.622L76.823,-103.925L76.916,-104.227L77.006,-104.528L77.094,-104.826L77.179,-105.119L77.26,-105.408L77.337,-105.69L77.41,-105.965L77.478,-106.231L77.541,-106.488L77.598,-106.733L77.649,-106.967L77.693,-107.188L77.731,-107.395L77.815,-107.926L77.881,-108.434L77.931,-108.921L77.964,-109.386L77.98,-109.831L77.98,-110.256L77.964,-110.662L77.932,-111.048L77.884,-111.417L77.821,-111.767L77.742,-112.1L77.649,-112.417L77.541,-112.717L77.418,-113.002L77.281,-113.272L77.13,-113.527L76.965,-113.769L76.787,-113.996L76.595,-114.212L76.389,-114.414L76.171,-114.605L75.94,-114.785L75.697,-114.955L75.441,-115.114L75.174,-115.264L74.894,-115.404L74.603,-115.536L74.3,-115.661L73.986,-115.778L73.662,-115.888L73.326,-115.992L72.98,-116.091L72.604,-116.186L72.179,-116.279L71.71,-116.37L71.201,-116.46L70.656,-116.548L70.078,-116.634L69.471,-116.718L68.84,-116.799L68.188,-116.879L67.52,-116.956L66.839,-117.03L66.15,-117.102L65.455,-117.171L64.76,-117.238L64.067,-117.302L63.382,-117.363L62.708,-117.421L62.049,-117.475L61.408,-117.527L60.79,-117.575L60.199,-117.62L59.639,-117.662L59.113,-117.7L58.626,-117.735L58.182,-117.765L57.784,-117.792L57.436,-117.815L57.143,-117.834L56.908,-117.849L56.735,-117.86L56.629,-117.867L56.592,-117.869");
var s = 0.035;
geo.scale(silhoutte, [s, -s]);
geo.originate(silhoutte)
geo.translate(silhoutte, [0.00, 1.27]);
I reused my crown design to copy several components and paths, and I added two servo headers and three LEDs.
I milled it but because we didn't any good end mills anymore, it came out a bit funny. It took a whole lot of sanding to get it to be nice and shiny (and hairless).
You can also see that I used vias which means I have upgraded since last time's fiasco. One thing I forgot to add is a sewable pad for the capacitive touchpad, but I used a wire to jump there instead.
The roses
I made the roses using four different sizes of petals that are in a heart-like shape. I first cut them by hand and made a test rose:I took it to Fusion to design identical leaves, and made little tabs to keep the fabric from flying off in the laser cutter. I exported it as a dxf and tried importing it into InkScape. However, each curved shape didn't export, as if it wasn't recognised by the software. Nathan took the file into Rhino, where they were recognised. We saved it as a svg which was able to import properly into InkScape. There I could duplicate them to be laser cut.
I laser cut a whole buch of them!
I sewed them together by eyeballing it, but overall I would start off with three of the smallest petals, followed by three of the second-smallest, second biggest, and biggest petals.
Bodice
To make the bodice, I used an online pattern I have used several times before (link here). I printed them out on paper, took my measurements and cut my exact pattern:I made a bodice out of satin first which needed some adjustments. But it was great to use to get a general sense of the flower placements:
The actual bodice I am going to make is made out of black velvet, so I adjusted the pattern according to the adjustments I made on the satin bodice, and then cut them out:
I pinned the pieces and sewed them together:
I tried it on and realised I made some of the pieces too big (which is better than too small :) ), so I went back to the sewing machine to get it in order. A few fittings later and it fit like a glove:
That is also around the same time that my mannequin arrived!
I put together the entire flower and it looked pretty good:
Assembly
Now that I have my roses, leaves, PCB and bodice in order, it was time to assemble everything. I sewed in the flexible channel to the bodice, through which I put the fishing line wires using a metal rod. I also made a little pouch for the servo.I decided to have only two roses actuate because of time limitations and also because I need some more testing to figure out the most optimal way for the threads to be actuated.
I sewed a few other roses on the side:
I also made a conductive rose using copper tape sandwiched between several petals. I soldered the wire that I jumped on my PCB to the rose.
Code
I re-used Quentin's capacitive touch code. I had also used this for the RGB capacitive touch board in week 9 Input Devices: it's super neat. I looked up how to get the 360 servos to move which is pretty simple (you just set it to high or low for a number of milliseconds). Here is my final code:
#include "Adafruit_FreeTouch.h"
#include
#define PIN_SERVO 6
#define DELAY_MS 5
#define PIN_QTOUCH 2
#define PIN_LED 17
Servo myservo;
float pos = 0;
Adafruit_FreeTouch qt(PIN_QTOUCH, OVERSAMPLE_4, RESISTOR_50K, FREQ_MODE_NONE);
void setup() {
Serial.begin(0);
pinMode(PIN_LED, OUTPUT);
qt.begin();
myservo.attach(PIN_SERVO);
}
void loop() {
int qt_value;
qt_value = qt.measure();
if (qt_value > 660) {
//move the servo full speed for 1 second
myservo.write(180);
delay(1000);
//set it to be stationary for 1 second
myservo.write(90);
delay(1000);
//move servo in reverse
myservo.write(0);
delay(1000);
// Servo is again stationary for 1 second.
myservo.write(90);
delay(1000);
//set LED to be off
digitalWrite(PIN_LED, LOW);
} else {
//set servo to be stationary
myservo.write(90);
delay(1000);
digitalWrite(PIN_LED, HIGH);
}
Serial.println(qt_value);
delay(50);
}
Ladies and gentlemen, I present to you: the dress
Special thanks to Leo for encouraging me to do this project, and Quentin for helping me simplify some of my complex ideas.