I did a little experiment yesterday I’d like to post here:
I’ve been experimenting with haptic interfaces for aerial display over the last six months or so. There are a lot of ways to give haptic cues for aerial interaction, from the subtle, cold air of a dry ice fog screen to wearing controllable vibrating gloves of questionable origin to the pinpoint, albeit pricey accuracy of an ultrahaptics ultrasonic speaker array. All of these make for intriguing laboratory demos, but it’s hard to see how they can be a good, gear-free option for an aerial system.
About a month ago, Dez and I were talking, and Dez brought up the idea of a whole-volume haptic transducer. The idea is like the haptic vibration on a smartphone – when you touch any software button on a phone screen, the phone gives you a quick little buzz with the vibrating motor, just enough to show that you clicked something in the software. We could do a similar thing in an aerial system – just send a big puff across the entire interaction volume, to indicate that you hit something in the aerialized scene.
It felt like a cool idea, so I got to work. I looked around for a fast & easy way to make a big puff. Fans are no good – they take too long to spin up to have a real-time response (<20ms). Compressed air and a valve is fast enough, but compressed air going through a valve is super loud and distracting, and compressors are horrible for a whole litany of reasons. And then it hit me: subwoofers! Subwoofers are machines that move big volumes of air really quickly – they have a powerful linear motor (the voice coil) and a low mass (the paper speaker cone) that pushes a lot of air. I spent an enjoyable hour on bass freak websites and youtube channels to see what speakers are best for pushing a ton of air, and settled on a 400W RMS 12" subwoofer, with a displacement of ~2L, and got a giant car amp (DJ amps are expensive, 12V car amps are comparatively cheap) and some insane 8 gauge wire for the power supply, because yeah, 12V @ 40A is a sane thing to do. I had a giant 12V power supply left over from some old LED project. Oh, yeah – I also needed a speaker box.
Speaker boxes hold the speaker in place (handy), provide a resonant space for the audio (not interesting to me, I want this to be quiet), and the contain the air displaced by the speaker cone (super interesting to me – if I have all that air in one place, I can do something interesting with it). So, I got a cheap speaker box from amazon, bolted the crazy electronics to the back, and I was in business.
The first thing I tried was to play a loud, low frequency sound from the sub and see if I could feel a pulse in front of it. I used audacity to generate 10hz sine waves and played them through the amp. Unfortunately, I’d only really feel it if the volume was wayyy up, and that was about as fun as standing in front of a jackhammer. In case you’re wondering, it looks like this:
There are two main kinds of speaker boxes. Ported and unported. Ported just means that someone cut a hole in one. Without a hole, the air inside the box pressurizes when the speaker cone moves inwards and pulls a vacuum when the speaker cone moves outwards. It puts a kind of air-pressure damper on the speaker cone’s activity, which some people like. When you cut a port hole in the box, the air can get out of the way of the big speaker cone (try holding a big sail from moving in a light breeze and you get the picture), and it gets pushed and pulled in and out of the port. I got an unported box because I wanted to experiment with making my own port holes.
I tried drilling a 1" port hole first. I did it with the speaker running, just so I could feel the difference. It’s really striking! The speaker displaces about half a gallon of air when the cone moves from all the way out to all the way in, and that half gallon of air was getting squeezed out a 1" hole in about 1/40th of a second. That’s a lot of air moving really fast! It works a lot like an air cannon, which blows invisible “smoke rings” of air for dramatically long distances. The puff that comes out of the 1" hole is pretty big – I put a ruler one foot away from the port hole, and I could feel the puff over a 5" x 5" area, just the right size to cover the new Holoplayer One interaction prototypes.
One nice thing about using a subwoofer for the interaction: I’m driving the subwoofer at a very low frequency, in the 10s of hertz. Basically no interactive program makes sounds at that frequency, which is nice – it means that I can use the headphone jack to make regular interaction sounds and haptic feedback, and then use a low-pass filter to select the haptic signals and send those to the subwoofer, and send all the higher-frequency sounds to the regular speaker. I really like not having to install anything or fiddle with arduinos and serial communication just to get a demo working – everyone’s computer can make sound, and it feels elegant as AF.
The other question I was curious about is the delay between an interactive event (like my finger in the real-world touching an object in the digital world) and the haptic feedback to my finger. There are two parts to this delay – the first part is the time it takes the speaker to complete 1/4 of a cycle, pushing the air out of the speaker box, and the second part is the time it takes for the air to travel to the user’s hand. My target is to get the delay down to ~16ms, or a single frame of a 60Hz interactive program.
I’d like to keep the sound frequency as low as possible, to keep it in the sub-audible level, and so I can easily filter out the haptic sounds from the regular sounds in the game, sending everything out the same audio port. 30Hz feels like a good compromise – I get my delay down to 8.3ms, and it’s dramatically lower than a “normal” sound in an interaction. That gives me ~8ms to get the puff of air out to the user’s finger.
So how fast is the air going? That is a surprisingly complicated question. A Disney research paper with a fancier, smaller system says they hit 7m/s, which would travel the 30cm to my finger in 43ms. Ugh. I did a simple model of the pressure inside the cylinder and computing fast a “cylinder” of 2L (the speaker’s displacement) of pressurized air would be going if it all got forced out of the speaker cabinet in 1/4 of a cycle.
After doing these first calculations, I realized that I’m completely clueless as to how compressible fluid flow actually works, so I could either crack a book or just build a setup to actually measure the delay and just play around with the frequency and volume until I find a good combo. That’ll have to wait until after the 4th. Until then, I’m happy to be tinkering with simple haptics! Photos and videos of more demos coming soon.