The Heartbeat Score
The Heartbeat Score is a wearable project that senses physiological change and translates it into haptic rhythm and visual feedback. Instead of displaying biometric data as numbers, this piece uses GSR (Galvanic Skin Response) to trigger tactile pulses and a heartbeat-like visual response.
The project focuses on one question:
How can internal body signals become a wearable sensory language instead of a medical readout?
In this system, a glove-based sensor collects skin conductance data from the hand, the signal is processed through an Arduino UNO R4 WiFi, and the output is translated into:
- vibration near the neck
- heartbeat-like LED matrix animation
This project combines wearable prototyping, sensor mapping, material testing, haptic feedback, and embodied interaction design.
Supplies
Electronics
- Arduino UNO R4 WiFi
- External biometric sensing module
- GSR sensing contacts
- DRV2605L haptic driver
- Vibration motor
- Breadboard
- Jumper wires
- Long male-to-female jumper wires
- USB cable
- Rechargeable 300mA lithium battery
- Bluetooth-enabled data transmission setup
- Built-in LED matrix on UNO R4 WiFi
Wearable Materials
- Modified glove prototype
- Velcro strips
- Soft inner fabric / fleece-like material
- Structural outer material
- Tape / support material
- Marker or paint for contact-point transfer
Tools
- Soldering iron
- Solder
- Scissors
- Needle / thread or basic fabric tools
- Wire cutters / strippers
- Computer with Arduino IDE (MacOS in this case)
Define the Main Concept
Before building, I established the central idea of the project:
- sense an internal body signal
- translate it into touch and pulse
- avoid making the project feel like a medical device
I chose GSR as the main control signal because it reflects changes in skin conductance and can indicate physiological activation. I was not interested in labeling emotion directly. Instead, I wanted to capture intensity and bodily change and turn that into a wearable rhythm.
At this stage, the project became less about measurement and more about translation.
Choose the Input Signal
The sensing module I used outputs several types of data:
- GSR
- acceleration
- gyroscope
- heart rate
- SpO2
Even though the module provides multiple data streams, I decided to use GSR as the main interaction variable.
Why GSR?
- it changes with skin conductance
- it can reflect shifts in bodily activation
- it is useful for expressive translation
- it does not reduce the body to a single number like a medical display
The other signals remained available as secondary information, but GSR became the main driver of the piece.
Rethink the Body Placement
At first, I wanted the wearable to sit near the neck, because that location felt intimate and conceptually close to breath and pulse.
After testing, I found several problems:
- unstable sensor contact
- discomfort
- difficult hardware mounting
- reduced mobility
Because of this, I separated the system into two parts:
- left hand for sensing
- neck area for tactile output
This let me preserve the conceptual importance of the neck while making the sensing system much more reliable.
Build the Sensing Side on the Hand
Once I decided to sense from the hand, I began developing a glove-based structure.
The glove was not only a garment. It became a sensing support system.
I used the glove to:
- hold the sensing module
- maintain contact with the skin
- organize the electronics
- make the system wearable and repeatable
This was a major shift in the project, because the wearable form started to affect the sensing quality directly.
Locate the GSR Contact Area
To find the best sensor placement, I used a transfer method:
- Mark the intended contact points on the hand using marker ink or paint.
- Wear the glove.
- Let the marked areas transfer onto the inside of the glove.
- Use those transferred marks as the guide for sensor placement.
This method helped me avoid guessing visually.
Instead of designing the glove first and then forcing the sensor into it, I let the body determine the placement.
That made the positioning much more accurate.
Experiment With Glove Materials
I dismantled a glove that had two layers:
- an outer rubber layer
- an inner fleece-like fabric layer
I kept the logic of that structure, but not all of the original materials.
Why I kept the inner layer
The inner layer was:
- softer
- more comfortable against skin
- better for close contact
- more suitable for GSR sensing
Why I rejected the original outer rubber
The rubber layer:
- reduced breathability
- felt uncomfortable for longer wear
- made the glove too restrictive
This led me to develop a double-layer logic, but with different materials.
Develop the Double-Layer Structure
The double-layer design came from two different needs.
1. Environmental control
I was thinking about winter use, and I did not want outside temperature to affect the hand too directly and interfere with the body signal.
2. Sensor contact
The inner layer needed to support:
- close contact
- stable pressure
- repeatable GSR sensing
So the glove became a layered system:
- inner layer for sensing and contact
- outer layer for structure and support
This was useful, but later I also realized that it made the design more dependent on certain wearing conditions.
Add Structure to the Soft Glove
Soft fabric alone was not enough to stabilize the electronics and sensing zone.
So I began adding more structure:
- support layers
- cut sensing windows
- mounting areas for the module
- more intentional openings and attachment points
This helped the glove become less like a fabric experiment and more like a real prototype.
At this stage, I began to understand that:
structure is part of sensing in a wearable project.
Improve Fit With Velcro
One of the most useful improvements was adding Velcro to the glove.
This solved several problems at once:
- it made the glove easier to fasten
- it improved sensor stability
- it made the fit adjustable for different hand sizes
- it gave the module more secure attachment
The overlap of the Velcro can be changed depending on the size of the wearer’s hand, which made the prototype more flexible.
I also left an opening so that the sensing module could be charged without taking the glove fully apart.
This made the glove much more practical for repeated use.
Set Up the Arduino and Haptic System
The main controller for the system is the Arduino UNO R4 WiFi.
The output side of the project includes:
- a DRV2605L haptic driver
- a vibration motor
- the UNO R4 WiFi built-in LED matrix
The Arduino receives data, processes it, and then sends output to:
- the haptic system
- the LED matrix
This gave the project two communication channels:
- touch
- light
That was important because the piece is meant to speak both to the wearer and to outside viewers.
Solder the Haptic and Motor Connections
To make the haptic system easier to connect and reuse, I soldered header pins onto:
- the vibration motor
- the haptic driver
This made them much easier to insert and connect in the circuit.
It also allowed me to use long male-to-female jumper wires, which became very important later when I separated the motor from the larger electronics.
Without this step, the system would have been much harder to rearrange and prototype.
Separate the Motor From the Main Electronics
A major practical improvement came from not forcing the entire technical system onto the body.
Instead of mounting the Arduino, haptic driver, breadboard, and Bluetooth system all near the neck, I kept the larger parts on the table or external support surface and only sent the small motor to the neck area.
This worked because:
- the glove on the left hand collects the signal
- data is transmitted to the Arduino
- the Arduino processes the signal
- the motor is connected remotely through long wires
This preserved my original design intention of neck-based tactile feedback, but made it much more wearable and manageable.
It improved:
- mobility
- comfort
- technical stability
- ease of setup
Write the Code to Read Sensor Data
The sensing module sends a 19-byte data packet containing:
- frame header
- GSR
- acceleration
- gyroscope
- heart rate
- SpO2
- checksum
- frame footer
The Arduino code reads the incoming packet and parses the values.
The main variables extracted are:
- gsrValue
- accX, accY, accZ
- gyroX, gyroY, gyroZ
- heartRate
- spo2
This stage turns raw incoming bytes into values the Arduino can use for interaction.
Map GSR to Interaction States
After parsing the data, I created a simple state system based on GSR:
- GSR < 300
- weak or absent contact
- no haptic output
- GSR 300–450
- normal state
- slower vibration pulses
- GSR > 450
- more activated state
- faster vibration pulses
This state logic made the interaction readable and easy to explain.
It also made the piece feel more intentional, because the output was no longer just “reacting,” but moving through clear sensory states.
Use Rhythm Instead of Just Intensity
One of the most important design decisions was to make the piece communicate through timing.
Instead of only changing vibration strength, I changed the interval between pulses.
That meant:
- lower GSR = slower rhythm
- higher GSR = faster rhythm
This made the output feel more like bodily pacing and less like an alert.
This decision was conceptually important because it made the wearable communicate through pulse and rhythm instead of through literal measurement.
Add the LED Matrix Visual Pulse
To make the piece visible to outside viewers, I also used the built-in LED matrix on the Arduino UNO R4 WiFi.
The matrix displays a simple heartbeat-like animation.
This visual output serves a different role than the motor:
- the motor is intimate and felt by the wearer
- the LED matrix is visible and readable by others
Together, they let the project communicate at two scales:
- personal
- public
Adjust the Output After Playtesting
During playtesting, I received useful feedback that the output felt too fast and that this made small hardware contact issues more noticeable.
That feedback was important because it made me realize that:
- a technically functional system can still feel unstable
- pacing affects perception
- interaction quality depends on timing as much as sensing
In response, I slowed the pacing of the output.
This was a small code change, but it had a big effect on the feel of the piece.
Document and Refine the Prototype
As the project approached presentation, I focused on:
- improving stability
- improving fit
- improving explainability
- making the wearable easier to recharge and reuse
- clarifying the relationship between sensing and output
By this point, the work shifted from invention to consolidation.
I was no longer changing the concept.
I was trying to align:
- sensing logic
- haptic behavior
- glove structure
- presentation clarity
Final Prototype Summary
The final prototype works like this:
- The glove is worn on the left hand.
- The sensing module reads GSR and other biometric data.
- Data is sent to the Arduino UNO R4 WiFi.
- The Arduino parses the data and evaluates the GSR state.
- The system triggers:
- haptic vibration
- heartbeat-like LED matrix animation
- The motor is placed near the neck, while the larger electronics remain off-body for better stability.
This makes the piece feel like a distributed wearable system rather than a single heavy object forced onto the body.
What I Learned
This project taught me that wearable interaction is not only about electronics or code.
It is also about:
- pressure
- contact
- comfort
- pacing
- attachment
- maintenance
- material behavior
The biggest lesson was that the wearable form is part of the sensing logic.
A sensor does not work independently from how it is worn.
Future Improvements
If I continue this project, I would improve three things:
1. More resolved wearable structure
I would make the glove and hardware integration more refined and less prototype-like.
2. More universal environmental use
The current double-layer logic is useful, but it makes the piece more specific to certain conditions. I would like a version that can function independently, with optional extra layering when needed.
3. Richer output language
Right now, the piece mainly changes pacing. In the future, I would like to create more varied haptic and visual expressions.
Final Reflection
The Heartbeat Score is a project about turning internal body change into a sensory language.
Rather than treating biometric data as something to measure and display, I wanted to transform it into rhythm, pulse, and bodily presence. The project is still a prototype, but it helped me clarify a design direction I care about deeply: wearable systems that do not just sit on the body, but negotiate with it.