Table of Contents
Process¶
Ideation & sketches¶
I started by making a body map for myself, tracing traces, emotions and memories that find their places onto my body.
Mapping on my body serves as a tool to identifiel emotional residues a build a self-archive.
Installation Overview¶
The project takes the form of an art installation.
At the centre, there’s the bodysuit embedded with a touch sensor. Around it, I intend to expand the narrative space of the installation through the creation of tokens: small objects that will represent an emotional memory.
Mapping¶
I decided to focus on 2 areas to design a wearable that translates emotional memories into material and form. Emotional memory can be defined as the ability to recall past events to which strong emotional response is tied to.
- Area: hands and feet
- Emotional memory: grief, loss in childhood, family
Between the age 3 and 5, children start to be interested by and aware of death, even though they cannot yet comprehend its persistance. When grevieng, they might end up asking a lot of and repetitive questions to try to understand what has happened and where there person has gone. They can also experience anxiety, speech regression and feelings of hopelessness and helplessness towards the grieving adults aorund them.
- Area: hair
- Emotional memory: femininity, distance, heritage
Hair is a carrier of ancestry and memory. I look at the hair of my mother, of my grandmother and I see mine. It's a symbol of power, sensitivity and it acts as a bridge between me and my ancestry. As I move further away from home, I feel like my hair is something that keeps me connected.
How can a wearbale be an embodied archive?
Biomaterials¶
I chose biomaterials because they share key characteristics with memory and emotion: they are fragile, layered, reactive, composite, and they change over time.
Conductive Biomaterils¶
Here you can find some of the testing I did. I started experimenting with agar agar but the results where not quite what I wanted
Agar
| Ingedirents | Materiom | |
|---|---|---|
| Agar | 8 gr | 2 gr |
| Glycerine | 24 gr | 1 ml |
| Water | 400 gr | 210 ml |
| Salt | 5 gr |
Alginate
| Ingredients | ||||
|---|---|---|---|---|
| basic | Charcoal | Graphite | Magnetite | |
| Alginate | 12 gr (liquid) | “ | " | " |
| Glycerine | 20 gr | “ | " | " |
| Water | 400 ml | “ | " | " |
| Salt | 5 gr | “ | " | " |
| Oil | 10 gr | “ | " | " |
| Charcoal | 10-15 gr* | |||
| Graphite | 12 gr* | |||
| Magnetite | 12-15 gr** |
Notes *After preparing the alginate solution I divided it in 3 parts and added chrcoal, Graphite and magnetite: 120 gr + 10 gr of graphite, 120 + 7/8 gr of activated charcoal, 130 gr + 7/8 gr graphite ** I prepared a recipe adapted to 200 ml of water of solution and added 12gr of magnetite in one half and 15 gr in the pther half
Arduino IDE¶
I used a simple circuit of a ESP32S3, a red LED and a resistor to test the conductive biomaterials. It works!
define TOUCH_PIN 4
#define LED_PIN_NUMBER 5
const int VALUE_THRESHOLD = 45000;
void setup() {
Serial.begin(115200);
while (!Serial);
pinMode(LED_PIN_NUMBER, OUTPUT);
Serial.println("Touch");
}
void loop() {
int touchValue = touchRead(TOUCH_PIN);
Serial.println(touchValue);
if (touchValue < VALUE_THRESHOLD) {
digitalWrite(LED_PIN_NUMBER, HIGH);
} else {
digitalWrite(LED_PIN_NUMBER, LOW);
}
delay(100);
}
Alginate and Fruit Peel
Then I moved to experimenting with alginate. As the biomaterials needs a substrate in order to be stitched into a body suit. I tried adding crochet pieces, fabric and cotton fiber.
I also tried creating a mould with clay to reproduce a crochet pattern
I found this recipe Fab Lab Barcelona Making Bioplastic from Orange Peel - REMIX EL BARRIO. I adapted it to use apple peels, which are widely grown in the Netherlands. I added extra glycerin, citric acid, essential oils, and sodium alginate for several reasons:
Apple peel is less fibrous and less acidic than orange peel, so these adjustments are intended to improve the material’s durability and flexibility.
| Ingredients | Oranges | Apple |
|---|---|---|
| 20g wool fiber | — | — |
| 5L water | 5L | 5L |
| peel | 120 g | 150-169 g |
| Calcium Chloride | ||
| sodium alginate | 125 g | 140–150 g |
| glycerin | 421 g | 450 g glycerin |
| (coconut) oil | 56 g | 70 g |
| citric acid | 5–8 cirtric acid | |
| essential oil | 3–6 (lavander) |
Substrate¶
After a conversation with Cecilia, we decided to use a streatchy fabric in both directions as a substrate for the biomaterial. Without it, it would be really hard to see. I got some that resembles my skin colour.
Moulds¶
So I have built a four frames based on the size of some pannels that Waag had remaining from old events. I simply cut and screwed together for pieces of wood to create a frame. Three frames of 95x65 cm and one of 115x80 cm I sprayed a sodium chloride solution on the botton side and then pinned the fabric to the side of the panel in order to give some tension. With the help of someone else, I made sure that the fabric did not touch the botton while placing it so it would not get in contact with the sodium chloride solution.
Mid-process Results¶
Below you can see two sheets ready. There are some cuts which might be caused by the fabric touching the sodium chloride solution at the bottom. For the rest it looks like the biomaterial is gripping to the substrate. It is not so elastic though, especially some parts were the biomaterial is a bit thicker.
This is how the piece with crochet and alginate looks like at the moment. The centre part is dry, only the edges need a bit more time
Tokens¶
The tokens represent embodied emotional memories drawn from my personal experience. I focus on two areas of the body: hair, and hands and feet.
Hair relates to ancestry, belonging, and family. When I look at my hair, I see my mother’s and my grandmother’s hair. For this token, I will use a small loom holding a woven piece made with my own hair, collected over the past 2 months. This connects to my mother’s wedding kit, which she recently shared with me. The wedding kit speaks about inheritance and participation, and this token reflects on belonging,, continuity and family
The second token focuses on hands and feet, and on the absence left by my father’s passing. I do not remember him, but my body holds this memory, as my mother says: my hands and feet look like his. This token is approached playfully: soft materials and bright colours make the empty space left by my father's hand tangible.
Hair Loom¶
With the help of Aslı I designed a loom inspired by Dan Chen's Mini Loom and another loom we had at waag.
Interactions¶
The main input is touch, as it happens on and through the body. Touch sensors embedded in the bodysuit trigger short texts displayed on a small, portable screen, encouraging reflection on bodily awareness
Touching the tokens triggers local audio responses (and may also activate light feedback on corresponding areas of the bodysuit)
Here you can find my circuits' layout.
* ESP32S3
- Waveshare 2.9 inch E-Ink E-Paper Display - 3 Kleuren
- DFPlayer Mini MP3 Player Modul
- Speaker 8ohm (less than 3W!)
- JST-XH 8p connector
- ESP32S3
- Conductive Biomaterials
- Arduino IDE
Display¶
I'm using a ESP32S3 and a Waveshare 2.9 inch E-Ink E-Paper Display - 3 Colours
The E-ink display offers a paper-like display with a very minimum power consumption (current is required mainly for refreshing). It's dimentions are 66.90 × 29.06mm and its viewing angle is 170°. It uses an SPI, which stands for Serial Peripheral Interface. It is a protocol that is synchronous serial communication. It is used to communicate between the peripheral devices i.e. input and output devices and microcontrollers. It is allowed to transfer high-speed data.
Test sketch (AI generated)
#include <GxEPD2_3C.h>
#include <Fonts/FreeMonoBold9pt7b.h>
// GPIO numbers
#define CS 43
#define DC 6
#define RST 5
#define BUSY 44
// Correct driver for 2.9" 3-color
GxEPD2_3C<GxEPD2_290_C90c, GxEPD2_290_C90c::HEIGHT> display(
GxEPD2_290_C90c(CS, DC, RST, BUSY)
);
void setup()
{
Serial.begin(115200);
Serial.println("Starting ePaper...");
display.init(115200);
display.setRotation(1);
display.setFont(&FreeMonoBold9pt7b);
display.setFullWindow();
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setCursor(10, 40);
display.setTextColor(GxEPD_RED);
display.println("Test");
display.setCursor(10, 80);
display.setTextColor(GxEPD_RED);
display.println("Please work");
} while (display.nextPage());
Serial.println("Done");
}
void loop() {}
Case¶
Test¶
With the help of Aslı, we looked into the case and how to design it with Rhino. First, I designed a test for the top part of the case where the display would rest. I designed a 1.5 mm face, extruded a rectangukar of the shape of the screen and added 3mm holes where the screws would go. This design allow for the mounting part of my 2.9 e-ink display to be hidden, and the display will rest sliglty inwards. Here is the test. I prented it with the CoreOne 3D printer and used PLA for rigidity
Audio Output¶
* DFPlayer Mini MP3 Player Modul
* Speaker 8ohm, 2-3W
* Micro SD
- Cables
- Arduino IDE
ESPNOW Protocol¶
I've already worked with ESPNOW connecitons for the Open Source Hardware week. Here you can see my documentation.
Display¶
* Waveshare 2.9 inch E-Ink E-Paper Display - 3 Kleuren
* JST-XH 8p connector
* ESP32S3
- Conductive Biomaterials
- Arduino IDE
I used this code to obtain the MAC address of the receiver
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/get-change-esp32-esp8266-mac-address-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <WiFi.h>
#include <esp_wifi.h>
void readMacAddress(){
uint8_t baseMac[6];
esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, baseMac);
if (ret == ESP_OK) {
Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
baseMac[0], baseMac[1], baseMac[2],
baseMac[3], baseMac[4], baseMac[5]);
} else {
Serial.println("Failed to read MAC address");
}
}
void setup(){
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.STA.begin();
Serial.print("[DEFAULT] ESP32 Board MAC Address: ");
readMacAddress();
}
void loop(){
}
10:31:58.596 -> [DEFAULT] ESP32 Board MAC Address: e8:f6:0a:8d:16:f8
this is how the receiver code looks like
#include <GxEPD2_3C.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <esp_now.h>
#include <WiFi.h>
// ----- DISPLAY PINS -----
#define CS 43
#define DC 6
#define RST 5
#define BUSY 44
// ----- DISPLAY DRIVER -----
GxEPD2_3C<GxEPD2_290_C90c, GxEPD2_290_C90c::HEIGHT> display(
GxEPD2_290_C90c(CS, DC, RST, BUSY)
);
// ----- VARIABLES -----
String receivedText = "Waiting...";
bool updateDisplay = false;
// ----- ESP-NOW RECEIVE CALLBACK -----
void onDataReceive(const esp_now_recv_info_t *info,
const uint8_t *incomingData,
int len) {
char message[100];
memcpy(message, incomingData, len);
message[len] = '\0';
Serial.print("Received: ");
Serial.println(message);
receivedText = String(message);
updateDisplay = true;
}
// ----- UPDATE SCREEN FUNCTION -----
void updateScreen() {
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_RED);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(20, 60);
display.println(receivedText);
} while (display.nextPage());
updateDisplay = false;
}
// ==============================
void setup()
// ==============================
{
Serial.begin(115200);
// ---- Init WiFi for ESP-NOW ----
WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK) {
Serial.println("ESP-NOW Init Failed");
return;
}
esp_now_register_recv_cb(onDataReceive);
// ---- Init Display ----
display.init();
display.setRotation(1);
display.setFullWindow();
updateScreen();
Serial.println("Receiver Ready");
}
// ==============================
void loop()
// ==============================
{
if (updateDisplay) {
updateScreen();
}
}
This is how the sender code looks like. You need to define the touch pins not with their digital numbers but with the touch pin number. In the schematic below you can see that the two numbers differs
#include <esp_now.h>
#include <WiFi.h>
#define TOUCH1 4
#define TOUCH2 5
uint8_t receiverMAC[] = {0xE8, 0xF6, 0x0A, 0x8D, 0x16, 0xF8}; // your display MAC
void setup() {
Serial.begin(115200);
pinMode(TOUCH1, INPUT);
pinMode(TOUCH2, INPUT);
WiFi.mode(WIFI_STA);
esp_now_init();
esp_now_peer_info_t peerInfo = {};
memcpy(peerInfo.peer_addr, receiverMAC, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
esp_now_add_peer(&peerInfo);
Serial.println("Sender Ready");
}
void loop() {
// ✅ THIS IS WHERE IT GOES
int t1 = touchRead(TOUCH1);
int t2 = touchRead(TOUCH2);
Serial.print("T1: ");
Serial.print(t1);
Serial.print(" | T2: ");
Serial.println(t2);
if (t1 > 60000) {
esp_now_send(receiverMAC, (uint8_t*)"TOUCH1", 6);
delay(400);
}
if (t2 > 60000) {
esp_now_send(receiverMAC, (uint8_t*)"TOUCH2", 6);
delay(400);
}
}
Prototypes¶
prototypes are your first step towards shaping your final piece, product, material et cetera
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Mid-Term Presentaiton¶
Here you can find my mid term presentation!
Mentoring notes¶
Mentors in all sessions may share with you their comments, notes, advise, projects and technical equipment to check out. This is good place to share those, so that you can find them later on when you need them the most!
Half-fabrication files¶
-
Test file: 3d modelling test ↩














