We used Crisp Motor control modules for implementing the vibratory feedback based on detected touch events. These control modules were developed by Metatronics for the Crisp Project, and are equipped by input and output interfaces, as well as an I2C interface, the SDA (data line) and SCL (clock line) allowing a communication between the modules.

The I2C communication is mastered by one LilyPad Arduino USB board, which controls 16 Crisp Motor modules (I2C slaves); Ten of the slave modules were placed on the back of the garment, and the remained six were put on the front of the body, as we described in the previous blog post. The H-bridge circuit of each of the 16 Crisp Motor modules was connected to corresponding vibration motor, and we only use the touch channel equipped with the six front Crisp motor modules for detecting touch events.

To use I2C protocol for establishing a communication between LilyPad Arduino and the modules, we first assigned a unique I2C address to each of the slave devices (Crisp Motor module in our case) and stored addresses in their corresponding EEPROM. Then we let the Master (LilyPad Arduino board) continuously check if there is any touch event detected by the six touch sensors. Once a touch event is detected, the Master decides which vibratory pattern should be executed based on the source of the touch event (i.e., which sensors were touched and in which combination and order). Specifically, the Master asks the series of target slaves to vibrate gradually in a sequence. That is, the vibration intensity increases gradually (minimum to maximum) from the first to the last vibratory motor in the sequence, sustain for a while, and then decrease its vibratory intensity gradually from the maximum to the minimum again. The effect of gradually increasing or decreasing vibratory intensity is implemented by putting a one millisecond delay in the program loop, and then the vibratory intensity is increased or decreased by the given value every millisecond.

In order to easily adjust different factors of the vibratory patterns, such as the delay, the minimum and maximum intensity, and the duration of overlap of the vibrations between neighboring vibration motors, we set around 20 parameters for the program. That allowed us to easily experiment with different vibratory patterns we designed, and also makes the further development of the software easier and faster. Through the co-design session consisting of a programmer (Derec), an interaction designer (Dominika), and a tester (Indre or Carmen), we tried out different values of parameters, and fine tuned each of them based on the feedback of the tester wearing the Vibe-ing garment. The immediate direct feedback of the tester helped us to design the final vibrating patterns in a way it was described earlier. The two final vibratory patterns we created this way were resembling the rehabilitation taping, and the stroke by a palm on the back. We tested these patterns in the following user test.

programming vibratory patterns