Expressive Haptic Throw Blanket

Haptics Workshop

Experiment 1: Hello Vibe Motors

First, I tested LRA vibrating motor with Arduino sample “Blink” code. I felt the motor vibrating on my fingertips and the back of my hand. I also tried it on my arm and on the table under my arm to feel the different skin sensing.  I tried it also on my neck and face. I noticed that there are significant differences in the felt frequency when the motor is mounted on glabrous versus hairy skin. I tried with altering the pace of vibration with long and short delays, and I noticed that the vibration pattern was more recognizable with the slower pace. With short delays, it felt as if the vibration is continuous. Then, I tried testing the LRA vibrating motor with the “Fade” example code. I explored creating a different vibration pattern by modifying the code, so that the motor vibrates on even number counts of its intensity and it’s off on odd number counts while it was fading in and out. I tried it on my fingertips and the back of my hand. it wasn’t easy to notice the intensity changes of vibrations. it required a lot of concentration to be able to recognize the fading in and out pattern.


Experiment 2: Motor Arrays

For this experiment, I used multiple vibration motors in order to experiment with sensations that travel on the skin and the propagation of surface waves between a number of motors. I used 2 motors for this experiments and modified the “fade” example to activate them in sequence. I tried placing them on different locations on my fingers, hands and arms to see if I could sense any haptic illusions. Surprisingly, I was able to feel a vibrating line between two vibrators placed on my pinky finger.  I tried to make the two motors to vibrate interchangeably with the modified “fade” code; one that fades with odd number counts, and the other to vibrate with even number counts. It slightly felt like a line was going back and forth between the two vibrating motors placed on my pinky finger.


Experiment 3: Haptic Motor Drivers

For this experiment, we used Adafruit’s haptic motor drivers. I downloaded the Arduino library and tried the “basic” example code that goes through all the driver’s different vibration patterns. I tried also the “complex” example code and played around with different vibration effects to achieve an interesting sequence. I tried randomly many combinations but for me none of the sequences made any specific sense or gave an interesting outcome; they were just trials for different haptic effects.




Haptic Feedback Design Application: Expressive Haptic Throw Blanket


For this workshop, I was interested in Surround Haptics that offer immersive gaming and theater movie experiences.

I propose designing an expressive throw blanket that provides immersive embodied experience in home theater environment through vibro-tactile sensations on the entire body. This haptic blanket is designed to provide smooth tactile motions to intensify emotions and enhance viewers’ movie experiences. The device is meant to be wearable and portable.


I planned to create moving tactile strokes by embedding multiple vibrators on a cozy, flexible, soft, lightweight throw or blanket that is easy to put on, sit on, or wrap your body with, and it’s big enough to fit various body sizes. The vibrators will be equally spaced and arranged in a matrix configuration so that when the blanket is wrapped around the full body, the actuators will be in contact with the full body: the shoulder, back, hip, thigh, knee, shin, back of the legs, upper arm, lower arm, palms of the hand, and stomach. Obviously, vibrations on cloth covered body areas will be less noticeable, so the frequency and power of vibrations should be somehow strong enough to be sensed. The goal is to create illusion of tactile sensation in order to make the movie viewer feel immersed by haptic sense. The haptic effects should flood the user’s entire body.



Flexible haptic throw blanket can be sat on or wrapped with while watching a movie for an enhanced immersive emotional experience.




Coding and Testing Materials:

Arduino Uno

SparkFun KY-038 Sound Sensor

LRA vibrating motor

Adafruit haptic motor driver

5mm LED – Red

5mm LED – Yellow

5mm LED – Blue

3x 10K ohm resistors




Circuit Schema


The haptic sensation for this project will be based on the Adafruit haptic motor driver effects, meaning that the vibration pattern is identified by the volume and intensity of perceived sound. Using Arduino code, I programed the device to be synchronized with spatial sounds using a sound sensor. The haptic device will respond to 3 different volume thresholds, and for each threshold a different vibration effect is actuated. For low volume sounds the vibration pattern will be smooth and short, for medium volume sounds the vibration pattern is moderate with medium intensity, and for higher volumes the vibration will get longer and more intense. I also included 3 different colors of LED lights as a visual representation for testing purposes.

screen-shot-2019-03-06-at-6-27-17-pm screen-shot-2019-03-06-at-6-27-36-pm



It’s my first time to work with Sound detection sensors, and they can be very useful for many ambient environmental designs where sound, lighting and haptics can be all synchronized in real time. I found it challenging to create detailed tactile sensations that reflects movie events. For this project, I used general vibrations or pulses predefined in the Adafruit Motor Driver, however, the haptic feedback pattern is not synchronized with a specific movie narrative or its peak moments.

This prototype can be applied for many other examples other than immersive theatre experiences. It can be interesting if it’s used when listening to music while relaxing on a couch or bed, where you can feel the tones of musical instruments moving along your body. Also it can be very useful for deaf people where they can be notified of door knocking or any other alarming sounds that might occur.

Next Steps:

For the future, to design a more sophisticated haptic throw blanket, we can make the haptic effects to feel more realistic by recording tactile signals from the real environment and assigning them to prerecorded sound effects. Then, sound effects can be mapped corresponding to each part of the body so the user feels as if the sounds run through the body. These ideas require more skills and further research in order to be achievable.

References: (Links to an external site.)Links to an external site.

Israr, Ali, Seung-Chan Kim, Jan Stec, and Ivan Poupyrev. “Surround Haptics: Tactile Feedback for Immersive Gaming Experiences.”ACM, 2012. doi:10.1145/2212776.2212392.








As someone who experiments with musical instruments regularly, understanding tempo and rhythm are essential to playing any kind of music regardless of how simple. In big bands, because there are many musicians playing together, synchronization is essential and it is usually maintained using headphones for each member or a maestro to keep everyone on-tempo. Besides being unusable to people with some disabilities, headphones can be annoying and can cause unnecessary sweating around the ears. Following that logic, I wanted to create a tool that I can use during a jam session to replace the headphones, a tool that allows me to hear and interact with my surroundings while keeping the tempo.

Vibration motors
Vibration motors


This experiment is an attempt at using Arduino and vibration motors to create a wearable metronome. This metronome will use vibration instead of audio to notify the user of each beat, making it a more accessible tool to people with hearing disabilities on one hand, and others who have a preference of not wearing headphones. The goal is to create a p5 interface that gives the user the control of the tempo, but this version of the metronome only allows modification through hard-coding the Arduino board. So, it is important to note that this version produces one tempo at a time, but the intention is to continue expanding and aiming for full interactivity without the need to edit the Arduino code.

Link to Video

Design Process

An idea of what the device could look like
An idea of what the device could look like
Initial sketch
Initial sketch

Class Experiments
Through the three experiments, we were asked to take note of the findings and test different methods of connecting the circuit and of coding the motors. This was a very useful step because I was able to learn at an early stage what type of connection I am interested in having depending on the purpose. For example, connecting the motor to a transistor made the vibrations much stronger but required a more complicated circuit. On the other hand, using a motor driver offered aq library of vibration patterns but the intensity of the vibration decreased significantly. The second experiment offered me what I was looking for to build the metronome because it required a very simple reliable connection, allowed multiple motors, strong enough vibration and enough flexibility to edit the vibration patterns.

First attempt using one motor
First attempt using one motor
Experimenting with two motors using simple connection
Experimenting with two motors using simple connection
Experimenting with the motor driver
Experimenting with the motor driver

Body Placement
Through my research for similar tools online, I came across the Soundbrenner Pulse, which is a smart wearable metronome that the user wears on his or her wrist, like a smartwatch. I also was considering the wrist as a placement for the metronome based on Clint Zeagler’s diagrams, suggesting that the wrist is a high sensitivity area. However, while the wrist metronome can work well for some instruments, percussions instruments, on the other hand, might not work well with a wrist metronome. So, after several trials in placing the motors on different parts of the skin, I eventually decided to place them on the back of the neck. This way, it will ensure there are no cables in the way, the vibration is not hindered by the instrument itself. In addition to that,  as part of my tattoo education, I know that the epidermal skin thickness of the neck is thin compared to the rest of the body. Placing the motors on the back of the neck brings the whole body into the musical experience because of the vibration that is pulsating into the body through the skin, which is more intense than placing the motors on the arms.

Testing the placement of the vibration motors
Testing the placement of the vibration motors

Circuit & Code
Going through the class experiments allowed me to see different approaches for the circuit. Considering that more than one vibrating motor is required to build this metronome, I wanted a simple circuit that is reliable and is not hindered the number of motors connected to the board. It is important at this level to write a code that is scalable because this is only the first version and future iterations will have more motors and more options available. Eventually, I used a simple connection, using the one side of the motors to two digital pins and the other to the ground pins.

Snippet of Arduino code
Snippet of Arduino code

Link to code

The code I used for this project is based on the fade example from the Arduino library. However, after trying different settings and values, I noticed that vibration with a (50) delay was enough to simulate a percussion tap. In addition to that, for this version, I decided to use a 75 bpm (beats per minute), which is a mid-range tempo. But since I am working with the “delay” function, I have to calculate the gap between the beats rather than the speed of the beats. So, through some calculations: 75 bpm will require an 800 milliseconds delay.


Tools & Materials Used

Arduino Mega
2x vibration motors



The main challenge I faced in this experiment was figuring out how to code the gaps between the beats rather than the beats per minute measurement. It got really complicated when I added another motor and attempted to output different patterns on each at the same time. However, since I am using the delay function, it is causing some issues and I will be working on it more to straighten out those issues. 

In addition to that, one of the main challenges during this assignment was writing the p5 code. Although it is something we have done before, after numerous attempts to make it work, for some reason, it is still not sending any information through the serial port. I will continue working on that.


Future Steps

In order for this tool to be fully useful, it requires an equation that converts tempo values on the front-end to delay in milliseconds on the back-end. This is crucial since the tempo has to be changeable by the user easily. Also, I will explore using more than two motors for the next iterations and testing how the experience can change to the user. In addition to that, I will explore adding some more functionality into the metronome, like offering the option of splitting the beat into 3 or 4 sub-beats.

Haptic Slider

Haptic Slider
Workshop Notes #5
Olivia Prior

Demo of the Haptic Slider
Demo of the Haptic Slider

Haptic Slider is an experiment that explores movement, response, and time through the use of soft sensors. The slider measures the motion and position of a finger along a sewn path. As the finger moves along the path from left to right, the intensity of the vibration motor increases accordingly. The haptic response creates a dynamic experience; instead of engaging with a dial to control a vibration the user can feel and set the intensity to their liking through the initial contact with the path. The finger becomes the controller and mimics user experience patterns learned on touch devices. The Haptic Slider takes digital patterns that create depth in devices without any and implements the patterns on physical tactile surfaces to give the user a sense of control.

For this project, I was inspired by common user experience patterns that are learned through touch devices like our smartphones. Many of those user experience patterns create space on surfaces where there is visually nothing more than a screen. I wanted to explore how to apply these motions we have learned (such as sliding a volume control down) and apply them onto a surface where depth cannot be changed visually. My experiment is to explore what could this haptic response create when the user performs the action of sliding a finger up and down on a soft surface.

The first instinctual action that I wanted to perform was the act of a finger moving up and down a soft static slider. I drew out a brief sketch of what I wanted to achieve.

Initial sketch of the Haptic Slider.
Initial sketch of the Haptic Slider.

Upon looking at my sketch I realized that what I really wanted was a physical potentiometer. I went to How to Get What You Want and explored the tutorials. I found a fabric potentiometer that used resistive material, conductive fabric, and conductive thread.

Screenshot from How to Get What You want of the diagram for how to construct the soft potentiometer.
Screenshot from How to Get What You want of the diagram for how to construct the soft potentiometer.

To follow the tutorial, I decided to change shape of the slider pattern to match the design that they had created. I chose to use Eeonyx Pressure Sensing Fabric resistive material that is used in a pressure sensor as an experiment.

The inner circle is conductive fabric and the outer ring is resistive material.
The inner circle is conductive fabric and the outer ring is resistive material.

I chose to sew these pieces onto a piece of non-conductive fabric for stability. I used alligator clips with male headers to connect the two pieces of material to my breadboard. I then took a small piece of scrap conductive fabric and moved it along the dome-shaped path of the soft potentiometer.

I uploaded the example code analogInOutSerial to read the differences in values.

The soft potentiometer connected to power and ground
The soft potentiometer connected to power and ground.

Initially, I was receiving a reading between zero to three. I swapped out my 10k resistor for a 1k and found that my range ranged from thirty to three hundred as my piece of fabric moved along the edges. Satisfied with the outcome, I decided to connect a vibration motor to the circuit.

Vibration motor connected to power and ground using alligator clips with male headers.
Vibration motor connected to power and ground using alligator clips with male headers.

I initially tried to map the value of the sensor to the output value of the vibration motor. I found this ineffective because the motor only really triggered a vibration when the output value was greater than 150. Because I wanted a steady gradient of vibration as someone’s finger travelled along the path I chose to not use this method.
I uploaded the example code for the Haptic Controller Breakout Board. The example code cycles through all of the patterns that are available in the library. I held the vibration motor until I felt a gradient of steady vibrations go from either high to low (or vice versa). The serial port was printing out the number of the example as it was executing the associated code. After a couple of loops, I identified some key pattern sequences that created a steady decrease in vibration. In addition, on the documentation for the breakout board is included a pattern list. I found the specific pattern numbers and isolated the code to loop through those.

Screenshot from the Adafruit documentation of the settings I used for the vibration motor.
Screenshot from the Adafruit documentation of the settings I used for the vibration motor.

My next step was connecting the potentiometer and the pattern library. Through my initial testing, I found that the potentiometer rarely exceeded 300, and the lowest value was 0 when there was nothing touching the fabric.

Mapped values from the output to the vibration motor.
Mapped values from the output to the vibration motor.

I created case statements that would determine the increase or decrease the intensity of the motor depending on the analog value from the fabric.

Case statements to determine the gradual increase or decrease in the virbration motor intensity.
Case statements to determine the gradual increase or decrease in the vibration motor intensity.

I found that this was simple and effective, but I had an issue when the value was not consistently zero. If it was not consistently zero, the motor would often “glitch” on and off.

After testing again, the initial value of touching the sensor at the farthest edge was thirty, so I decided that if the output value was below twenty-five to set the value to zero.

Arduino code that sets the value to 0 if the incoming reading is below 25. This is to stop the vibration motor from flickering.
Arduino code that sets the value to 0 if the incoming reading is below 25. This is to stop the vibration motor from flickering.

For documentation purposes, I included an led light on the circuit to visualize the motion of the someone tracing their finger along the path.

Soft circuit all assembled. An LED light is included in the circuit using conductive fabric to give visual feedback for documentation.
Soft circuit all assembled. An LED light is included in the circuit using conductive fabric to give visual feedback for documentation.

I sewed a finger cover out of conductive fabric rather than fumbling with a piece of scrap conductive fabric.

Finger slip made out of conductive material that is used to interact with the potentiometer.
Finger slip made out of conductive material that is used to interact with the potentiometer.

Video demonstration of the Haptic Slider 

Connection Diagram 

Connection diagram for haptic slider.
Connection diagram for haptic slider.

Results & Next Steps
The potentiometer gives accurate haptic feedback that correlates to the position of interaction on the path. The interaction is a very one to one result. Once the user takes away their finger all elements of interaction immediately stop. The result is no longer a tactile controller but a response to the interaction the user is engaging within. Wherever the user places their finger will dictate the intensity of the vibration.

In the next iteration, I would want to make the slider have a memory and work more like a tool. The user could slide their finger along the path to dictate the level of vibration and once removed the vibration would stay at the last indicated intensity.

I really enjoyed the design as the shape mimics a gauge, similar to that of a speedometer. The visual connotations work well with the response and haptics of a vibration motor. In this design, the vibration motor is visibly separated from the potentiometer and the sewn together base material. To create a more authentic haptic experience, the vibration motor would be placed beneath the potentiometer to give a hidden haptic response. Currently, the visual of the vibration motor is an initial indicator of the intensity as the user interacts, but ideally the user would choose an interact with the tool solely using touch. The other visual indicator that is in this circuit is the LED. This could be removed in future iterations. Currently, it is included for as a visual reference for documentation.

The user is required to use a piece of conductive material to connect the potentiometer pieces together. On How to Get What You Want, there is a demonstration of a potentiometer that uses metal pieces on top of conductive and resistive fabrics. I was tempted to explore this tutorial but I disliked the concept of having to move something physical on top of the potentiometer for this iteration. Ultimately though, it is necessary to connect the two pieces and I chose to sew a finger covering to attain the “magic” of the finger being what controlled the potentiometer.

Overall, I really enjoyed the simplicity and delicacy of crafting the soft potentiometer. Haptics is an interesting exploration because it borders what is simply a reaction and what is a reaction that gives the user meaning to their action. In common haptics we interact with, we receive information on depth and pressure. In this exploration, I aimed to see if I could explore both of these. I am unsure if the one to one relationship that resulted in the interaction of moving a finger along a fabric potentiometer achieved either fully. The mapped interaction of moving the finger along the path to a vibration intensity could have used in practical products as a controller, but on its own, it is simply a calculated response. In a future iteration, it would be interesting to experiment with how this design could be embedded in other technologies to further explore the field of haptic response in body-centric technologies.


Third Eye

Third Eye is an innovative wearable technology for visually impaired peoples. It is a wearable that specific for people who are blind. Using ultrasonic waves to detect the obstacles and notifying the user through vibrations and buzzer sound. Third eye for people who are blind is an innovation which helps the blind people to navigate with speed and confidence by detecting the nearby obstacles using the help of ultrasonic waves and notify them with buzzer sound or vibration. They only need to wear this device as a band or cloth. 

– Buzzer: very close to an obstacle

– Led: nothing in front of you

– Vibration: getting close to an obstacle


They are suffering a lot of hardship in their daily life. The affected ones have been using the traditional white cane for many years which although being effective, still has a lot of disadvantages. Another way is, having a pet animal such as a dog, but it is really expensive. So the aim of the project is to develop a cheap and more efficient way to help visually impaired to navigate with greater comfort, speed and confidence.


My goal for this project was to explore the different effects that you can create using simple vibrator motors. It’s straightforward to connect the small vibrator motors to wearable projects, and it is an excellent way to only notify the user without revealing information to other people.

Something that has always been on my mind is the warning systems that are available on cars. Especially when dealing with projects that are very visual base, I feel that vibration would be an excellent replacement using other senses to notify the users with warning signals.


Experiment 1:

We followed the instruction step by step and uploaded the “Blink” example code onto the Arduino micro board, examining performance of micro vibrate motor. We initially use one micro vibrate motor and placed the board on the table. We held our finger on top of it and feel the strength of the vibration. Since we were going to design some wearable using micro vibrate motor. We decided to place the motors on our skin instead. Experiment one was a little bit tricky. We cannot find the right pin for its connect. One of us used Arduino Uno and the rest of us used Arduino Micro. Though we used same example code but we need to use different pins for the connector. We spent some time to test the pins and make it work.

We also tried different frequency of the blink by changing the delay time of the code. I was wondering if we could change the strength of vibration which could be another signal of the wearable we designed. We then tried another example code, Fade example, on the Arduino. We notice this code changed the strength of vibration.


(Circuit diagram for Arduino Uno)


(Circuit diagram for Arduino Micro)

(Experiment 1 video)

Experiment 2:

For the second experience, we were supposed to test the three motor together. We made an array of motors. When the first experiment was successful, it was not difficult to add more motor. Use a different pin and then copy and paste the existing code. We recorded a small video, which is believed to be quite strong for human body. During this period, I consulted omid about a question about library. This example code shows all (117) modes of vibration in the library. If we want to use a specific effect in this library, we need to change the example code.

We ran through all the different vibration formats the library had. We want to explore different types of vibration for further wearable design as a mean of sending different messages.


(Circuit diagram for Arduino Uno)


(Serial monitor_Different effect)

(Experiment 2 video)

Third Eye:

Now a days there are so many instruments and smart devices for visually impaired peoples for navigation but most of them have certain problems for carrying and the major drawbacks is those need a lot of training to use. I noticed that hands work as blind people’s eyes.

They use their hands to perceive the world. In daily life, they often raise their hands and shake from side to side to see whether there is an obstacle in front of them. The design principle behind working stick is to extend the blind people’s arms. This device aims to work as blind people’ walking stick.

Part List:

  • Breadboard
  • Jumper wires
  • Arduino Micro
  • Vibrating Disk Motor
  • LED
  • Buzzer
  • Ultrasonic Sensor


  1. Connect the +5V and GND of Arduino UNO to the breadboard.
  2. For LED: Connect the cathode (Shorter pin of LED) to ground and the Anode (longer pin of LED) with a 330 or 220 ohm resistor.
  3. Connect the second pin of resistor with pin 6 of the Arduino as shows in schematics.
  4. For Buzzer: Connect the Positive terminal with pin 8 of Arduino and negative terminal to GND.
  5. For Ultrasonic Sensor: Connect the VCC and GND . Connect the Trigger pin to pin 12 and Echo pin to pin 13 of Arduino.


(Circuit diagram)



(Test video)


  1. In experiment one, we cannot find the right pin for its connect. One of us used Arduino Uno and the rest of us used Arduino Micro. Though we used same example code but we need to use different pins for the connector. We spent some time to test the pins and make it work.
  2. We recorded a small video, which is believed to be quite strong for human body. During this period, I consulted omid about a question about library. This example code shows all (117) modes of vibration in the library. If we want to use a specific effect in this library, we need to change the example code.

Information sources:

(Ultrasonic Sensor Alarm)

Next Steps:

  1. Work on the fabrication
  2. Have two vibration motors

The Sense Stick

8646d289-e96d-443c-8cb3-0e46bbf936b9 720f2c68-422e-41bb-9294-2fd59346e78d

By Veda Adnani

Code :


Crossing obstacles while walking is a daily challenge for the visually impaired. Often depending on their walking tick alone, obstacles are only sensed when too close to the person therefore risking accidents. The Sense Stick is an affordable haptic sensor that detects obstacles from a wide range and changes the vibrating rhythm to notify the wearer of the approaching proximity of any obstacle. While the sensor itself is placed on the base of the wearer’s walking stick, the feedback mechanism is placed on a small ring located on the middle or index finger of the wearer.

The reason for the feedback mechanism being placed on the finger isthat there is a significantly wide range of vibrations that need to be sensed and the thin sensitive skin around the finger (right under the nail) allows this. The wearer should wear the ring on the hand that is not holding the stick to maximize its efficiency. However, if they choose to hold things or partake in any activity using this hand, the device will not interfere with either activity due to its compact size and specific placement.


– Arduino Micro

– Breadboard

– Ultrasound sensor

– Vibration motor

– Jumper wires

– USB cable

– Adafruit Haptic Driver DRV 2650

ca653f64-fb21-4216-81fe-cabe6fadf4c6 b46b27be-1be1-4723-87d9-3866bfbedc8e 0b88995f-814e-462c-b99d-46b456868d77

Figure 1: Adafruit DRV2650L

Figure 2: Vibration motor

Figure 3: Arduino Micro

In class experiments:

We conducted three experiments in class, that helped us understand haptic mechanisms and functions. We began with basic analog experiments with the vibration motor  and moved on to trying variations with the Adafruit Haptic Driver. For each of the experiments we took the following into consideration:

– Intensity of vibration

– Frequency of vibration

– Rhythym (Incase of multiple motors)

– Is the motor placed on the body or the body on the motor?

– Position on the body (How sensitive is the area of skin you are using for the motor, why have you placed it there, is it under apparel or above apparel, what are the ergonomics of the motor on the skin.

Figure 4: Clint Zeagler’s map for motion impedance in males and females.

Using this diagram to understand sensitivity levels for different parts of the human body was helpful. I experimented with motors on the calves, palms wrist and fingers. Since the fingers were the most sensitive to low pulses I decided to focus on them as the area to experiment and place my prototype.

The initial experiments conducted without the haptic driver had varying results. We used the Blink and Fade defaults available in Arduino as the base code for our experiments. The Fade set gave us a lot of versatility and allowed us to play with speeds, intensity and rhythm. Some of the findings from the fade set are listed below:
At default full range, the vibrations from the motor are too harsh and slightly painful on the finger. However, the same when placed on the cheek feels pleasant and therapeutic. On the ears as well it is painful and disturbing. When placed on the wrist, its intensity is felt much lesser.
The more we increased the delay, the more rigorous the vibrations became, and the longer they lasted. For eg., at delay(5000) the intensity was too high for the fingers. I began playing with reducing the intensity to understand how it changed.
At delay(200) the vibrations were short and felt more like a pulse than an actual rigorous vibration. These subtle motions could be clearly felt on the fingers.
At delay(50) the vibrations were soothing and felt like a subtle heartbeat. This reminded me of stress busters and other calming techniques.
The two delays mentioned above were changed for both highs and lows, the next 2 experiments I conducted were with simultaneously contrasting high’s and lows in the delays.
delay(50) High and delay(1000) Low gave me a soft subtle long duration ambient pulse, which was also an interesting motion to sense.
Then I swapped the two to delay(50) Low and delay(1000) and this motion was too rigorous for too long.
Group experiment:
After conducting individual experiments, we moved into study groups and conducted experiments together with multiple vibration motors. For this experiment, we focused on playing with the “fade” function in Arduino. We played with different fade intensities between 5-55. We noticed a change in intervals and intensity of pulsation during this process. The maximum range of vibration is reduced in this process as well, and thereby makes the movement much softer and bearable on sensitive areas of the body such as ears, lips, cheeks and fingertips.

Haptic Driver Experiment:
We also tested the Adafruit DRV2650L Haptic Driver. The driver comes with a corresponding library that needs to be loaded into Arduino prior to use. The default code ‘basic’ available for the driver under examples runs each vibrating effect in sequence with a corresponding number that shows up on the serial monitor. Since the driver comes with over 100 vibration rhythms, once I set up the basic breakout (Circuit diagram below) I focused on understanding the differences in the rhythm, by going through the library a few times. I picked a set of rhythms that I thought made the most sense when used with this particular device.
Figure 5: Basic circuit diagram to test the vibration motor with a haptic driver.
 Considerations for ergonomics of the concept:
– Weather Conditions: The sensor placed on the walking stick should be between 15-25 cm above ground level to minimize intervention from snow during the winter.
– Location of the vibration motor: The vibration motor should be placed on the area of the body that will not be deterred by apparel or jewellery. But at the same time it has to be sensitive enough to sense a single pulse. Therefore the area that I picked was on the fingers, under the nails. It will be worn as a ring (as shown in the sketches above).
Once my experiments were complete I shifted focus to the prototype
The circuit for the prototype followed the same output pattern as the circuit for the haptic driver experiment. For the input, I added an ultrasound sensor and connected it as per usual practices.
 Figure 6: Final circuit fritz for the prototype.
For the coding process, I used base code from the Creation and Computation course for the ultrasonic sensor input (created by Kate Hartman and Nick Puckett). Thereafter I used if and nested if statements to add the vibration effects from the driver into the input code. I spent most of my time adjusting the distance threshold values and finding the right series of vibrations that were not too harsh, but not too soft. For the vibrations, they increase in intensity as the obstacle gets closer, and when inactive the motor emits a slight pulse to allow the user to know that it is powered and working. As an obstacle gets too close the motor stops vibrating to indicate that it is time to step over or stop or ensure that the obstacle is out of the way.
The following lessons were the most critical part of my experience on this project:
– Understanding variations in vibration and what feelings they can stimulate or meanings they can apply.
– Understanding the placements of both input and output sensors on the body and their context. Skin sensitivity and apparel affecting the sensors were also interesting lessons.
Understanding the value of haptics for accessible and inclusive design.
Clint Zeagler
Kate Hartman and Nick Puckett

Haptic Breathing Cues


Haptic Breathing Cues is a meditation program that provides visual and gentle haptic feedback cues for a guided breathing meditation.

Haptics Workshop Insights:

  • Hello Vibe Motors

Blink – exploring with Arduino Blink ex. code

When the unsecured vibration motor is placed on the body, it bounces on the skin and the resulting feeling was unpleasant and irritating.

When the vibration motor is pinched between two fingers, the sensation feels more pleasant and soothing.

Setting the delay for both LOW and HIGH to 100 makes the a vibrating sensation that feels like a racing heartbeat when the body is pressing on the motor or pinching the sensor between two fingers.

NOTE: Ensure that when testing with the vibration motor, at a fast speed, that the motor is secured tightly to a surface as if left to vibrate for too long the wires detach from the vibration motor

Setting the delay after turning HIGH to 100 and the delay after turning low to 5000, still generates a heartbeat like effect but instead it is more subtle and feels like a light buzz.


Fade – exploring with Arduino Fade ex. code

When the motor is placed on the body, there is less bouncing on the finger when compared to Blink test. This creates a more pleasing sensation that feels like a tickle

Pinching the sensor between two fingers creates a soothing sensation with the gradual fading of the vibrations

Changing the fadeAmount value to 15 and pinching between two fingers created a sensation that felt like breathing

I tried increasing the delay in the fade code but this felt like the vibration went on too long and made my finger feel weird due to the prolonged vibration.

To determine the threshold I reset the fadeAmount to 5 and began by setting the upper limit of the brightness value in the if condition to 100 and this generated a subtle effect. Lowering it to 10 and I couldn’t sense any vibrations. At 50 the sensation was barely noticeable and felt like a bug walking on my skin. At 60 there wasn’t much change. I felt like at 70, the sensation was the easiest to detect without having to concentrate too hard.


  • Motor Arrays

For this part our group tested a grouping of 3 vibration motors both using modified blink sample code and fade sample code. We tested the motors on the skin and with the body on the sensors where we pinched the sensors between our fingers. With the blink code, we were able to create a sequence where a motor vibrated one after the other causing a subtle sensation of directional movement.

Blink Vibe 3

  • Haptic Motor Drivers

For the haptic drivers i tested the basic and complex code, preferring to pinch the motor between my fingers to feel the sensations. With the basic code, a tingling sensation that seemed to crawl up my arm was felt as the program looped through the 117 possible effects. With the complex sample code, I tested  a combination of effects and found the vibrations to be too subtle. Since I wanted to have the motor sandwiched in fabric/felt material I decided not to use the haptic motor driver. I feel like this driver is more beneficial in cases where you want to create a single interaction and it didn’t work too well for me when trying to mimic a breathing patter or heartbeat effect.

I found that it was simple to use the blink and fade code with the vibration motor on my own to create my haptic breathing cues.

Haptic Breathing Cues

Ideation: I wanted to continue exploring self-care tools and during testing in the haptics workshops I noticed that some of my favorite interactions were when I pinched the vibration sensor between two fingers and was running code that created a heartbeat like sensation. This got me thinking about creating a handheld meditation tool that would incorporate both visual and haptic cues as feedback.

To first create the breathing cues – I used a formula for the meditation where a person would inhale for 4 seconds then exhale for 4 seconds. This code was placed in the loop where it would play continuously. Each time an exhale or inhale state starts, a signal is sent over the serial monitor to trigger the simultaneous visual cue to accompany the haptic cue. When the person is inhaling, the vibration monitor vibrates continuously and stops when they are meant to exhale.

Blink Vibe code

To create the visual cue, I used Processing to read serial monitor values and set states to indicate whether the person is meant to be inhaling or exhaling. Below is a sample of my code for when a person is inhaling. When the condition is found to be true, the size for the exhale circle is reset to 600 and font size reset to 50 first so that i can maintain a smooth transition between states in the animation to create the circle growing and shrinking effect.

Processing Code

Processing code 2

When testing, I noticed that the breathing meditation was a little jarring in the transition between exhaling and inhaling and I decided to add a state where the person held their breath. Additionally, I wanted to try using fade in and fade out for the vibrations instead of having continuous buzzing or silence. I modified my Arduino code to use analogWrite() in place of digitalWrite() allowing me to create a subtle fade effect. Additionally, on the Processing side, I added a hold state to handle when the person is holding their breath.



hbc 3

Components used:

  • Foam circles to press the vibration motor
  • 1 Vibration motor
  • Arduino Micro
  • Breadboard
  • Masking Tape
  • Alligator clips
  • Wires
  • Scissors






While loop with millis() : here

Link to Github code – Arduino: here

Link to Github code – Processing: here



Explorations in Haptic Feedback: Gentle Alarms with the Adafruit Flora

This week’s workshop looked at vibrations and other means of haptic feedback. For this exercise I wanted to look into haptic vibrations specifically as alarms for quick time naps that can be felt on the body so the user can be nudged out of sleep more gently and less intrusively.

Figure 1. Adafruit flora with sleeping mask.
Figure 1. Adafruit flora with sleeping mask prototype.

I looked into the DVR board and vibration motors online when I stumbled across this DIY tutorial by Becky Stern. She had used the board and motor to create a timely vibrating headband that would vibrate after a certain amount of time has passed. She did this to help her time her meditation sessions.

Figure. 2 Haptic Headband by Becky Stern.
Figure. 2 Haptic Headband by Becky Stern.

Inspired by timely vibrations and familiarizing myself with the different waveforms I started to sketch out some sleeping scenarios where I could attach a vibrating wearable device. This idea was only meant for quick time naps spanning from 10 minutes while taking a break from studying.


Figure 3 and Figure 4. Sketches of sleep mask and blanket.

First picture using a blanket wrap near the shoulder. Second picture using a headband with the flora attached on top.

Figure 5. Adafruit Flora

While spring cleaning I dug out my Adafruit Flora board that I found in my closet. It still worked so I decided to play around with it to test out different waveforms from the Arduino IDE library that worked with the DVR board.

Figure 3. Breadboard setup with the Adafruit Flora
Figure 6. Breadboard setup with the Adafruit Flora.
Figure 7. Testing different vibration sensor waveforms.

After going through all the waveform vibrations I really liked the waveforms of 65 – 70. They were powerful enough yet soft on the skin to be awoken to gently. I went with 65.

Figure 8. Ardunio serial port. Displaying different waveforms.
Figure 9. Timed flora code from Becky Stern’s DIY Haptic Headband. I adjusted the waveform number to 65 and changed the wait variable to 5.

Using the example code I got from Becky’s DIY page, I adjusted the waveform interval in the code and ran it through the Flora. I set the timing for 5 seconds so the vibrating sensor would go off every 5 seconds.

In later iterations I would use conductive thread and sew the flora onto either a blanket or sleep mask with a portable battery set. Perhaps multiple vibration sensors weaved and sandwiched within a blanket or the mask that meet the right spots could mimic the sensation of gentle nudging to help awake one from their sleep.


Haptic experiments and wristband

I experimented with a few different haptic mechanisms and record my findings.

Haptic feedback or haptic interaction works with the sense of touch. Whereas most computer interfaces rely on a monitor to convey visual information through pixels and light, haptic interfaces are quite varied. At the moment, the most common sort of haptic mechanisms is vibrating motors.  Silent mode on cell-phones or vibration on video game controller is some of the applications of this haptic feedback.

During the last week, I ran a number of an experiment looking into how to work with this tool. The main motor I used was an eccentric rotating mass (ERM) motor.

I set out to gain a better understanding of how haptics might be utilized in future projects. I checked web sites to see what has already done by others. I have also done the previous exercises that we have done in class. You can see it below.


ERM Motor

Beginning with a single ERM motor, I have done a few experiments to remember these motors strengths, weaknesses, and unique qualities.

Our first test was simply to observe and record my reactions to a motor turning on and turning off. The particular Arduino code I used was repurposed from the  Blink Test code. My main takeaway from this was that haptic feedback mechanisms need to be felt organic. Otherwise, the sensation will be kind of unpleasant and numb.

Then, I lowered the intensity of the motor. It was less unpleasant but my sensation was not also good. Changing the frequency of turning it on and off did not help my senses too.

Haptic Motor Controller

This little device of Adafruit has built-in effects. Using its library, I wanted to create a pleasant and organic haptic vibration. In order to create it, I used the Adafruit DVR2605 library’s complex version of the code and same circuit diagram for Arduino and its components as we did in the class.

It was a combination of a series of effects. This was roughly translated into the following effects:
89: Transition ramp up long sharp 2 — 0 to 100%
1: Strong click — 100%
94: Transition ramp down long smooth 1 — 50 to 0%
44: Long double sharp tick 1 — 100%
83: Transition ramp up long smooth 2 — 0 to 100%
1: Strong click — 100%
100: Transition ramp down long sharp 1 — 50 to 0%
0: End


Motor arrays

My final experiment is about an array of motors. Wiring up several motors could give me other opportunities and possibilities for a product concept. I tried with two motors to replicate the same effects. However, there were some limitations that I had.

  • If the motors are close to each other I felt they are one motor. If they were far away they were tow motors but not related. So, distance should be concerned in a design.
  • The time gap between vibrations should be related to each other. Otherwise, it will be like two unrelated vibrations.

The gaps between motors and time give the helped to create the impression that the vibration is gliding across the skin instead of each motor vibrating separately.


Haptic feedback is a very powerful tool for interactive design. I wanted to use this feature on some of my previous concepts. Even one motor can create information and give feedback. Because we use visual and audial versions more often, it is a different way of transmitting information. I think it can be a very useful feedback tool in some particular design approaches.

Design Concept with Haptic sensors:

As a sprint to create a feasible application for haptics, I wanted to design a product again for people with diabetes.

This design aimed to facilitate reliable and efficient night-time management. It can be a wrist band that warns its user by vibration.  It can be wear during the sleep and this band can warn the user if the heartbeat gets higher. ( I wish I could connect this band to their glucose monitor). This device is preventatively alerting the wearer before the hypoglycaemic episode occurred speeding the wake-up process, so they did not have to calculate their insulin dosage while drowsy. Moreover, some of the people, especially who have diabetes from their early ages, do not wake up by noises. So, vibration can be used to wake-up the user.


In this iteration, a heart rate sensor was introduced. There will be several motors on the prototype. The vibrations of the motors were hard-coded into the prototype.

I introduced transistors to provide a more consistent power feed to the motors. This allowed each motor to have relatively the same amount of potential strength.

You can see the sketch of the circuit with multiple motors.


You can see the video of the working circuit with multiple motors.

The final product can be used as an assistive device with the understanding that once we have access to information about how the passive functions of our bodies operate, we can then affect those functions. A normal human’s resting heart rate is between 60-75 beats per minute. When one’s heart rate is greater than 100 beats per minute, the user can put on the hand band (bracer) which pulses in waves. This provides enough vibration to make its user awake. When the user’s heart rate lowers to a resting rate range of  60-75 beats per minute or after the user turns it off, the vibrations will stop.

Bracelets can create a wave feeling vibration and sequences can change and be stronger to make sure the user feel it.

Codes below can be used and customized for the project.

Code for Pulse sensor: PulseSensor_Servo

Code for wave: VibrationWave

Next Steps:

The next major steps are the start working on a working prototype. For now, I know that it will work. I just needed to have a pulse sensor and several motors. I wanted to build a portable version of it; therefore I bought an Arduino gemma. For that project, I will need:

  • Gemma M0 or Gemma v2 or Gemma v1 (discontinued)
  • vibrating mini disc motors
  • Pulse sensor
  • 100mAh lipoly battery and charger

Kids Haptic Set

By: April De Zen


I wanted to create a fun haptic set for kids. This prototype would act as a button to trigger an electronic toy or another wireless device. There will be 3 feedback points on this haptic set, 2 LEDs on each finger band and a vibration motor in the wrist band. When Botton is pressed the LEDs with light with a light vibration to indicate that the signal was sent.

Materials & Tools
1x old kids sock
1-3x vibration motors
3x sequin LEDs
1 roll of conductive thread
1 roll of regular thread
1 felt battery holder
3V round battery
Sewing needles
2x Alligator clips


Workshop and experiments
In class, we tested out Motor Arrays and Haptic Motor Drivers. There were three experiments that allowed us to see the limitations and possibilities of a simple vibration motor. The biggest take away for me was learning to use that haptic motor driver, which allowed me to select a vibration effect which would create a smooth vibe instead of the rigid binary vibe. There are ways to produce similar results without the new driver we tested, but it’s not as fluid.


Creating the wearable
I pulled out one of the many old kid’s socks that have lost their match long ago. I cut the sock in half planning to use the top part for the wristband. The lower part of the sock I cut into strips and sewed them together to find my fingers. When I started this project, I wanted to create a stretch sensor that would run from the finger bands to the wristband. When the hand was clenched into a fist, the circuit would complete and set off the vibration motor. While I was playing with this idea, I thought it might be difficult to get a correct length that would stretch far enough without being too tight.


Exploring gestures
Once I had that revelation, I started playing around with the pieces of the sock and testing different gesture that I thought kids might do or understand. For the context of pressing a button, I settled on pushing two fingers together because it seemed to be the most natural. I also played with the positioning of the vibration sensor.


Connection sketch and execution
Once I had the idea, I drew out the circuit. I wanted to make sure it made sense before I started sowing to make sure I didn’t waste materials. After I wrapped my head around that, I started laying in the conductive thread. I used a flat stitch to create one side of the ‘button’ on the top finger band — This will be the part that is pressed up to the thumb band later. Then I brought the thread down to the lower finger band and stitched it to the front of the band and connected that side of the thread to the positive part of the LED and tied it off. Making sure they didn’t join, I stitched the negative side of the LED and sewed that line away and down into the wristband. Using that same line, I stitched the black wire on the vibration motor to the wristband (still using conductive thread). I did the whole process over on the other side, except I ran the fingertip band to the negative side of the LED and ran another line from the positive to the wristband below. Using that same line, I tired it into on front of my felt battery pack and tired that end off. Using a new line, I tired that to the other side of the battery pack and completed the line at the red wire of the vibration motor.


Trouble Shooting
Guess what, it didn’t work. Even though I was confident, it would work! I checked all the lines, and it looks correct according to my sketch. I tried flipping the battery so the negative/positive current would run the other way… nothing. I thought, maybe the exposed conductive tread on my skin was grounding the circuit, so I took it off and tested it… still nothing.


Plan B
Time for plan b, what if I can get this to work with a third LED? Maybe it’s the tread connection on the vibration motor which is loose when I was examining the prototype. I snipped out the motor and stitched in another LED again testing it without my hand inside in case that effected the outcome. Still, it didn’t work. I tried connecting the open wires to see if there was a point where the current would flow through. I touched the thread at the top finger bands, and that didn’t light anything up. Then I rubbed together the thread between the wristband and the lower finger bands and the bottom LED turned on — but only that one. I’m still puzzled… if you have any ideas as to why this didn’t work — Please share 🙂

Next steps
I wanted this to interact with an image on a screen in P5. The gear would provide instant feedback through haptic sensory and visual stimulation. I think kids would love the sequin LEDs all over their ‘glove’ with a vibration. It would be ideal to have this gear control a fun game on screen, and the interaction would be as simple as shooting at a target or jumping over obstacles when the ‘button’ is pressed.

Proximity Tap



In considering the use of haptics I was very interested in a product that would place vibrating motors on the wearer’s clavicle. To my mind, the clavicle is a sensitive space that is receptive to tactile feedback, but positioned in a place on the body where a wearable device could be concealed – or put on proud display.

My first concept involved using a wearable set on the clavicle as a control-centre for a smartphone or other device. I enjoyed the notion of a wearer subtly manipulating a device by touching their collarbone, especially when contrasted with the socially-invasive procedures of controlling (for example) a Google Glass or a smart watch.

When, upon consideration, this concept was out of scope and too far removed from the exploration of haptics this assignment asks for, I rolled it back into what I considered to be a simpler concept: a proximity sensor that would inform the wearer, through subtle haptic feedback on the clavicle, communicate the direction and proximity of people moving about behind the wearer.

Exploring sensor options brought me to the Sparkfun Gesturesense which I borrowed from a colleague. I preferred this sensor the UV proximity sensor in our kits. The Gesturesense could sense distance, orientation, and direction of movement, while the UV sensor could only sense distance. The UV sensor had a much better range than the Gesturesense, but I wanted to explore the new tech.

ZX Distance & Gesture Sensor - SparkFun | Mouser


I had some trouble getting the Gesturesense working with my Arduino Micro. It’s possible it was an issue with the pins serving different functions on the Micro than on the Uno (which is supported by the documentation), because when I switched to an Uno it worked without any trouble.

I mapped the sensor readings, which ranged from 240 (as a low reading) to 0 (max) to the simpler range of 0 (low) to 255 (high) in order that they could better interface with the vibration motors and pulse width modulation from the Arduino’s pins. I assigned the Z-position reading, the distance from the sensor, to a variable called vibeStrength, which serves as the value for the pulse width modulation on each motor. The X-position reading activates one of three motors based on the reading returned – below 80 left motor, between 81 and 160 middle motor, 161 and above right motor – based on the relative position of whoever is activating the sensor.

Thus, the motors vibrate softly when the sensor subject is far away and strongly when they are close, and the motors that vibrate are based on the direction of whoever is behind.

A recurring issue with the sensor is that it did not return a zero or null reading when not sensing any data – instead, it would continue to return the last number it sensed until it returned something new.  This meant the outputs would remain at the last reading, vibrating at that rate, until the sensor picked up something different. This often led to the motors vibrating when there was nothing to sense, giving a false positive.

To solve this, I wrote a function that would run a counter every frame the sensor was not returning a value. When the counter reached a threshold, it would turn off all outputs.
if (!zx_sensor.positionAvailable() ){
if (nullReading>=500){
analogWrite(vibePinMid, 0);
analogWrite(vibePinLeft, 0);
analogWrite(vibePinRight, 0);

This caused the outputs to freeze at their last value if the object they were sensing moved into another area, giving false positives until none of the sensors read anything.

To solve this, I added an else statement to each of the statements that called the motor pins, setting their PWM strength to 0 if the sensor number returned put the subject in a different section.

Next Steps

For now, there is no overlap between the vibration motors. I would like if, in future, there was a smooth transition between motors as whoever is being tracked moves, rather than having each motor operate independently as is the case now.

I would also like to 3d-print a casing for the sensor and microcontroller, and thread wiring through a sash, to complete the wearable.