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.


Winding a Conductive Warp

Thermochromic Testing on Conductive Upholstery

Thermochromic Upholstery Activated by Temperature Data Feed


Presentation Link: ThermochromicTextilesPresentation



int inComingCharacter = 0;         // incoming serial byte

//int inComingData[10] = {‘A’};

int inComingNumber;

long i;


void setup(){


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 =;


digitalWrite(13, HIGH);



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);


digitalWrite(13, LOW);








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”);



myPort = new Serial(this, Serial.list()[0], 9600);



void draw() {

if (index < temp.length) {

String[] pieces = split(temp[index],’\t’);

println(“Sent: ” + pieces[0]);



// Go to the next line for the next run through draw()

index = index + 1;




void serialEvent(Serial p)


while (p.available() > 0) {

println(“received: ” +;