12. Skin Electronics¶
Research¶
I have to admit that, despite my strong interest in weeks focused on electronics, this particular week raises many questions and contradictions for me — starting with its very name. Skin electronics. Everything inside me resists it, because I don’t like the idea of letting electronics get too close to my body, let alone wearing them constantly. Perhaps this is just the usual resistance to technological progress that has existed in every era.
At the same time, there are situations where we choose the best option available, and in cases of health conditions or limited mobility, developments in skin electronics may indeed be necessary. Still, this is an area of medicine that I prefer to observe from the sidelines.
References & Inspiration¶
Stanford “e-skin” project¶
The e-skin is soft and stretchable, while also being able to mimic sense of touch and run efficiently at a low voltage. (Image credit: Jiancheng Lai and Weichen Wang of Bao Research Group at Stanford University)
Stanford engineers have built a soft, stretchable electronic “skin” that doesn’t just feel pressure and temperature like real skin — it turns those sensations into electrical signals that could one day speak directly to the nervous system. Unlike earlier prototypes that needed rigid parts, this version uses flexible circuits embedded in a paper-thin material that bends and stretches with the body. The goal is to give prosthetic limbs and other wearable medical devices a sense of touch that feels natural and real, helping users control them better and connect more intuitively with technology.
The three layers of the e-skin contain networks of organic nanostructures that transmit electrical signals even when stretched. They can be designed to sense pressure, temperature, strain, and chemicals. (Image credit: Jiancheng Lai and Weichen Wang of Bao Research Group at Stanford University)
Ultra-Thin ‘Electronic Tattoo’¶
The project explores a new kind of wearable technology in the form of an ultra-thin electronic “tattoo” that adheres directly to the skin. Light, flexible, and almost unnoticeable, it moves with the body and can continuously collect health data in real time. Unlike traditional wearables, this device doesn’t feel like an external gadget—it becomes part of the skin itself. The work points toward a future where medical monitoring is more comfortable, intuitive, and seamlessly integrated into everyday life.
Ultra-thin electronic "skin display"¶
Researchers at the University of Tokyo have created an ultra-thin, super-flexible electronic "skin display" that sticks comfortably to your skin and shows health data in real time.
Someya Group Organic Transistor Lab
This stretchy screen can display a live electrocardiogram waveform from a breathable sensor worn on the skin. Paired with a wireless module, the whole system—dubbed "skin electronics"—sends biometric data to the cloud. It's especially promising for sports science and elite athletes who want instant feedback without carrying a phone or device. Lead researcher Professor Takao Someya explains: "Our skin display shows simple moving graphics. It's made from thin, soft materials, so it deforms freely." The display can stretch up to 45% of its original length. While wearable sensors that track vitals and send data wirelessly already exist, this new approach lets users glance at their key metrics right on their skin.
Experiments with skin electronic¶
Tools¶
- FabriXiao RP2040
- Arduino IDE
- Processing
- Copper Tape
- Velostat
- Alligators
- USB - C type connection cable
- Scissors
- 3M Tegaderm Transparent Film Dressing
- Flexible Aluminum wire with silicon cover
- LiPo battery 3.7V
- Soldering Tool
- Soldering Irown
Pressure Matrix. Process and workflow¶
For this week, I decided to make Pressure Matrix following the tutorial of Emma Pareschi.
I prepared: - Cooper tape 10cm x 0,5cm - 6 pcs - Tape from Velostat 6cm x 0,7cm - 3 pcs - 3M Tegaderm Transparent Film Dressing - 2 pcs
And started to assemble them in the way that was suggested by Emma.

I built the matrix and connected my matrix to FabriXiao as instructed below.
Then I tested the code with aligators connection first.
Code¶
/*
The analog sensor is connected between pin A0 and pin 4
*/
int row0 = A0; //first row pin
int row1 = A1; //first row pin
int row2 = A2; //first row pin
int col0 = 4; //first column pin
int col1 = 5; //first column pin
int col2 = 6; //first column pin
int incomingValue0 = 0; //variable to save the sensor reading
int incomingValue1 = 0; //variable to save the sensor reading
int incomingValue2 = 0; //variable to save the sensor reading
int incomingValue3 = 0; //variable to save the sensor reading
int incomingValue4 = 0; //variable to save the sensor reading
int incomingValue5 = 0; //variable to save the sensor reading
int incomingValue6 = 0; //variable to save the sensor reading
int incomingValue7 = 0; //variable to save the sensor reading
int incomingValue8 = 0; //variable to save the sensor reading
void setup() {
// set all rows to INPUT (high impedance):
pinMode(row0, INPUT_PULLUP);
pinMode(row1, INPUT_PULLUP);
pinMode(row2, INPUT_PULLUP);
//set the firt column as output
pinMode(col0, OUTPUT);
pinMode(col1, OUTPUT);
pinMode(col2, OUTPUT);
//open serial communication
Serial.begin(9600);
}
void loop() {
//set the col0 to low (GND)
digitalWrite(col0, LOW);
digitalWrite(col1, HIGH);
digitalWrite(col2, HIGH);
//read the three rows pins
incomingValue0 = analogRead(row0);
incomingValue1 = analogRead(row1);
incomingValue2 = analogRead(row2);
//set the col0 to low (GND)
digitalWrite(col0, HIGH);
digitalWrite(col1, LOW);
digitalWrite(col2, HIGH);
incomingValue3 = analogRead(row0);
incomingValue4 = analogRead(row1);
incomingValue5 = analogRead(row2);
//set the col0 to low (GND)
digitalWrite(col0, HIGH);
digitalWrite(col1, HIGH);
digitalWrite(col2, LOW);
incomingValue6 = analogRead(row0);
incomingValue7 = analogRead(row1);
incomingValue8 = analogRead(row2);
// Print the incoming values of the grid:
Serial.print(incomingValue0);
Serial.print("\t");
Serial.print(incomingValue1);
Serial.print("\t");
Serial.print(incomingValue2);
Serial.print("\t");
Serial.print(incomingValue3);
Serial.print("\t");
Serial.print(incomingValue4);
Serial.print("\t");
Serial.print(incomingValue5);
Serial.print("\t");
Serial.print(incomingValue6);
Serial.print("\t");
Serial.print(incomingValue7);
Serial.print("\t");
Serial.println(incomingValue8);
delay(10); //wait millisecond
}
}
The result of testing in Arduino IDE is below. If you check in Serial Plotter, when you press the sensor matrix, the lines in Serial Plotter become straighter.
We can also try our Matrix in Processing. It's imortant to be sure that Xiao RP2040 is not busy on Arduino IDE.
/*
The sensors values are not calibrated.
*/
/*
Code based on Tom Igoe’s Serial Graphing Sketch
>> http://wiki.processing.org/w/Tom_Igoe_Interview
Reads X analog inputs and visualizes them by drawing a grid
using grayscale shading of each square to represent sensor value.
>> http://howtogetwhatyouwant.at/
*/
import processing.serial.*;
Serial myPort; // The serial port
int rows = 3;
int cols = 3;
int maxNumberOfSensors = rows*cols;
float[] sensorValue = new float[maxNumberOfSensors]; // global variable for storing mapped sensor values
float[] previousValue = new float[maxNumberOfSensors]; // array of previous values
int rectSizeX = 0;
int rectSizeY = 0;
int rectY;
void setup () {
size(1000, 1000); // set up the window to whatever size you want
rectSizeX = width/rows;
rectSizeY = height/cols;
println(Serial.list()); // List all the available serial ports
String portName = Serial.list()[2]; // set the number of your serial port!
myPort = new Serial(this, portName, 9600);
myPort.clear();
myPort.bufferUntil('\n'); // don’t generate a serialEvent() until you get a newline (\n) byte
background(255); // set inital background
smooth(); // turn on antialiasing
rectMode(CORNER);
}
void draw () {
for (int i = 0; i < maxNumberOfSensors; i++) {
fill(sensorValue[i]);
rect(rectSizeX * (i%rows), rectY, rectSizeX, rectSizeY); //top left
if((i+1) % rows == 0) {
rectY += rectSizeX;
}
}
rectY=0;
}
void serialEvent (Serial myPort) {
String inString = myPort.readStringUntil('\n'); // get the ASCII string
if (inString != null) { // if it’s not empty
inString = trim(inString); // trim off any whitespace
int incomingValues[] = int(split(inString, "\t")); // convert to an array of ints
if (incomingValues.length <= maxNumberOfSensors && incomingValues.length > 0) {
for (int i = 0; i < incomingValues.length; i++) {
// map the incoming values (0 to 1023) to an appropriate gray-scale range (0-255):
sensorValue[i] = map(incomingValues[i], 000, 900, 0, 255); // stretch 5×5
sensorValue[i] = constrain(incomingValues[i], 0, 255);
//println(sensorValue[i]); // print value to see
//println(incomingValues[i]);
}
}
}
}
The harder you press, the darker it gets! But in connection with Aligators, the result is not so good. Hope in commection with flexible Aluminum wires with a silicon cover, the result would be better.
Testing with USB connection¶
Then I assembled the circuit with alum wires in silicone cover and tested in Processing again connected to computer with USB. The result was much more stable.
As now we are sure, that the matrix is working well, I soldered Aluminium wires with silicone covering to FabriXiao and connected them to LiPo battery 3.7V.
Finally, I put this matrix to my arm. I think it can be useful for people with disabilities, but microcontroller should be with Wi-Fi module.





