Skip to content

8. Wearables


This week was very much an extension of the e-textiles week. I also ended up incorporating a development of a project from week 12 skin eelctronics here as well. There are so many possibilities with actuators but I decided to stick with thermochromic and LEDs for the time being because they are the ones I have had most experience with on this journey so far. I would really like to explore other actuators and sensors in the future. This is something I hope to explore with my Neuroscience class next year.


Heating Element Actuator

mushroom circuit

Figure 1. Mushroom season! My slippers inspired me to create a circuit with a theme of mushrooms. I decided to try to make a heating element circuit combined with thermochromic paint to build off my experience with it during the E-textiles week.

mushroom circuit close up

Figure 2. Heating element circuit diagram. Courtesy of Liza Stark. Found under lecture notes for 2023-24.

mushroom circuit close up

Figure 3. Heating element circuit close up. I used conductive fabric tape to adhere to the surface of the felt. Aesthetically, it's not great but the tape is very convenient for piecing together a prototype.

Video. Magic Mushrooms! Final product with thermochromic paint and heating element circuit.

Galvanic Skin Response Input and LED Actuator

I wanted to refine the galvanic skin response sensor I made in week 12. I realized after trying to play around with the original one I had made that it was only a capacitive touch sensor and only responded when I touched it and not in response to the electrical changes on my body which was the original idea. So after several hours of talking with Chat GPT I finally landed on a circuit and a code that would read the galvanice skin response. The galvanic skin response measures the electrical conductance of the skin. In this circuit the electrodes make direct contact with the skin and measure the electrical properties of the skin. I used conductive fabric as make shift electrodes as I did not have enough electrodes available at home.

I attached two electrodes to pins A1 and A2 on the Adafruit Gemma MO. I attached a grounding electrode to ground. The neopixels are set up in the same way as in week 12 for the Adafruit's Space Face LED Galaxy Makeup. Setting up the Gemma MO and libraries are all explained in week 12.

mushroom headband Figure 1. Mushroom Headband. I wanted to stick with the mushroom theme so I attached it to my mushroom headband.

Adafruit Gemma MO Notes: Bootloader Mode: If you press the reset button twice quickly, the Gemma M0 enters bootloader mode. In this mode, the Gemma is ready to receive new code to be uploaded to it. The red LED turning on could indicate that the board is in bootloader mode and ready to accept new code.


I honestly wish I had more time to build all of the different circuits that were presented during this week. I am such a fan of electronics and e-textiles. I am looking forward to jumping back into these projects over summer vacation!

Methods and Materials

  • Among Us e-textile kit, from FabLab Leon
  • Conductive fabric tape
  • Conductive thread
  • FQP30N06L 60V LOGIC N-CHannel MOSFET
  • Cotton fabric
  • Thermochromic pigment
  • 100k Ohm resistor
  • 1N4001 Diode
  • Arduino UNO
  • Wires

Heating Element Actuator

from Liza Stark's "Wearables" lecture

const int heatingElementPin = 8; // Replace 8 with the actual pin number you are using

void setup() {
  pinMode(heatingElementPin, OUTPUT);

void loop() {
  // Start with smaller values and go up based on material
  digitalWrite(heatingElementPin, HIGH);

  // We always want to give the heating element and ink time to rest
  digitalWrite(heatingElementPin, LOW);

Galvanic Skin Response Input and LED Actuator

#include <Adafruit_NeoPixel.h>

#define NUM_PIXELS 5
#define BRIGHTNESS 50

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);

#define ELECTRODE_PIN_1 A1
#define ELECTRODE_PIN_2 A2

void setup() {
  // Initialize GSR pins for analog input

  // Initialize NeoPixels

  // Initialize serial communication

void loop() {
  // Read analog voltages at electrodes
  int voltage1 = analogRead(ELECTRODE_PIN_1);
  int voltage2 = analogRead(ELECTRODE_PIN_2);

  // Calculate resistance using Ohm's Law
  float resistance = 10000 * (1023.0 - voltage1) / (voltage1 - voltage2);

  // Output resistance value to serial monitor
  Serial.print("Resistance: ");

  // Update NeoPixel color smoothly like a rainbow based on resistance

  // Delay between readings

void updateNeoPixels(float resistance) {
  // Calculate hue value for smooth rainbow gradient based on resistance
  uint16_t hue = map(resistance, 0, 1023, 0, 255);

  // Fill NeoPixels with smooth rainbow gradient
  for (int i = 0; i < NUM_PIXELS; i++) {
    strip.setPixelColor(i, strip.ColorHSV(hue));
  }; // Update LED colors