Vector Glove

Wearable Orientational CV Controller

The scalar glove is good for what it does, but it has limited utility — only on or off, while a lot of CV control can use a gradient. So I wanted something that would output a gradient. I was poking around the internet and discovered this Adafruit chip: https://www.adafruit.com/product/2472f

This is a 9 degree of freedom absolute orientation sensor which detects its rotational x, y, and z position (among other things) and outputs the results as a vector that an Arduino can read and interpret. I’ve built it to output an individual CV signal for each of these axes (see the scalar glove post for a brief discussion of CV and why I’m using that). I’ve also mounted the chip on the back of my hand, which means that I can move my hand in particular ways and use that to control certain parameters of my modular synth.

It’s awesome and feels kind of like being a really lame superhero.

Hardware

Basically all of the hardware involved for this is the BNO055 chip and a handful of the resistor/capacitor DACs — see the scalar glove hardware section for some discussion of those. I chose to use an Arduino Mega rather than an Uno for reasons I’ll get into in the software section.

80kv-7

Software

Source code

Those DACs are needed because Arduino is incapable of outputting a purely analog signal. The closest it can come is by approximating one with PWM, pulse width modulation, pins. Here is Arduino’s explanation of PWM: https://www.arduino.cc/en/Tutorial/PWM

For my purposes, however, there’s an additional problem: the AnalogWrite method is very slow, too slow to be used for any kind of even halfway reliable CV controller. However, this isn’t necessary. There are ways to get around that — think of it as essentially overclocking your Arduino, forcing the duty cycle of the PWM pin to be faster than it was intended to be. Here are some resources that discuss how to accomplish that:

https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM

http://playground.arduino.cc/Main/TimerPWMCheatsheet

There are also various libraries that claim to do the same thing, but I haven’t had much luck with them.

Beyond that, the code is pretty simple; I’m using a library for the sensor to handle reading from it, normalizing the data to something that AnalogWrite can output (its range is 0-255), and writing it to the pins that I’ve set up fast PWM for.

Final notes80kv-8

The BNO055 sensor has a lot more capabilities than I’m using, and one of my next projects will be to extend it, at least to use one of the acceleration vectors. It’s just a matter of finding the time and motivation for that, which is easier said than done.

If you have any questions, feel free to contact me at eightykv@gmail.com.

Thanks for reading,

80KV

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Powered by WordPress.com.

Up ↑