Introduction: How to Make a Simple Wearable Pulse Notifier

Pulseme is a wearable device that helps people know when their heartbeat is above a set point, by giving them physical feedback in the form of a shrinking and unshrinking wearable.

Step 1: Description

The main part of this wearable is a woolly fabric, that is in constant
touch with the user’s arm, and when shrank, creates a soft feeling. Apart from this, there is an Arduino-controlled mechanism that is in charge of the movement of the fabric, as well as a pulse sensor.

Step 2: Materials

More specifically, the parts that are needed in order to create this physical notification pulse sensor are the following:

  • Arduino Uno
  • Pulse Sensor
  • 2 x Continuous rotation Servos (DS04-NFC)
  • 2 x Springs
  • Bracelet
  • Fabric
  • Threads
  • Battery

Step 3: Schematic

There are two simple circuits involved to create the electronic part of this wearable.


Sensor circuit:

  • Sensor pin 1 to Arduino A0
  • Sensor pin 2 to the +5V
  • Sensor pin 3 to the GND

Servo circuit:

  • Servo1 pin to Arduino pin 8
  • Servo2 pin to Arduino pin 9

Finally, connect the +5V and GND to their respective terminals on the Arduino board.

Step 4: Getting Things Together

The steps that need to be taken in order to assemble this wearable are the following:

  1. Measure the diameter of an average person's arm, in order to stitch the fabric depending on that shape/size.
  2. Buy or 3D print an appropriate bracelet to work as a base for all the electronics/motors.
  3. Stitch the springs onto the fabric, on opposite sides.
  4. Glue the two servos on the bracelet.
  5. Connect the springs and the servos, using a thread.
  6. Adjust the code in order to fit your preferences and/or the size of your fabric.
  7. Enjoy!

Step 5: Set Up the Arduino & Code

Connecting the Arduino to the computer and getting it functional
first. This is straightforward to do. Then, programming the arduino to read the pulse and drive the servos when the pulse rate is beyond the normal range. Basically, we also need to modified the frequency with which it reads input value to get the following code: delay(9000) is considered to be the best practice in a simple sketch. The code is the following:

Servo myservo1; Servo myservo2; int pos; // Variables const int PulseWire = 0; // PulseSensor PURPLE WIRE connected to ANALOG PIN 0 const int LED13 = 13; // The on-board Arduino LED, close to PIN 13. //int Threshold = 550; // Determine which Signal to "count as a beat" and which to ignore. // Use the "Gettting Started Project" to fine-tune Threshold Value beyond default setting. // Otherwise leave the default "550" value. PulseSensorPlayground pulseSensor; // Creates an instance of the PulseSensorPlayground object called "pulseSensor" void setup() { Serial.begin(9600); // For Serial Monitor

// Configure the PulseSensor object, by assigning our variables to it. pulseSensor.analogInput(PulseWire); pulseSensor.blinkOnPulse(LED13); //auto-magically blink Arduino's LED with heartbeat. // pulseSensor.setThreshold(Threshold); // Double-check the "pulseSensor" object was created and "began" seeing a signal. if (pulseSensor.begin()) { Serial.println("We created a pulseSensor Object !"); //This prints one time at Arduino power-up, or on Arduino reset. } } void loop() { int myBPM = pulseSensor.getBeatsPerMinute(); // Calls function on our pulseSensor object that returns BPM as an "int". // "myBPM" hold this BPM value now. //myservo1.attach(9); //if (pulseSensor.sawStartOfBeat()) { // Constantly test to see if "a beat happened". Serial.println("♥ A HeartBeat Happened ! "); // If test is "true", print a message "a heartbeat happened". Serial.print("BPM: "); // Print phrase "BPM: " Serial.println(myBPM); // Print the value inside of myBPM. if (myBPM >= 65) { // Constantly test to see if "a beat happened".

myservo1.attach(9); myservo2.attach(8); myservo1.writeMicroseconds(2000); // CW myservo2.writeMicroseconds(2000); delay(4000); myservo1.writeMicroseconds(1000); // CCW myservo2.writeMicroseconds(1000); delay(4000); myservo1.writeMicroseconds(1500); // stop myservo2.writeMicroseconds(1500); delay(500); } //} delay(9000); // considered best practice in a simple sketch. } Run the Code Now, you just verify the sketch, plug the USB, and upload. You will see.