Haptics
Nov 4, 2018 18:54 · 558 words · 3 minutes read
This post goes through the work I did for the Haptics weekend workshop.
Hello Vibe Motors
For this first exercise, we experimented with connecting a few haptic motors to see how they felt. We connected them all as you would a DC motor connected to an analog output pin, with the power going to the analog pin and ground cable going to ground:


Haptic Motor Driver
For this exercise, we connected a haptic motor driver to an Arduino Uno and tried out a bunch of its vibration patterns. We then connected an audio detection level sensor, and to have it mimic the state of our day, we had it use a calm pattern, and when the audio got past a certain loudness, we had it use a more intense pattern:
Motor arrays
For this exercise, we connected a series of haptic motors to feathers, and activated them one by one using PWM varying their intensity:


Haptic Matrix
For this exercise, I collaborated with Lucas K Chung, Haiyi Huang, and, Asha Veeraswamy. The contents of this section of the blog post is shared between our group.

Overview:
A wearable haptic matrix using multiple mini vibration motors that forms radio pattern to produce vibrating wave sensation on wrist.
Material Used:
- Arduino Uno
- 9 mini vibration motors
- Leather as enclosure
Sketch:

Diagram:

Code:
The program pulsed waves of vibration from the center out, in a sin wave form:
const uint8_t pins [3] = {9, 10, 11};
const float maxDistance = 6;
const float distances [3] = {0, 3, 6};
void setup() {
Serial.begin(9600);
}
float waveDuration = 3000;
void loop() {
// oscillate between 0 and 1.
float period = millis() / waveDuration;
float currentDistance = maxDistance * period;
for(uint8_t i = 0; i < 3; i++) {
float distance = distances[i];
float distanceFromCurrentDistance = currentDistance - distance;
float strength = sin(distanceFromCurrentDistance / maxDistance * 3.14);
Serial.print(strength);
Serial.print(' ');
uint8_t value = map(strength * 255, -255, 255, 0, 255);
uint8_t pin = pins[i];
analogWrite(pin, value);
}
Serial.println();
}
Plotting the vibration intensity of each layer of motors:

Reflection:
The motor in the center produced the strongest vibration whereas the motors in the outer circles felt weak. We couldn’t really experience the vibration like a wave. It was more like all the motors vibrating at the same time.
Bio-feedback Meditation device
For this exercise, I continued to collaborate with Lucas K Chung, Haiyi Huang, and, Asha Veeraswamy. The contents of this section of the blog post is shared between our group.
Overview:
A normal human’s resting heart rate is between 60-100 beats per minute. When heart rate is is > 80 bpm, the user will put on the meditation wristband which will pulse in sinusoidal waves to which they are supposed to match their breathing. When their heart rate lowers to a resting rate range of 60-75 bpm , the vibrations will stop. Relaxation achieved!
Materials Used:
- Arduino UNO
- 9 mini vibration motors
- Pulse Sensor
- Transistor + Diode
- Leather as enclosure
Fabrication Process:
Diagram:

