Thermochromic Textiles
by N.Tari
Dena Molnar and Nicole Tariverdian
Question:What role can textiles and interiors play in informing us about exterior conditions?
Goal: To create a series of textiles that are augmented by exterior conditions like weather or temperature.
Overview: Over the past few weeks we have conducted a series of experiments consisting of different types of woven and knit thermochromic textiles. These included, dyeing yarn and piece dyeing fabric, embroidering patterns with steel thread, knitting in conjunction with computer generated patterns, felting, and weaving with conductive yarn (steel) in the warp of the weave.
We intended to affect the fabrics with outside data such as temperature. This upholstered stool is a small example to proove our concept. These fabrics may be better implicated as wall coverings, widow treatments, or as decorative pieces.
Videos:
Thermochromic Testing on Conductive Upholstery
Thermochromic Upholstery Activated by Temperature Data Feed
Presentation Link: ThermochromicTextilesPresentation
Code:
Arduino:
int inComingCharacter = 0; // incoming serial byte
//int inComingData[10] = {‘A’};
int inComingNumber;
long i;
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
}
void loop()
{
// if we get a valid byte, read analog ins:
if (Serial.available() > 0) {
inComingNumber = Serial.read();
Serial.write(inComingNumber);
digitalWrite(13, HIGH);
delay(100);
if (inComingNumber > 29 && inComingNumber < 40){
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(9, LOW);
}
if (inComingNumber > 39 && inComingNumber < 50){
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
digitalWrite(9, LOW);
}
if (inComingNumber > 49 && inComingNumber < 60){
digitalWrite(9, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}else{
digitalWrite(13, LOW);
}
}
}
Processing:
import processing.serial.*;
String[] temp;
int index = 0;
Serial myPort; // The serial port
int[] serialInArray = new int[3]; // Where we’ll put what we receive
int serialCount = 0; // A count of how many bytes we receive
boolean firstContact = false; // Whether we’ve heard from the microcontroller
void setup(){
temp = loadStrings(“positions_2.txt”);
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 9600);
}
void draw() {
if (index < temp.length) {
String[] pieces = split(temp[index],’\t’);
println(“Sent: ” + pieces[0]);
myPort.write(int(pieces[0]));
}
// Go to the next line for the next run through draw()
index = index + 1;
delay(5000);
}
void serialEvent(Serial p)
{
while (p.available() > 0) {
println(“received: ” + p.read());
}
}