A bicycle pump which, through the use of a proximity sensor, introduces gravitational forces to a collection of blurred circular bodies.
produced by: Elias Berkhout
For this term's Workshops in Creative Coding module project the brief was unimodal interaction, and my initial idea was to use levers or the pump detonators seen in old cartoons, however, as I thought about this more I realised that a more gradual application of force in a sketch, as opposed to a simple on/off application, would be more entertaining to interact with and to look at. I wanted the work to be fun to play with and make the audience reconsider their interaction with mundane physical objects.
Concept and background research
Whilst investigating the work of Robert Andrew for my research project, I came across his 2011 work "Fence Sitter", which makes use of a fan to blow air onto very light pieces of what looks like polystyrene in a space between two pieces of fine mesh. I loved how the pieces moved around, colliding with one another, and formed evolving mountain-like shapes between the mesh and wanted to try my hand at creating a digitised, interactive work making use of similar forces.
Before settling on the Adafruit time of flight sensor, I looked into using pressure sensors to read the air pressure from the pump, or using a microphone to measure the amplitude of the sound of the air being expelled from the pump and infer a force from that, however, the proximity sensor eventually presented itself as the best option through its tiny size, easy setup and excellent documentation. The information from the sensor was sent over i2c to the Arduino, and although I spent a lot of time trying to access the SDA and SCLK pins from within openFrameworks' ofArduino implementation, this ended up being too difficult to find information or assistance on. I managed to find project-saving help in Joshua Noble's "Programming Interactivity: A Designer's Guide to Processing, Arduino, and openFrameworks" at just the right time, as he had an example where information from a sensor connected to an Arduino was converted from integers into bytes, sent over serial to openFrameworks, and then converted from bytes back to integers in openFrameworks. I would not have been able to do any of that without Noble's example.
Once it came to the visual aspect of the work, I spent a lot of time experimenting with different addons in openFrameworks to get the desired effect, initially experimenting with fluid dynamics and other forces and the movement of the pump generating particles, as opposed to exerting force on a static number of bodies in the space, before settling on the final version of the work. In the end, I used ofxBox2d for the physics simulation, which allowed me to decide what sort of gravitational force was present in the space, as well as the density, bounciness and friction of the shapes, among other things. I ran into a number of issues with this, namely in the drawing of the bodies, which seemed to cause problems with the other addon I was using, ofxFboBlur, and created some strange glitches, but I ultimately managed to find a simple workaround.
I like the idea of showing the work in a larger space with multiple pumps lined up in front of the screen/projector so that audience members can interact with the work together, almost in competition. I would also like to get some more experience with ofxBox2d so as to utilise more of its capabilities to create additional complexity in the interaction between the bodies in the space. I had hoped to create generative, slowly evolving shapes, which would collide with each other in unusual ways to create more interesting behaviour, but ran out of time.
I think the work is effective and made me realise the importance of the "smoke and mirrors" ideas we've spoken about in class, which I think I used well to make the movement and force look relatively natural. My overall impression of the work is that it is an installation which is a bit of fun to interact with, however, I don't think it has much potential for holding the audience's attention for long periods of time, although that was never really my intention. I achieved what I set out to achieve in that the project is functional, and I think I overcame a number of challenges in receiving and converting the sensor data appropriately, figuring out how to apply force to the bodies only when the pump moved downwards (not upwards, and not when static), and sifting through a whole lot of addons to decide what would or wouldn't work. I would have liked to have more interesting, evolving shapes in the space, but did not have enough time to create something I was happy with, and I also would have liked to have the work evolve over time a little more, so that it looked slightly different to people who used it ten or twenty minutes apart. The automatic movement of the bodies around the space once they've been static for a set period of time is visually effective, however, I would have also liked to make their movement more unpredictable.
Overall, I am reasonably happy with the work, however, I think there are a few more things I could have done with a little extra time to make it more complex and engaging for the audience over longer periods of time.
Noble, Joshua (2012) "Programming Interactivity: A Designer's Guide to Processing, Arduino, and openFrameworks" available at https://books.google.co.uk/books?id=sAsHA1HM1WcC&pg=PA225&lpg=PA225&dq=serial+input+from+arduino+openframeworks&source=bl&ots=KHz3UccApe&sig=mI6JR-iB4WiLT9Q-opHa-OZiNZQ&hl=en&sa=X&ved=0ahUKEwjmvtnD_I7aAhWBWhQKHW5EAKw4ChDoAQg1MAI#v=onepage&q&f=false
Adafruit VL53L0X Time of Flight Sensor Arduino example, available at: https://learn.adafruit.com/adafruit-vl53l0x-micro-lidar-distance-sensor-breakout/arduino-code
ofxBox2d – openFrameworks wrapper for box2d physics engine
ofxFboBlur – openFrameworks addon for applying blur
Honourable mention (I tried these but they didn't work or weren't right for my work): ofxMSAFluid, ofxFlowTools, ofxFluid,