12. Skin Electronics¶
Skin Electronics: A Quick Overview¶
Skin electronics are ultra-thin, flexible circuits that stick to your body like a temporary tattoo. This makes technology not just functional, but expressive and human.
Ultimately, skin electronics suggest a world where wellbeing becomes proactive instead of reactive.
The Future of Health with Skin Electronics¶
As skin electronics mature, healthcare is likely to shift from episodic check-ups to continuous, meaningful insight. Instead of waiting for symptoms, ultra-thin biosensing patches could detect early signs of infection, inflammation, hormonal imbalance, or cardiovascular stress long before a crisis emerges.
These systems may also become deeply personalised, learning an individual’s baseline rhythms, pulse variability, temperature cycles, stress reactions, hydration patterns and recognising subtle deviations unique to that person. A future patch might whisper: your body is working harder than usual today, or your recovery is incomplete, replacing generic health advice with context-rich, body-specific guidance.
Inspiration pictures¶
References¶
- Repair Skin Research
Demonstrates self-healing, water-resistant electronic skin capable of repairing itself after damage. - Stephanie Johnson. Designer known for expressive wearable circuits and facial e-textile interventions.
- Riley Cox Artist working with soft sensors, face-mounted circuits, and experimental electronic textiles.
- E-Skin Tattoo Electronics
Example of thin, flexible tattoo-style sensors for skin-mounted interfaces and health data collection. - Skin Electronics Lecture Notes Covers sweat sensing, electrophysiology, temperature sensing, and energy harvesting in epidermal devices.
- Prof. S. D. Upadhyaya - Nadi Vijnana
Foundational text on ancient pulse diagnostics, exploring traditional methods of reading subtle body signals.
Research¶
KINISI¶
Kinisi is a FX e-makeup application that tries to answer the question: "Could your skin act as an interface?"
Kinisi could change the world with a smile or a wink.
The Dermal Abyss¶
DermalAbyss was a proof-of-concept that presented a novel approach to bio-interfaces in which the body surface would be rendered as an interactive display. By replacing traditional tattoo inks with biosensors whose colors change in response to variations in the interstitial fluid, it blended advances in biotechnology with traditional methods in tattoo artistry.
Health and Wellbeing in the Ancient World¶
Long before modern medicine, the ancient Greeks and Romans also read the pulse with extraordinary sensitivity. They paid attention to qualities we rarely consider today:
size, frequency, strength, speed, fullness, order, equality, rhythm.
For them, feeling the pulse was a kind of superpower, a way of understanding the person, not just the heartbeat. Their focus on quality rather than quantity reveals how deeply pulse-reading was tied to knowledge, trust, and even authority.
Inspiration: The Three-Finger Pulse¶
I first saw the three-finger pulse in Sri Lanka, sitting across from a doctor whose calm presence felt almost otherworldly. She placed her fingers gently on my wrist, each one listening for a different layer of my pulse, not just the beat, but the story beneath it.
It felt like she was reading a language my body spoke but I’d never learned.
There was no machine, no graph, no data stream. Just touch, intuition, and a kind of quiet magic.
That moment stayed with me.
It made me wonder:
What if light could read the body the same way?
What if a soft wearable on the wrist, something almost invisible, it could glow, shift, or breathe to reflect what’s happening inside us?
A modern echo of an ancient practice.
The three fingers become three sensors.
The doctor’s intuition becomes colour, rhythm, and pattern.
The pulse becomes visible, a small whisper of the body made luminous.
This project is rooted in that meeting:
a reminder that technology doesn’t have to replace magic;
Sometimes it can help us see it.
The Design of the tattoo¶
Light Prototype¶
Simple ON/OFF Pattern Demonstration
This first version of my pulse-inspired wearable uses a very simple ON–OFF–ON sequence across
three NeoPixel LEDs. It is based on the traditional Sri Lankan pulse-reading method used to sense Vata (air), Pitta (fire), and Kapha (earth).
Instead of reading qualities with fingertips, here the LEDs act as digital stand-ins for the three doshas.
This is the first, just a rhythm of switching states to show how each dosha could be visually represented on the skin.
Hardware Setup¶
- Board: RP2040
- Pin: D7 → NeoPixel Data In
- LEDs: Neopixel
- Power: Shared 5V + GND
Arduino Code - Simple 3-Pulse ON/OFF Cycle¶
#include <Adafruit_NeoPixel.h>
#define DATA_PIN D7
#define NUM_LEDS 3
Adafruit_NeoPixel strip(NUM_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
strip.setBrightness(60); // safe + visible
strip.show();
}
void loop() {
// -----------------------------------
// Pattern A: OFF – ON – OFF
// -----------------------------------
// Vata OFF
strip.setPixelColor(0, 0, 0, 0);
// Pitta ON (orange–fire)
strip.setPixelColor(1, strip.Color(255, 100, 0));
// Kapha OFF
strip.setPixelColor(2, 0, 0, 0);
strip.show();
delay(500);
// -----------------------------------
// Pattern B: ON – OFF – ON
// -----------------------------------
// Vata ON (violet–air)
strip.setPixelColor(0, strip.Color(80, 0, 150));
// Pitta OFF
strip.setPixelColor(1, 0, 0, 0);
// Kapha ON (teal–earthwater)
strip.setPixelColor(2, strip.Color(0, 150, 80));
strip.show();
delay(500);
}
3-Pulse Vata / Pitta / Kapha Light System¶
The idea is to physically show an “inner state” on the skin, a little preview of a future where
light on your wrist or fingers could tell you how you’re feeling.
Concept: From 3-Finger Pulse to 3-LED “Mood Map”¶
In traditional pulse reading, each finger reads a different quality of the body, not just “fast/slow”, but also:
- strength
- fullness
- rhythm
- order / balance
- Frequencies
- Hormones
Here I translated that into light behaviour instead of just numbers:
Each dosha is visualised by one NeoPixel LED:
| Dosha | Colour (base) | Light Behaviour | Emotional / bodily reading |
|---|---|---|---|
| Vata | Violet / sky (cool) | Soft breathing flicker | Air, movement, sensitivity |
| Pitta | Orange / fire | Strong, punchy heat pulses | Fire, intensity, drive, stress |
| Kapha | Teal / green (earth) | Slow, smooth gliding fade | Earth, stability, heaviness |
Right now the board is just pretending to “read” the body (the patterns are time-based).
In a future version, these animations could be driven by real sensor data: heart rate,
HRV, skin temperature, GSR, etc. Same patterns, but actually linked to how you are.
Hardware Setup (Surface mount LEDs + Seeed ESP32)¶
- Board: Seeed Studio ESP32 (using pin
D7for data) - LEDs: Surface Mount LEDs soldered onto the wire
- Power: 5V and GND shared between board and LED strip
- Connections:
D7→ DIN of first NeoPixel- 5V → LED strip 5V
- GND → LED strip GND (common ground is important)
Order of LEDs on the strip:
- LED 0 - Vata
- LED 1 - Pitta
- LED 2 - Kapha
Arduino Code - Vata / Pitta / Kapha Animations¶
#include <Adafruit_NeoPixel.h>
#define DATA_PIN D7
#define NUM_LEDS 3
// If colours look wrong, you can swap to NEO_RGB or NEO_RBG instead of NEO_GRB
Adafruit_NeoPixel strip(NUM_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800);
// Base colours for the three doshas
// Vata: violet / sky
const uint8_t VATA_R = 80;
const uint8_t VATA_G = 0;
const uint8_t VATA_B = 150;
// Pitta: orange / fire
const uint8_t PITTA_R = 255;
const uint8_t PITTA_G = 100;
const uint8_t PITTA_B = 0;
// Kapha: teal / earth-water
const uint8_t KAPHA_R = 0;
const uint8_t KAPHA_G = 150;
const uint8_t KAPHA_B = 80;
// Phase variables for animations
uint8_t vataPhase = 0;
uint8_t pittaPhase = 0;
uint8_t kaphaPhase = 0;
void setup() {
strip.begin();
strip.setBrightness(80); // global cap, per-LED brightness handled in code
strip.show();
}
void loop() {
// Update phase (time counters)
vataPhase += 9; // fairly quick, soft
pittaPhase += 20; // fast, fiery
kaphaPhase += 2; // slow glide
// -----------------------------
// VATA: breathing soft flicker
// LED index: 0
// -----------------------------
uint8_t vataBase = triangleWave(vataPhase); // 0–255 triangle wave
uint8_t vataJitter = (vataPhase % 5 == 0) ? 30 : 0; // tiny flicker
uint8_t vataLevel = constrain((vataBase / 2) + vataJitter, 0, 255);
setScaledColor(0, VATA_R, VATA_G, VATA_B, vataLevel);
// -----------------------------
// PITTA: heat-wave pulses
// LED index: 1
// -----------------------------
uint8_t pittaLevel;
if (pittaPhase < 50) {
pittaLevel = pittaPhase * 5; // ramp up fast
}
else if (pittaPhase < 100) {
pittaLevel = 255; // full blaze
}
else if (pittaPhase < 150) {
pittaLevel = (150 - pittaPhase) * 5; // ramp down
}
else {
pittaLevel = 0; // rest
}
// cap for safety
if (pittaLevel > 220) pittaLevel = 220;
setScaledColor(1, PITTA_R, PITTA_G, PITTA_B, pittaLevel);
// -----------------------------
// KAPHA: gliding smooth fade
// LED index: 2
// -----------------------------
uint8_t kaphaLevel = triangleWave(kaphaPhase);
kaphaLevel = kaphaLevel / 3; // keep it soft and gentle
setScaledColor(2, KAPHA_R, KAPHA_G, KAPHA_B, kaphaLevel);
// Push frame to LEDs
strip.show();
// Frame rate ~25 FPS
delay(40);
}
// ----------------------------------
// Helper: 0–255 triangle wave
// ----------------------------------
uint8_t triangleWave(uint8_t phase) {
if (phase < 128) {
return phase * 2; // ramp up
} else {
return (255 - phase) * 2; // ramp down
}
}
// ----------------------------------
// Helper: scale base colour by 0–255
// ----------------------------------
void setScaledColor(uint16_t index,
uint8_t baseR, uint8_t baseG, uint8_t baseB,
uint8_t level) {
uint16_t r = (uint16_t)baseR * level / 255;
uint16_t g = (uint16_t)baseG * level / 255;
uint16_t b = (uint16_t)baseB * level / 255;
strip.setPixelColor(index, strip.Color(r, g, b));
}
The results¶
The final tattoo¶
Wink-Activated Eye Mask¶
Concept¶
A wearable eye mask where each blink acts as a switch.
When the eyelid closes, the lashes make contact between A0 and D4.
The ESP32 reads this input and turns the LED ON while the eye is closed.
Hardware Setup¶
- D4 → input pin reading the blink
- A0 → connected to conductive eyelash pad
- GND → ground reference
- LED_PIN 13 → LED on the mask
- Wire soldered to the tiny NeoPixels
- Fake eyelashes act as the physical contact switch:
when the eye closes, top and bottom lashes touch the conductive pads → circuit closes.
Behaviour¶
- Eye open: no contact → D4 reads LOW → LED OFF
- Eye blink/close: lashes touch → D4 reads HIGH → LED ON
- The device responds in real time, acting like a soft, body-driven momentary switch.
Code Used¶
#define TOUCH_PIN 4 // D4
#define LED_PIN 13 // or LED_BUILTIN
void setup() {
pinMode(TOUCH_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
int value = digitalRead(TOUCH_PIN);
if (value == HIGH) { // lashes connect A0 → D4
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
delay(10);
}
The Final outcome¶
Conclusion¶
- Test your LEDs before soldering.
- Soldering is tough with surface mount LEDs, but have patience.
- The mask itself was quite difficult to put on.




