New Textiles 2011

‘Drink Me’ Water Bottle Cozy

For the final project, I decided to make a water bottle cozy that reminds you to drink. I initially got the idea because I often get dehydrated especially when working at a desk all day. I have a water bottle in front of me, but just don’t think about it. I wanted something to actively remind me to drink throughout the day. Thus, the ‘Drink Me’ Water Bottle Cozy was born.

The project concept is a simple cozy covered in LEDs. Every 30 mins, the LEDs will start blinking. When the user picks up the bottle and slightly squeezes it to take a drink, the LEDs turn off and the timer restarts. The LEDs begin blinking again in 30 mins and the cycle repeats. The sensor is simply two pieces of conducting fabric that are connected by the users hand.

Read the rest of this entry »

Magical Blanket. no more boundary between music and body movement

We are intrigued by the interaction between human and music. This project suggests a combination of body postures and generated acoustic effects.

For this final project, we created a blanket of matrix of 16 pressure sensors, each sensor consists of two pieces of conductive fabrics, with one piece of velostat and two layers of light net fabrics.

Read the rest of this entry »

Deja Vu

by Heidi and Nicole

Ladies, have you ever left the house without your cell phone? Locked yourself out without your keys? Paused mid step to hurriedly search your bag for items you thought you may have forgotten?

Deja Vu is here to help. The newly developed intelligent bag boasts an RFID system that helps you to remember to take important items like your wallet, keys, and cell phone with you. Just attach our custom RFID tags to your things, turn on the bag, and you’re all set. The bag will automatically scan items as they enter and leave, keeping track of what’s in the bag.  A simple squeeze of the soft button and the LED display will light up to show which items are accounted for, so that you never have to frantically search the bag to check if your items are there.  The bag can take up to 5 tags for important items.
Read the rest of this entry »

Moving screen

The repeated elements of textile designs not only create a sense of rythm, but they can be quite mesmerizing. While they are capable of creating a sense of movement, in reality they are of often static. As a textile designer,  I have always been interested in the idea of a textile that is capable of shifting in terms of pattern and or color. My final project attempts this goal.

To begin, I developed a test on paper. I painted a series of test pieces with thermo chromic paint that represented what would be stripes in the final design. I then sewed conductive thread through each piece. Using an Arduino and  a motion sensor, I wrote a code that allowed for the stripes to be heated up and  in turn change color sequentially when motion was detected.

Above is detail of the first stripe shifting in color.

Once I had the system worked out, I used a shear textile with a striped weft as the surface of the screen. I painted a layer of transparent gesso to make the surface slightly more rigid and suitable for painting on.

I experimented with different ways of applying a patterned layer of thermo chromic pigment, including making a template from a piece of the textile. For the template, I simply gessoed a piece of the shear material to a piece of card stock. Once it was dry, I cut out the striped shapes with an exacto knife. While I used the template, I also found it just as easy to paint directly onto the textile.

After I painted in some areas of the textile, I sewed conductive thread over the black striped weft and added the mosfets and conductive tape which would connect to a 12V AC adaptor, ground and output to the Arduino.

After some initial trial and error (and a failed attempt to get the prototype working during the final presentation)..success!

Arduino Code

/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor
This example code is in the public domain.
*/
int sensorold, sensornew;
int sensordif = 3;
boolean trigger;
void setup() {
pinMode(2, OUTPUT);
pinMode (6, OUTPUT);
pinMode (7, OUTPUT);
pinMode (13, OUTPUT);
digitalWrite(2, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(13, LOW);
sensorold = analogRead(A0);
sensornew = sensorold;
trigger = false;
Serial.begin(9600);
}
void loop() {
sensornew = analogRead(A0);
if (abs(sensornew – sensorold) > sensordif)
{
Serial.println(“trigger 2″);
digitalWrite(2, HIGH);
digitalWrite (13, HIGH);
// set the LED on
delay(1000);
// wait for a second
digitalWrite(2, LOW);
digitalWrite (13, LOW);  // set the LED off
Serial.println(“off 2″);
delay(10000);
Serial.println(“trigger 6″);
digitalWrite (6, HIGH);
delay(1000);
Serial.println(“off 6″);
digitalWrite (6, LOW);
delay(10000);
Serial.println(“trigger 7″);
digitalWrite (7, HIGH);
delay(1000);
digitalWrite (7, LOW);
Serial.println(“off 7″);
delay(10000);
}
// Serial.println(sensorValue, DEC);
}

/*  AnalogReadSerial Reads an analog input on pin 0, prints the result to the serial monitor   This example code is in the public domain. */
int sensorold, sensornew;int sensordif = 3;boolean trigger;
void setup() {  pinMode(2, OUTPUT);  pinMode (6, OUTPUT);   pinMode (7, OUTPUT);  pinMode (13, OUTPUT);    digitalWrite(2, LOW);  digitalWrite(6, LOW);  digitalWrite(7, LOW);  digitalWrite(13, LOW);  sensorold = analogRead(A0);  sensornew = sensorold;  trigger = false;  Serial.begin(9600);}
void loop() {  sensornew = analogRead(A0);  if (abs(sensornew – sensorold) > sensordif)  {    Serial.println(“trigger 2″);    digitalWrite(2, HIGH);    digitalWrite (13, HIGH);// set the LED on    delay(1000);    // wait for a second    digitalWrite(2, LOW);    digitalWrite (13, LOW);  // set the LED off    Serial.println(“off 2″);    delay(10000);    Serial.println(“trigger 6″);    digitalWrite (6, HIGH);    delay(1000);    Serial.println(“off 6″);    digitalWrite (6, LOW);    delay(10000);    Serial.println(“trigger 7″);    digitalWrite (7, HIGH);    delay(1000);    digitalWrite (7, LOW);    Serial.println(“off 7″);    delay(10000);  }   // Serial.println(sensorValue, DEC);}

Albert’s Amarino-Powered Kung-Fu Jacket

How do you talk to a jacket?  There was a time when if you did, people would look at you a little bit funny.

These days, with a little thing called an Android phone, a powerful little circuitboard called Lilypad Arduino, and an amazing toolkit called Amarino developed by Bonifaz Kaufmann, you can talk to your jacket — and even better, you can talk to someone else’s!

User Testing the Kung-Fu Jacket

Read the rest of this entry »

Archigram Skirt featuring Walking City

Last semester, I became very interested in Archigram. As a final project for one of my classes, I modeled and rendered an animation of Walking City. In my final project proposal for this class,  I proposed making a dress that featured Walking City and included charlie plexing circuitry for a scatter/sparkly lighting effect. After speaking with Leah, I decided to scale down my project by excluding the circuitry and  sewing a skirt instead of a dress.

Skirt Design

To simplify things a bit (and after noticing that skirt patterns weren’t quite available in my size at a local fabric store), I decided to extract a skirt pattern from one of my favorite skirts. I’m not quite  familiar with sewing clothes, however, with some previous quilting experience, I improvised extracting the pattern and sewing the pieces together. From the previous assignment with the embroidery machine, I chose to use a thick fabric to lessen the chances of the bobbin thread bunching and knotting.

One of my favorite skirts.

Cutting the pattern out.

Processing Code

For my original computation assignment, I began working on code  that evaluated the RGB value of a given pixel of an image and then visualized the pixel’s RGB value with another shape — such as  a circle. I worked on this code a little more for this project so that I could change the number of pixels that were evaluated in the x and y directions in addition to filtering the image’s colors into 5 colors.

Embroidery

The embroidery took about ~4 hours. As the embroidery progressed, I cut the needle thread. After the embroidery finished, I cut off the loose needle thread. Here’s a YouTube Video of the embroidery process.

Problems

The most problems I had were with the embroidery machine.  There was inconsistency from the color layout as depicted in Processing code to the 29 threads that the embroidery software detected (which I filtered down to five in processing). In the embroidery software, I filtered back down to 5 threads again, but 29 threads still showed up while embroidering.

Further Work

As part of my thesis, I’ve continued studying Archigram’s works through 3D modeling and rendering of  one of their other projects: Plug-in City. I’m interested in continuing modeling their work after I graduate from MIT. As I’ve worked on the project for this class, I began to consider my skirt being similar to a Girl Scout’s sash ( i.e., as they complete projects/requirements, they receive a badge as a indication of their work and progress which is sewn onto the sash). For this project, I chose to embroider Walking City because it’s something I’ve worked on and completed. And, similar to a Girl Scout’s badge, I’ve considered adding embroidery of other Archigram projects on the skirt as I complete modeling and rendering other Archigram Projects. I may be including an embroidery of Plug-in City very soon.

In my proposal, I also considered adding light and this is something I may do after finals.

Files

Final Presentation

Pattern

Code

int x=0;
int y=0;
int a=50;
int b=0;
int e=0;
int f=50;
int img_y = 0;
int img_x = 0;
PImage img;

void setup()
{
size (1200,700);
img = loadImage(“test2.jpg”);
smooth();
background(255);

//image size
int img_width = img.width;
int img_height = img.height;

int stepsize = 10;
int width_density = round(512/stepsize)-1;
int height_density = round(281/stepsize)-1;

for (int i=0;i< width_density;i++) //X
{

for (int j=0;j< height_density ;j++) //Y
{
//Pick a point
//Archigram Image 512 px by 281 px
img_x = x+i*stepsize ;
img_y = y+j*stepsize ;
int loc = img_x + img_y*img.width;

// Look up the RGB color in the source image
loadPixels();
float r = red(img.pixels[loc]);
float g = green(img.pixels[loc]);
float b = blue(img.pixels[loc]);

//Test to check that shades of gray are when r==g==b
/*if(r==g && g==b) {

}*/
noStroke();

//Limit fill to 5 shades of gray
//keep dark spots dark
//Values of RGB determined per http://www.w3schools.com/html/html_colors.asp
//Shade 1 — Black
int shade1 = 32;
int shade2 = 88; // between 25 and 72
int shade3 = 120;
int shade4 = 180;
int shade5 = 220;
int shade6 = 255;

if(r <= shade1 && g <= shade1 && b <= shade1) {
r = 0;
g = 0;
b = 0;
}

else if ((r<=shade2 && r>shade1) || (g<=shade2 && g>shade1) || (b<=shade2 && b>shade1))  {
/*r = 48;
g = 48;
b = 48; */

r = 255;
g = 0;
b = 0;  //ReD

}

else if ((r<=shade3 && r>shade2) || (g<=shade3 && g>shade2) || (b<=shade3 && b>shade2))   {
/*r = 96;
g = 96;
b = 96; */

r = 128;
g = 0;
b = 128; //Magenta
}

else if (r<=shade4 && r>shade3)  {
/*r = 136;
g = 136;
b = 136; */

r = 255;
g = 255;
b = 0; //Yellow

}

else if (r<=shade5 && r>shade4)  {
r = 255;
g = 128;
b = 0;  //Orange
//print(“test: “);
}

else  {
r = 255;
g = 255;
b = 255; //White
}

fill(r, g, b);

int radius = round(random(8,15)); //width
int radius2 = round(random(3,8)); //height
int tester = width_density-5;
if(j==tester) {
radius = 5;
radius2 = 8;
print(“j: ” + j);
}

ellipse(x+i*10, y+j*10, radius, radius2);

}
}

}


Game for Gettysburg

Inspired by an earlier project on the PCB Puzzle, I wanted to use the same concept to develop a game for an online site that teaches 5th graders about the civil war.

The embroidery process and writing code in Processing was challenging.  The various pieces had to fit properly. When pieces were sewn separately, the sizes of the items were not of the same scale. To fit everything, all items were put into a hoop at the same time and sewed together at one time. (This took over 4 hrs). When testing the pieces, the snaps and velcro sometimes don’t snap together properly, giving strange readings. The velcro readings evened out after a while of repeated attachment and removal. Writing the code was also difficult for a first-timer.

I want to keep working on the coding for processing to add a timer and allow 2 players to play simultaneously.

Code:

import processing.serial.*;
Serial myPort;        // The serial port

//variables for collecting and storing information
int ARRAYX = 2;
int ARRAYY = 3;
int [][] sensorArray = new int[ARRAYX][ARRAYY];

int flag = 0;
boolean inGame = false;
boolean prompt = false;
int characterPrompt = 0;
boolean instructions = true;
boolean wonGame = false;
boolean endGame = false;

//variables for drawing information on the screen
int spacing = 100;
PFont font;
PFont fontA;

void setup () {
//set the window size:
size(600, 400);
//initialize the font variables
font = loadFont(“SansSerif-20.vlw”);
textFont(font);

fontA = loadFont(“SansSerif-48.vlw”);

// list all the available serial ports
println(Serial.list());
// open the appropriate port
myPort = new Serial(this, Serial.list()[0], 9600);
// don’t generate a serialEvent() until you get an exclamation mark character
myPort.bufferUntil(‘!’);
// set inital background:
background(0);
}

void draw () {
background(0);
//draw buttonNEXT
fill (255);
rect(520, 350, 50, 30);
text(“NEXT”, 520, 350);
//draw buttonEXIT
fill (255);
rect(450, 350, 50,30);
text(“EXIT” , 450, 350);

if (inGame==false)
{
if (instructions==true)
{
//draw instructions
text(“Stick the right clothes onto the right character.”, 75, 100);
}

else if (prompt==true)
{
// draw prompt
if (characterPrompt == 0)
{
text(“Mary Tepe”, width/2, height/2);
}
else if (characterPrompt == 1)
{
text(“Jenny Wade”, width/2, height/2);
}
else if (characterPrompt == 2)
{
text(“General Lee”, width/2, height/2);
}
else if (characterPrompt == 3)
{
text(“General Meade”, width/2, height/2);
}
}
else if (wonGame==true)
{
text(“You’re right!”, width/2, height/2);
}
}
else if (inGame==true & wonGame == false)
{
if (characterPrompt == 0)
{
if (testIfMary() == true)
{
text(“You’re right!”, width/2, height/2);
wonGame=true;
inGame = false;
}
else
text(“That’s not Mary, keep trying.”, 200, height/2);
}

if (characterPrompt == 1)
{
if (testIfJenny() == true)
{
text(“You’re right!”, width/2, height/2);
wonGame=true;
inGame = false;
}
else
text(“That’s not Jenny, keep trying.”, 200, height/2);
}

if (characterPrompt == 2)
{
if (testIfGeneralL() == true)
{
text(“You’re right!”, width/2, height/2);
wonGame=true;
inGame = false;
}
else
text(“That’s not Gen. Lee, keep trying.”, 200, height/2);
}

if (characterPrompt == 3)
{
if (testIfGeneralM() == true)
{
text(“You’re right!”, width/2, height/2);
wonGame=true;
inGame = false;
}
else
text(“That’s not Gen Meade, keep trying.”, 200, height/2);
}
}
}

void mousePressed() {
//test if over area
if (( mouseX> 519 & mouseX< 571) & (mouseY>349 & mouseY<381))
{
if (instructions==true)
{
instructions = false;
inGame=false;
prompt=true;
characterPrompt = int(random(4));
//characterPrompt = 0;
}
else if (prompt== true)
{
prompt = false;
inGame= true;
}
else if (wonGame== true)
{
wonGame= false;
prompt=true;
characterPrompt = int(random(4));
}

}

else if (( mouseX> 449 & mouseX< 501 ) & (mouseY>349  & mouseY<381))
{
println(“clicked exit”);
exit();
}
}

void serialEvent (Serial myPort) {
//store a batch of data into variable “inString”
//batches are separated by exclamation mark characters
String inString = myPort.readStringUntil(‘!’);
//split the data into rows (rows separated by new line characters)
String[] incomingArrayRows = splitTokens(inString, “\n”);
//loop through all of the rows
for (int i=0;i<ARRAYX;i++)
{
//split each row into entries (entries separated by tab characters)
String[] incomingArrayEntries = splitTokens(incomingArrayRows[i], “\t”);
//loop through all of these entries
for (int j=0;j<ARRAYY;j++)
{
//store entries in the “sensorArray” variable
sensorArray[i][j]=int(incomingArrayEntries[j]);
//print the entries to the terminal, separated by tab characters
print(sensorArray[i][j]);
print(‘\t’);
}
//print a new line after each row
println();
}
//print a new line after each batch of data
println();
}

void printArray()
{
for (int i=0;i<ARRAYX;i++)
{
for (int j=0;j<ARRAYY;j++)
{
print(sensorArray[i][j]);
print(‘\t’);
}
//print a new line after each row
println();
}
println();
}

boolean testIfMary()
{
int hat = sensorArray[0][1];
int clothes = sensorArray[0][0];
int other = sensorArray[0][2];

if ((hat>10 & hat <29) & (clothes>10 & clothes<29)  & (other>10 & other<29))
{
return true;
}
else
return false;
}

boolean testIfJenny()
{
int hat = sensorArray[0][1];
int clothes = sensorArray[0][0];
int other = sensorArray[0][2];

if ((hat>30 & hat <60) & (clothes>30 & clothes<60)  & (other>30 & other<60))
{
return true;
}
else
return false;
}

boolean testIfGeneralM()
{
int hat = sensorArray[1][2];
int clothes = sensorArray[1][0];
int other = sensorArray[1][1];

if ((hat>10 & hat<60) & (clothes>10 & clothes<60)  & (other>10 & other<60))
{
return true;
}
else
return false;
}

boolean testIfGeneralL()
{
int hat = sensorArray[1][2];
int clothes = sensorArray[1][0];
int other = sensorArray[1][1];

if ((hat>200 & hat<300) & (clothes>200 & clothes<300)  & (other>200 & other<300))
{
return true;
}
else
return false;
}

3D textile

My basic idea is to create some fabric that can do 3D spatial structures. The non-woven materials show potentials to do this kind of stuff seamlessly.

For this experiment I used the agenlina fibres to cast the shape of the daily objects. For the first one, I used a water bottle with hot water inside as a mold. Then I put a latex glove over the surface and filled the fibers in between the latex and the bottle. I put the whole thing into boiling water. Unfortunately the latex began to melt during boing. But basically the result is good. Some parts are lack of fibers since I did not distribute them homogeneously. I used the iron to “roll” the bottle to get more fibers on.

Then I put the fibers in between two paper bowls and drop the whole thing into boiling water. The paper became soft, but the casting seemed fast. I took it out before the paper turned to shapeless.

 

Gloss Medium Compound

After Leah showed us all of the interesting techniques last week for making non-woven it made me start to think about what processes I could use. I was specifically interested in the compound, possible constructed by two fabrics dipped in a rubber or resin. Read the rest of this entry »

Final Project Presenatations and Documentation

Due: Tuesday, May 10, 2011
See student final projects here

Your final project assignment has 3 pieces: the project itself, a short presentation about the project, and a web page documenting the project. Information about presentations and documentation is below. Read the rest of this entry »

Paint = Fabric

For this nonwoven, I decided to experiment with acrylic paints to see if they could be incorporated into a fabric. During the class, I was inspired by the silicone material, but thought the molding process was limiting and time consuming for textile applications. Making a mold takes time, and it is hard to control the topography of the finished product from the mold. Hence, I played around with some glue, acrylic paints and felt.

Read the rest of this entry »

Nonwoven Diagrid

I’ve recently become interested in the diagrid pattern and its variations. For this project, I laser cut a mold from masonite and plexiglass.

1st Diagrid Mold

I created the first mold from masonite  (1/8″) and used Smooth-On to cast the mold. The Smooth-On mold was very messy and runny. I wrapped it in three layers of wax paper and taped it to prevent leakage and let it sit for three days. After three days, however, the mold was not fully set. Despite this mold being very greasy — a feature intended to aid in the extraction process — I had a great deal of difficulty getting the mold out of the cast.

Smooth-On mold

Masonite

Smooth-On in masonite

2nd Diagrid Mold

I created the second mold from plexiglass (1/16″) and used another mold for casting. This mold was extremely viscous (but not as messy). I wasn’t quick enough pouring the mold into the cast and it became more viscous (hardened) as I worked my way across the mold (right to left) and air pockets formed on the left side of the mold. Additionally, I applied the final layer of the mold (smallest diagrids) on top too late — when I pulled it off the mold, it created an uneven surface across the already setting mold.

Plexiglass cast

plexiglass cast

Final Rubber Mold