9. E-Textiles and Wearables II#

Particle sensor & heating circuit from Lara Campos on Vimeo.

Thermocromic ink#

Thermochromic inks have the property to change color with temperature. They change from color to colorless when it reaches certain temperature.

  • Mix the pigment powder, in this case blue from SFXC supplier, with a base of silk screen binder. Is important to check the temperature at which the ink reacts, in this case it is 31 degrees.

  • Apply it to the fabric you want to use by serigraphy method in order to reach a smooth finish, because the uniformity of the paint determine how evenly it will change.

Conductive thread#

When large current goes through low resistance conductive material, it emits heat. You can use this method to heat up conductive threads and so change make your thermocromic ink react.

I recommend to use Bekinox stainless steel thread from Bekaert supplier. Stainless steel fibers can handle a lot of heat, and they have good amount of resistance (about 2ohm/ 10cm).

Your conductive material needs to have just the right amount of resistance. If it is too high it won’t heat, and if it is too low and you might create a short circuit. The recommended current you need to have is between 500mA and 1000mA. So you can calculate it with the Ohms law formula I= V/R as V = I x R.

As my voltage was 5V I needed at least a resistance of 9 ohms to reach 555 mA. Though in my case it was too low to heat the stainless steel thread and make the thermocromic ink react, so I decided to reach 6 ohms in order to have a current of 900mA.

First you need to measure the resistance the thread has according to the lenght you need for your pattern. In my case the resistance of the thread was 22 ohms, so I needed to cut it in two pieces in order to reach a 11 ohms resistance each, and so have a total resistance of 6 ohms. This is called parallel circuit, and you can calculate it searching for parallel resistance calculator.

A Parallel circuit is one with several different paths for the electricity to travel. It’s like a river that has been divided up into smaller streams, however, all the streams come back to the same point to form the river once again.

Some basic rules you need to know about it:

• A parallel circuit has two or more paths for current to flow through.

• Voltage is the same across each component of the parallel circuit.

• The sum of the currents through each path is equal to the total current that flows from the source.

• You can calculate the total resistance in a Parallel circuit with the following formula:

1/Rt = 1/R1 + 1/R2 + 1/R3 +…

Applying the formula to my numbers:

1/Rt = 1/11 + 1/11

Rt=6 ohms

So the current I have through my conductive thread is 830 mA. 5 V/6ohms=0,833 A

This is the first test heating the stainless steel thread:

After this calculations, I sewed the pattern on another piece of fabric, with the stainless steel thread using a needle, but you can use the embroidery machine for more complex designs.


Heating takes a lot of power - current to be specific, and Arduino pins cannot provide the power we need to warm a heating element. So you have to construct a circuit that will let you use the power source you need to feed every component. In my case I plug it to electricity with 5v source.

To make it possible I also used a transistor (mosfet), which works as an electrical switch. Its a small device you put into your circuit, that has 3 legs. One is the gate that goes to the Arduino (with a resistance to protect it), another is the drain from which the current comes, and flows to the last one called the source which connects with the ground. It is important to add a diode in between the heating element and your mosfet, for the current to flow in one direction and not to come back. Also you need to take into account the different types of mosfet you can use, in my case it was a 5V mosfet, but you can find 3.3 V ones. Then connect the Arduino with your circuit having in mind the pins you need to use. In my case, I have two new connections I need to use, according to what my sensor requires. The PM sensor has to be connected to I2C commmunication. This is like a manager of the different inputs you can have. So the sensor connects to the I2C through 4 plugs, SDA (manages data), SCL(manages clock/time), + (3.3V) and – (ground).

Also as the sensor needs 3.3 V, I needed to add a step down, which is a small device that has Vin(voltage in-5V), Vout(voltaje out 3.3V) and ground (-).

Input: PM 2.5 SENSOR#

The name of it is Plantower PMS 7003. This sensor is a Particle Matter sensor, that measures particles smaller than 2.5 um (micrometers). This kind of particles are the ones that are dangerous and pollute the air.

The unit of measurement is ug/m3 of air.

This sensor is part of smart citizen pack, which is used by other projects here at FabLab BCN. It is coded to take 6 parameters and make an average of them, which you can see it if you open the Monitor Serial once connected to your Arduino.

The main idea is to measure pollution in the streets and so have a passive reaction to it, which is the output I’ve developed before: heating the stainless steel thread and generate the thermocromic ink reaction.

To set up my parameter of pollution and do the coding from this data, I checked the UE air quality parameters in https://www.eea.europa.eu/themes/air/air-quality-index

So on, I decided to program the coding to react and heat if the values where >= 50.

PWM PIN – don’t need to use it as I need all the power the whole time.

Later I replaced the arduino for a smaller device called Arduino Nano. The ideal was to replace it with a smaller one called AtTiny85, which also needs 5V. Though in this case it was senseless as the sensor is already big to make it disguise as wearables. Moreover it wasn’t compatible with the sensor, as they speak different ‘languages’. It is important if you are changing the Arduino One for another device, to check if the pins it has have SDA & SCL connections. In my case I found that in ATTiny, pin 5 is for SDA and pin 7 for SCL, and for Arduino Nano is A4 SDA and A5 SCL.



enum PMcommands {                                                                                                                                                           
  PM_START,               // Start both PMS                                                                                                                           
  GET_PMA,                // Get values for PMS in slot A                                                                                                             
  GET_PMB,                // Get values for PMS in slot A                                                                                                             
  GET_PM_AVG,             // Get values for both PMS averaged                                                                                                         
  PM_STOP,                // Stop both PMS                                                                                                                            

#include <Wire.h>
#define PM_ADDRESS 0x02

int readingPM1;
int readingPM25;
int readingPM10;

int HEATPin = 7;
void setup() {
  // put your setup code here, to run once:


pinMode(HEATPin, OUTPUT); 



void loop() {


  uint8_t values[6];

  Wire.requestFrom(PM_ADDRESS, 6);                                                                                                                                 
  if (Wire.available()) {
   for (uint8_t i=0; i<6; i++) {                                                                                                                                          
      values[i] = Wire.read();                                                                                                                                    
     readingPM1 = (values[0]<<8) + values[1];                                                                                                                               
     readingPM25 = (values[2]<<8) + values[3];                                                                                                                              
     readingPM10 = (values[4]<<8) + values[5];



if (readingPM25 >= 50 && readingPM25 < 2000) {
  Serial.println("Heating Starts");
  digitalWrite(HEATPin, HIGH);
  Serial.println("Heating Done");

} else {


Testing it

test particle & heater from Lara Campos on Vimeo.


It was exciting to be able to build a wearable that can tell us when we are exposed to polluted areas in terms of air. Still, maybe it wasn’t a good idea to use the smart citizen kit, as it includes some big electronic devices that make it not so wearable.


Linda Worbin from Swedish School of Textiles have made an extensive design research on Dynamic textile design with thermochromic ink prints as her PhD study. You can download her PhD thesis “Designing dynamic textile patterns” to read about her research.