How did we make the Cassius Punching Bag
The Fluidforms Punching Bag contains a matrix of 9x7 force sensors that measure the force exerted by a blow to the punching bag. The sensors are plugged into an Arduino board that sends the values over USB to a computer using the MIDI protocol. The Computer is running a Processing sketch that receives the MIDI packets and writes the current state of the sensors to a folder in a “|” separated format. An OpenGL render then reads these text files and graphically represents the current state of the punches to the bag since the last reset.
Creating the Sensors
We initially planned to use Strain Gauges from HMB. Although these are great sensors they require an amplifier to get a change in resistance great enough to be useful. Because these sensors were going to be applied to a soft surface and needed to withstand being pounded and bent for a the duration of the 5 day Salone Satellite, they needed to be very durable an flexible. For this reason we decided to make our own sensors.
Take a piece of cable and two pieces of wire mesh. This is available from hardware stores and is used on doors and windows to keep out mosquitoes. Copper is the ideal material since you can solder it but by threading the wire through the holes, looping it back and soldering it to itself you can get away using an aluminium or stainless steal mesh that is likely to be easier to find.
The conductive foam that we found to provide the best change in resistance was quite brittle before being squashed. To combat this take any cylindrical object you can find around the office and roll the foam flat. In our case this was bottle of Mount Riley Winemakers Selection Sauvignon Blanc but a Mount Riley Pinot Noir will also do the trick.
Place the piece of conductive foam between the two pieces of wire mesh. Make sure the the two wires are completely “isolated” by the foam.
Now place two pieces of plastic on the outside of the sensor.
Tape the whole thing up and place an Fluidforms sticker on it. An Algodes sticker will also do if you don't have a Fluidforms one.
Vuala, you now have your very own force sensor. The resistance of each sensor will vary, but we are going to take account of this in software. I took about 5 hours.
Wiring the sensors to the Arduino board
Because Arduino only has six analogue inputs we need to extend this through the use of multiplexers. The multiplexers we used are MC14067BCP. These have 16 channel and enable you to plug 16 sensors into one analogue input. The way a multiplexer works is that you have to tell in which channel to read by setting the four control pins with the digital outputs from Arduino (2x2x2x2 = 16). The multiplexer the sends the value of this channel out of its output pin. This becomes the input for an analogue input on the Arduino board. We can plug six multiplexers into the six analogue inputs of Arduino. The same four digital outputs can be used to set each multiplexer. In the wiring diagram I have only drawn four multiplexers as we only needed four for your 63 sensors. The basic process is that we set the control pins to represent channel 0. We then read the value of sensors 0, 16, 32, 48 from the analogue inputs 0,1,2,3 respectively. We then set the control pins to 1 and repeat the process, but this time reading the values of sensor 1, 17, 33, 49.
To wire the Multiplexer we connect the inhibit pin (number 15) to earth. Connect the control pin 10 to the digital output 2, control pin 11 to the digital output 3, control pin 14 to the digital output 4 and control pin 13 to the digital output 5. Connect the ground pin (number 12) to ground and the power pin (number 24) to the 5V output on the Arduino board.
The multiplexer input channels are not in the order of the pin numbers so watch out. You can see how I wired it all together in the wiring diagram.
In the processing sketch we will receive the bytes sent by the Arduino and work out which byte is the command, which is the sensor ID and which is the sensor value. Because each sensor will have a slightly different value we will save an array of zero values when we reset the punching bag. This will enable us to take these values away from the actual values in order to get the maximum change in value since the last reset. This equates to measuring the hardest punch on each sensor.