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 : https://github.com/veda25/SenseStick


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.
Code: https://github.com/veda25/SenseStick/blob/master/SenseStick.ino
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


GitHub: https://github.com/npyalex/ProximityTap/blob/master/ProximityTap.ino 

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.



Massage Spike Chair

* Strategy:

the testing that interested me the most was the array of motors. The potential to move a vibration across a surface or body part felt like a fun area of exploration and I was reminded of an idea I had had last year for a feedback chair. Designing, refinishing and rebuilding furniture has always been a hobby of mine and I have been waiting for an opportunity to incorporate some furniture into some of the electronics explorations I have been doing. Naturally, since my concerns are often with weird pleasures and BDSM aesthetics I envision this chair to be a combination massage chair/nail bed.

* Documentation:

For the small prototype version of the chair I wanted to test out how the vibration would feel through a patter of clothing spikes (like the ones we put in our coats when we were young punks), so I decided to make a small pad with just a few motors. The final goal would be to take an old wooden chair and replace the cushion with one a custom made pad like the one made for this test.


the important pieces.


extending the wires


gluing everything way too much so that the wired don’t pull out as I had been warned that this often happened


I ended up putting an extra layer of leather around the motors as the upper level with the spikes was not laying flat and needed some more support.


the final pile


hooking it up to the arduino


I realized there was no good way to make a video of it as the vibrations are not strong enough to show up, but it was pleasant, less painful than anticipated and much more distinct in the area of vibrations that I expected. the vibration patter was simple and just cycled through the three motors. moving forward it would be nice to experiment with writing more complex patterns.

video of testing that shows the code working:


very simple code:

int VIB1 = 9;
int VIB2 = 5;
int VIB3 = 10;

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(VIB1, OUTPUT);
  pinMode(VIB2, OUTPUT);
  pinMode(VIB3, OUTPUT);

// the loop function runs over and over again forever
void loop() {
    analogWrite(VIB1, 255);
    analogWrite (VIB1,0);
    analogWrite(VIB2, 255);


* Insights:

I think one of the big takeaways from this process is that the placement of the motors and the placement of the spikes will be the most important element to finesse in the version of the chair. If the spikes are too far apart they won’t form enough of a surface to support weight and will just becoming painful. They will also be very difficult to align if they have space between them to fall over, since this thin leather is quite stretchy. It’s possible that the leather used will have to be much stiffer in order to let them sit flat. Originally, I though the motors would need to be placed quite close together, but in order for them to be distinct they need to have quite a bit of space from one another, which is very nice in a practicality sense due to them being expensive and also the port limit of the board I have been working with (feather M0). I will probably be looking into working with a Mega for the final chair as I envision the spikes and motors lining not only the seats but also the back, and even with the allowance of space between motors, the surface area of a chair will probably require more than the 13 ports on the feather. The mega is also a 5v bolt which produces much more pleasing vibrations than the 3v feather, which in this version is quite weak.


* Information sources:  n/a

* Next Steps:

The next major steps are the start working it into chair form. Sourcing good wooden chairs has always been as little tricky, but I have found a few that I may be picking up soon. I think the best course of action would be to make a similar pad, but larger, or maybe even a few to swap out and get to testing out how it feels to sit on them – it would be interesting to get different spikes/nails and see the way the shapes of them change the feeling of the vibrations. The whole sensation will most likely change dramatically when a person’s whole body weight is pressing into the spikes. Further to that I would like to incorporate some type of use controllers on the chair. Aesthetically, I like the idea of this being a row of potentiometers along the arms that change the speed and intensity and possibly patterns. Inputs are even more reason to move over to working with a Mega, gonna need those ports!

Alert Belt

Code: https://webspace.ocad.ca/~3170557/Body-CentricTechnology/Week5/AlertBelt.rar


Alert Belt is a smart wearable notification device that provides vibration along its surface to notify its users with their selected set of messages. For this project, the belt is connected to an ultrasonic sensor on a step motor that monitors the surrounding of the user and vibrates base on the angle of the objects approaching the user.


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:

I uploaded the “Blink” example onto the Arduino, examining its performance. I initially placed the disk on the table and tried to hold my finger on top of it, but this limited the movements of the vibration disk and reduced its power. So I decided to place the motors on my body instead. I tried the vibration disks in two different places, my fingertip and my wrist. When it was on my fingertip, I could only sense the vibration at that location, but also it felt too strong and annoyed me after just a few seconds as it was placed right on top of my blood vessel. On the other hand, when I placed it on my wrist, I could feel the vibration around my hand, and it was a much smoother vibration.


I tried changing the frequency of the blink to see at what point do I feel the motors turning off. I only started feeling the motor blinking above 30ms of delay, anything below that it felt as if the motor was continually vibrating.

I then tried running the “Fade” example on the Arduino. I noticed that the analogue value was not directly proportional to the power of the vibration disk. Anything under 60 was just off, and anything higher than 130 was almost full power. In addition, the vibrator’s vibration power increased by more significant steps when it was closer to 60 than when it got to higher values.

Experiment 2:

For the second experience, I wanted to test the three sensory illusions that we had discussed in the class. I made an array of motors and tried turning them on in order. I was able to get a phi phenomena illusion, where it felts as if something was moving up my skin.

For another test, I placed two motors apart from each other on my hand and turned them on at precisely the same moment to achieve a funnelling illusion. It did really felt as if the whole line between the two vibrators was shaking.


Experiment 3:

For the third experiment, I installed the Haptic Driver and ran through all the different vibration formats that they had in the library. What I noticed was that for most vibrations were only the power changed I could not feel the difference at all. But the library did include some interesting vibrations which would have be interesting to explore further as a mean of sending different messages.

Experiment 4:

For the final experiment, I wanted to do something that I have always wanted to do. I had always wondered why they don’t use vibration motors as a mean of alerting in cars, especially for blind spot monitoring or the different new warning systems that have been installed on new vehicles, instead of the extra lights that they keep on adding to the cars.

To explore this topic, I placed an ultrasonic sensor on top of a rotating step motor to scan the user’s environment and set three vibrating disks along a belt to vibrate according to the angle at which objects were approaching the user. I used the funnelling effect to give the user a full sense of 180 degrees of direction with only three vibrating disks.

Part List:

  • Breadboard
  • Jumper wires
  • Arduino Micro
  • 3 x Vibrating Disk Motor
  • Micro Servo Motor
  • Ultrasonic Sensoralertbelt_bb


The spacing between the different vibration disks is critical when you are trying to achieve a funnelling effect. If they are too far apart, you don’t get the result. Another issue that I found was the exact location of the motors. If they are placed on top of a vein, you feel the vibration throughout your body, but also if you place it too far away from your nerves, you won’t feel the vibration.

Information sources:

Adafruit DRV2605L

How to build a Radar:


Next Steps:

The next step would be to build a belt that would house the vibrating disks and test it on the body to see if the relation between the position of the vibration disks and the objects in real life is natural for the mind to understand.