Skip to content

12. Skin Electronics

Skin

The skin is an organ composed of several layers of tissue. It is the organism's first line of defense.

It is the largest and heaviest organ of the human body; in adults, its surface area is about 2 m2, and the thickness varies from 1 to 3 mm.

The skin and me

Skin has always been a sensitive subject for me. I have hyper-reactive atopic skin. I don’t wear makeup, I use washing oil to wash myself, I flee from the sun, the shawl, I hate things that itch, that sting, nickel... the idea of sticking something on my skin is not for me!

That’s why I’m moving towards a project for the transmission of sounds through bone conduction.

Knitting piano

Focus

I use a

Listen to music in silence!

Embroidery

Focus

  • Microcontroller: Adafruit FLORA
  • Conductive fabric/thread
  • 9 touch points (3x3 grid)
  • Pull-down resistors for each touch point: 1MΩ resistors
  • Bone conduction transducer: Piezo buzzer
  • Connect the grid to FLORA: Wires/connections

Microcontroler

I tried to use a ADAFRUIT FLORA ATmega32U4 (8 MZ - Battery: 3-9DC) besauce it's a perfect match with the weight and also the Lip battery whitch is very light and wearable. But unfortunately, I couldn't be sure there is a pull-out on pins and there is only 6 pins available.

Finally, I choose another one I already know : SEEED XIAO 2040. The probleme is we need a 5V battery we don't have.

Bone Conductor Transducer - 8Ω 1W

A small 1W Bone Conductor. With this type of speaker, a surface can be turned into a speaker. It is also possible to place the speaker on the skin and hear the sound through the body. At first we thought it was possible to put in a bone: on the elbow, or the malolus. After few tries, it doesn't work, the best place is on the cheekbone.

Our Bone conductor

Specifications:

Power: 1W RMS (2W max) Impedance: 8Ω Dimensions: 21.5 x 14.5mm See the following page for a tutorial with a similar speaker: [Bone Conduction Speaker] (https://www.instructables.com/Adafruit-Bone-Conduction-Speaker/)

Note: This products comes without wires.

https://www.tinytronics.nl/en/audio/speakers/speakers/bone-conductor-transducer-8%CF%89-1w

Potentiometre

A potentiometer is a type of variable resistor with three terminals, one of which is connected to a cursor moving on a resistive track terminated by the other two terminals. This system makes it possible to collect, between the terminal connected to the cursor and one of the other two terminals, a voltage that depends on the position of the cursor and the voltage to which the resistance is subjected.

Code

,,, // Row pins (INPUT_PULLUP) const int row0 = A0; // First row const int row1 = A1; // Second row const int row2 = A2; // Third row

// Column pins (OUTPUT) const int col0 = D7; // First column const int col1 = D8; // Second column const int col2 = D9; // Third column

// Piezo buzzer pin const int buzzerPin = D5; // Using D9 for the buzzer to avoid conflicts

// Frequencies for each grid point (C major scale) const int frequencies[3][3] = { {262, 330, 392}, // Row 0: C4, E4, G4 {440, 494, 523}, // Row 1: A4, B4, C5 {587, 659, 698} // Row 2: D5, E5, F5 };

// Variables to store readings int incomingValue[9] = {0};

// Detection threshold (adjust based on your readings) const int threshold = 500;

void setup() { // Set rows as inputs with pull-up resistors pinMode(row0, INPUT_PULLUP); pinMode(row1, INPUT_PULLUP); pinMode(row2, INPUT_PULLUP);

// Set columns as outputs pinMode(col0, OUTPUT); pinMode(col1, OUTPUT); pinMode(col2, OUTPUT);

// Initialize serial communication Serial.begin(9600);

// Set up the buzzer pinMode(buzzerPin, OUTPUT); noTone(buzzerPin); // Ensure the buzzer is off at startup }

void loop() { // Read each column one by one for (int col = 0; col < 3; col++) { // Set the current column to LOW (GND) digitalWrite(col0, col == 0 ? LOW : HIGH); digitalWrite(col1, col == 1 ? LOW : HIGH); digitalWrite(col2, col == 2 ? LOW : HIGH);

// Read the row values
incomingValue[col * 3 + 0] = analogRead(row0);
incomingValue[col * 3 + 1] = analogRead(row1);
incomingValue[col * 3 + 2] = analogRead(row2);

delay(1);  // Small delay to stabilize readings

}

// Check each grid point for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { int index = i * 3 + j; if (incomingValue[index] < threshold) { tone(buzzerPin, frequencies[i][j]); } } }

// Turn off the buzzer if no point is touched bool anyTouched = false; for (int i = 0; i < 9; i++) { if (incomingValue[i] < threshold) { anyTouched = true; break; } } if (!anyTouched) { noTone(buzzerPin); }

// Print values for debugging (optional) for (int i = 0; i < 9; i++) { Serial.print(incomingValue[i]); Serial.print("\t"); } Serial.println();

delay(10); // Debounce delay }

,,,

Results

It works perfectly, the only thing is that for you spectators, you won’t hear anything! Only the hand bearer can listen to the sounds created in the back of his hand...

Focus Focus

Skin adaptations

Focus

It's possible to 3D-print a flex clamp between the grid and the microcontroller.

For a good sound effect, the bone conductor will be sewn at the top of the finger.

Look at Claire's documentation for printing a net in FLEX

The 3D printed net can be used as a support for embroidering sheathed conductive thread and classic embroidery threads.

PCB: JLCPCB (Chine), AIAsler (FR) Design PCB: EasyEDA, KiCad


Images and drawings: Annabel Fournier unless otherwise stated