openobject.org

Assignment 3 - The Skills...

From Physical Programming

DIY 3D Controller - The Skills

So, what kind of skills and abilities would your average Physical Programming student need to build one of these...

          Image:tictactoe1.jpg


... or more likely, use the idea of one of these to come up with a cool computer or robotics interface.

1) Soldering / Basic Construction

I suppose its stating the bleeding obvious, but its going to be essential to be able to solder and generally assemble frames, fixtures and the like to hold the plates up. Being able to work with prototype boards so that components like variable resistors etc can be introduced to aid tuning will also be relevant.

Changing the explicit use of the device will bring all sorts of different challenges in this skill set, ranging from fabricating a shell for the device to making sure that the capacitance plates and joining wires are adequately shielded from outside interference.

2) Code

Obviously the more challenging aspect of the project - this is where you'll get something useful out of it.

The Arduino side of the software is available open source as a .pde file. According to the Arduino forums if the right libraries are installed this code will be editable in the 'processing' environment. Given that learning processing is part of the course, it only seems logical to work with it. As such, the first skills required are going to be in processing. Developing a working understanding of the syntax and functions so that the supplied code can be read and, if needs be, improved. A higher sample rate would be nice, for example. This code outputs raw x,y,z coordinates, thats all it does, so the next little job will involve a bit of cut and paste.

Kyle McDonald, the creator of this version of the interface, also makes available the code he used to take these raw x,y,z's and turn them into a game of 3D tic tac toe. To quote him directly;

Three helpful things that the Tic Tac Toe code demonstrates:
  • Linearizes the raw data. The charge time actually follows a power law relative to distance, so you have to take the square root of one over the time (i.e., distance ~= sqrt(1/time))
  • Normalizes the data. When you start up the sketch, hold the left mouse button down while moving your hand around to define the boundaries of the space you want to work with.
  • Adding "momentum" to the data to smooth out any jitters.

These three bits are likely to be desirable in all applications of any device built, so learning how to build them into some sort of standard output is going to be the next code skill required - as an example, can these be built into the 'firmware' of the finished device?

Finally its probably going to make sense to actually use this new toy to do something. Finding an existing piece of open source software that is concerned with pointing devices might make it possible for a code mash up to make this device into an interactive screen frame. Code that drives the laser harps that various people have made [1] might make it possible to get audio output, from there visual outputs aren't a big stretch - particularly if you can get your program speaking to something like a quartz composer sketch.

Overall, the programming side of the project is going to require a decent understanding of what various other peoples' software is doing, then finding a good way to mash that together. Learning how to deconstruct the logic of what someone else has done is going to be more important than hardcore development.