project: apology helmet
Part of a series developed at the CBK Workgroup 2009 exploring how computer technology can help up to be more human.
Computer technology is mainly used to perform tasks that most humans find difficult, e.g., repetitive processes, large calculations, accurate timing, etc. Most of us are quite happy for computers to take care of these jobs for us because we don't enjoy them and computers do them very well.
But there are other things that many humans find difficult and don't enjoy that are less logic-based and therefore not considered suitable jobs for computers. These are often things we consider to be deeply human. Can computers help us perform these tasks as well?
The Apology Helmet helps us to apologise. The user selects an apology from six preset options. S/he then selects the intensity of the apology ("sorry", "very sorry", "really very sorry", etc) and his or her gender for the playback voice.
Once the helmet is on, the user can squeeze the strap to activate the helmet, but the apology won't start playing until the jaw is moving at an adequate speed. If the rate of jaw movement slows down too much or stops, the playback speed of the apology also slows down. This requires the user to put some effort and attention into making the apology.
The apology helmet was featured in Wired.com's Gadget Lab!
The helmet was finished for the deadline on 12 December!
Definitely the most difficult thing about the process was programming the jaw movement. In the end, I couldn't reliably control the playback timing of the audio with the speed of jaw movement. This is partly because the phrases are so short that any change in playback speed is not noticably related to the jaw movement. So I've made a compromise. I've made set a maximum and a minimum playback speed and the jaw has to move quickly enough to keep the playback at the "normal" rate, which is the maximum. If the wearer slows down or stops moving her jaw, the playback speed will quickly decrease to the minimum.
- back left
- back right
- intensity dial
- gender switch
- gender switch close-up
- speaker on front of helmet
progress: trouble at the FabLab
Today I went to the FabLab to embroider the labels for the phrases. The Embird Embroidery software has been updated and fonts are no longer included in the main application, they are plug-ins that have to be purchased separately. Since they're not very expensive, my plan was to purchase a font plug-in, use it, and then leave it at the FabLab for others to use in their experimentation with the software. Unfortunately the software company thought that the FabLab had given me an illegal copy of their software and threatened to sue both me and the FabLab.
That meant my careful planning of four hours for embroidering labels turned into eight hours of hand-stitching into the night. The result looks good, but I honestly would have preferred it with the machine embroidery, as it's much more cartoon-like.
Another change I made to the design was to have the labels permanently attached to give a flatter, more professional finish.
- blood, sweat and tears
- embroidered textile button
Got a bit further with the prototype. The speaker is embedded in the helmet at the front. The user can key through a selection of apologies at the back by pushing a single button. I've also played around a bit with different options for the gender and intensity controls. I was planning on using increasing sizes of frowney-faces to indicate increasing apology intensity (see previous post), but this could be too-easily confused with volume. Instead, I've decided to use varying intensity of frowns and perhaps colours.
- pull ribbon to right select female
- pull ribbon to left to select male
- colours indicating intensity
- icons on a single patch
Placing the controls.
Yes, it looks like a mess of wires, but this is the "first draft" of the apology helmet software working with and Arduino Mini Pro, LadyAda's Waveshield and switches and potentiometers to control the gender, intensity and content of the spoken apology.
I made a fabric cover for the skate helmet, ready for the embroidered controls:
Check out my instructable for how I made the pattern for the helmet cover.
I also started programming the wave shield and managed to trigger different sound files by pressing three different buttons. At the moment, it looks like the lilypad doesn't have enough RAM to handle the "intensity" feature, so I have ordered an Arduino mini 328 which has twice the amount of RAM as the lilypad... 2KB!
I've made some sketches of the controls to help figure out how the helmet should look.
These would be mostly done with soft circuits and embroidery, of course:
I also bought this helmet:
I was toying with the idea of making the controls (male/female, intensity, range of apologies) more generic so that the SDCard could be exchanged and the helmet could become a "break-up helmet", for example. I've decided against this as I think it will just complicate the concept. If I have time, perhaps I can make a second helmet for breaking off relationships!
So this is what the helmet should do:
- activation: switch helmet on and off (on inside?)
- settings mode: user chooses gender, intensity and apology from controls on outside of helmet
- calibration mode: this might be necessary to capture the users maximum and minimum jaw position
- apology mode: once the helmet is secured on the head, the user moves his/her jaw to play sound
- volume: volume is set using a control on the outside of the helmet
progress: audio hardware
It looks like I'll be using Lady Ada's Wave Shield for this project as all other options either came to a deadend or are simply too complicated for a little newbie like me. I've gotten the Wave Shield working with the Lilypad and I can switch sound files by pressing buttons! For the final project, I'll try to minify the hardware by using an Arduino Mini Pro.
This is what the apology helmet should be capable of:
- - choose from a range of pre-defined apologies
- - adjust intensity of apology (i'm sorry, i'm really sorry, i'm really very sorry, etc)
- - adjust for male or female voice
- - play apology slower or faster depending on jaw movement
- - should the helmet have other functions (small-talk, asking someone on a date, breaking up, etc)?
Pre-defined apologies. I am sorry:
- i was rude to you.
- i forgot.
- i lost my temper.
- i can't make it.
- i hurt your feelings.
- i was late for our appointment.
progress: audio research
Getting the Arduino to play sound is not that difficult. A while ago I used Leah Buechley's Sound Tutorial to play a frequency responding to a pressure sensor. This uses a similar approach to the Arduino Sound tutorial at uchobby. Both use the principle of producing a frequency to play a note. However, I want to play an actual speech sample.
Using the PCM Audio code from the Arduino Playground, I was able to take a wav file, compress it in Audacity, trim it with Sox and then convert it to C with Wav2c. The instructions included in wav2c were not comprehensive enough for me so I'll quickly document the steps I took in case I (or anyone else) ever needs to repeat this process using Mac OSX 10.5:
- Download wav2c.
- Use Audacity to create the file with the right settings: 8KHz, 8bit, mono. Export as WAV according to the wav2c notes.
- Install Fink.
- Install FinkCommander.
- Enable unstable items in Fink.
- SoX should now appear in the Fink list of applications. Install it and run the command according to the wav2c notes.
- Using Terminal (command line), navigate to the directory containing wav2c. Enter
makeand then enter
sudo make install.
- In the Finder, navigate to the directory containing wav2c. This creates a new file called wav2c. Open this file and it will open a new Terminal window and do its business.
- Run the last command according to the wav2c notes to convert the wav to c. I placed my wav file in the wav2c directory, but I'm not sure that was necessary.
After that detour into the weird world of Fink and the command line, etc, I got this working on my lilypad, but the words are almost indiscernable due to the static!
There are two more options I'm going to investigate before I break down and go for a pre-fab solution. I'm not at all against pre-fab solutions, it's just that I'd like to make this as small as possible, and none of them are designed to be wearable. My two remaining options are:
- Make an R2R ladder as originally suggested by Paul. I'm going to try following the instrutions in this tutorial
- Look into the Atmel AVR335 Digital Sound Recorder microchip, although this means leaving the cosy Arduino environment, so I'd rather not...
The pre-fab possilibites are as follows: