13. Skin Electronics
📆 2020 - December 15th to 22nd
What I did this week
A silicon prop that lights up when touched:
How did I get there?
This week's lecture by Katia Vega was a very fun way to end the Fabricademy lectures. Skin Electronics is an experimental and innovative field
Her project go beyond wearables and integrate circuits onto the skin with tatto paper, into hair extensions, nails, cosmetics, or even using facial muscles to control behaviours.
Deciding what to do
Last week for the Soft Robotics experiments, we casted silicon in a 3D mold. We had some silicon left after pouring it in the molds, so we decided to put it inside the vaccuum-molded boiled leather I did in the Textile as Scaffold week:
It gave us this weirdly textured silicon blob, and we thought we could use it as a "skin extension" and hide a circuit with LEDs underneath. We tested the NeoPixels underneath, and it showed pretty well:
Here is the circuit I thought of, with the ATtiny, a momentary switch and a 3V battery:
Programming the ATtiny
First I had to program the ATtiny. Thanks to Emma's tutorial, as always very helpful, I managed to program it using the Arduino UNO as an ISP:
I uploaded a simple code, adapted from the color wipe Emma sent us, where the NeoPixels light up one after another with a random color, when pressing on the switch.
#include <Adafruit_NeoPixel.h>
// Pin where the NeoPixes are connected
#define LED_PIN 1
// How many NeoPixels are attached
#define LED_COUNT 4
// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 3 = Pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
// The switch pin and status
int sw_pin = 2;
int sw_status = 0;
// Defining the colours
uint32_t off = strip.Color(0, 0, 0);
uint32_t red = strip.Color(200, 0, 0);
uint32_t blue = strip.Color(0, 191, 255);
uint32_t green = strip.Color(51, 153, 51);
uint32_t magenta = strip.Color(153, 0, 204);
// Putting the colours into an array so I can access them randomly
uint32_t colors[] = {red, blue, green, magenta};
// setup() function -- runs once at startup --------------------------------
void setup() {
strip.begin(); // Initialize NeoPixel strip object
strip.show(); // Turn OFF all pixels ASAP
strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
pinMode(sw_pin, INPUT_PULLUP);
}
// loop() function -- runs repeatedly as long as board is on ---------------
void loop() {
// Reading the switch status
sw_status = digitalRead(sw_pin);
if (sw_status == 0){
// If switch status is 0, run the colorWipe function with a 50ms delay
colorWipe(50);
} else {
// Else, successively turn off every NeoPixel in the strip
for(int i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, off);
strip.show();
}
}
}
// Fill strip pixels one after another with a color. Strip is NOT cleared
// first; anything there will be covered pixel by pixel.
// Color is not passed, but accessed in the global array
// The delay time (in milliseconds) between pixels is passed as an argument.
void colorWipe(int wait) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
int randNumber = random(4); // Get a random number between 0 and 3
// Set the color with one of the colors from the array
strip.setPixelColor(i, colors[randNumber]);
strip.show(); //display the color
delay(wait);
}
}
Creating the circuit
With the ATtiny programmed, I could now create the circuit that would go underneath the silicon. I decided to do it with conductive thread on white felt, that I thought would not show too much under the silicon. I tested at every step if everything was still working, removing the wires each time I sewed or glued a new element on the circuit.
I had some trouble attaching the ATtiny to the circuit; as I am not at home right now, I did not have a soldering iron, so I glued it, and tried to separate the different pins with masking tape. In the process, I broke one of the pins! It's still working though 🙈
Putting everything together
I then had A LOT of trouble trying to attach the fabric underneath the silicon. I thought I would glue it, but all the glues I had were not working with the silicon, nor were the double-sided tapes I had. In the end I sewed the two layers together.
I was surprised and relieved that everything was still working at this point!
Trying to integrate it on my skin
I used double-sided tape to attach the felt to my skin, and blended all the edges with white paint and foundation. The result would have been better with something more appropriate for attaching it to the skin, but I was in a rush...
What next?
👽 This weird blob would be better if the circuit was properly soldered! I could also have used latex or something that would have sticked to the skin better. Of course It would have meant having all the proper materials, and not doing this yesterday 😅
💅🏼 On a completely other subject, I really liked the idea to put small RFID chips in nails to use them to activate things. I did not have time to try it this week, but I might later in the future.