Join Make: Community Today
Combine low-tech materials with some high-tech components and build a completely Touchless 3D Tracking Interface. Explore capacitive sensing by using several panels of cardboard lined with aluminum foil. These panels, when charged, create electric fields that correspond to X, Y, and Z axes to create a 3D cube. With the aid of an Arduino microcontroller and some supplied code, movements inside the cube are tracked as your hand moves around inside the field.
For Weekend Projects makers looking for an introduction to Arduino, this is a great project to learn from. Once you’ve gathered all your parts, this project should only take a couple hours to complete – you’ll be playing 3D Tic Tac Toe before the weekend is over!

Once your touchless 3D tracker is up and running, what you do with it is only limited by your own imagination! The original implementation of this project comes from media artist Kyle McDonald, who has suggested the following uses and applications:
- Make an RGB or HSB color picker
- Control video or music parameters; sequence a beat or melody
- Large, slightly bent surface with multiple plates + a projector = “Minority Report” interface
More:
See all of the Weekend Projects posts
78 thoughts on “Build a Touchless 3D Tracking Interface with Everyday Materials”
Comments are closed.
Another thing you could do with this: make a software-based theremin!!
Reminds me of work out of MIT in the 1990s: http://www.youtube.com/watch?feature=player_embedded&v=C6JnLTjySuc
Cheap, accessible capacitive sensors have helped a lot!
Please make it function as a game controller :)
Would it be possible to line the walls and ceiling and / or floor of a room to track a person’s movements within the room?
is there a code for Wiring?
[…] Build a touchless 3D interface! [MAKE blog] Share this!TwitterEmailFacebookStumbleUponLike this:LikeBe the first to like this. Tags: 3D interface, arduino, build-your-own, microcontrollers Comments RSS feed […]
How big the cube could be?
is there a code for Wiring ?
Finally made this, but still I’m not 100% sure how this works. I don’t see a circuit completed. There is a 5v supply but from what I understand it’s there to deal with the shielding wire (how exactly btw?) other then that, there are three parallel lines running through the 10kohm resistors to each plane, and that’s where it ends (or does it?) the foil is one side of the capacitor, is your hand the other “grounded” end? Or do the plates interact with each other and thus get charged so your hand alters/disturbs that interaction? (like a dielectric or something?) Sorry for being such a noob but I would appreciate any form of explanation. :)
Hi,
I have a pretty good feel for how this works – although I’m not sitting in front of the code right now.
We are basically dealing with a capacitive sensor, and so it isn’t obvious that there’s a classic circuit involved.
One plate of the capacitor is the foil and the other plate is you. When you move your hand closer to the plate you are “offering up” electrons from ground that make the plate hold on to a positive charge for a slightly longer time. The Arduino is measuring the time it takes for the voltage to drop on the input pin connected to the plate. If your arm is close then the charge (and therefore voltage) will stick around just a tiny bit longer than normal. The closer you are, the longer the time the positive (+5v) voltage will take to drop. This time value indicates that how close your hand is.
The plates should not be interacting with each other, as each plate is charged and the time value measured in a “round-robin” fashion – albeit very quickly.
The 5v is shielding the wires running from the plates from external interference.
It’s important that the laptop/pc be grounded for this to work – as the implied ground is what completes the circuit.
This is also one of those unfortunate situations where electron flow being opposite to current flow creates a bit of a cognitive problem.
I hope that helps to explain what’s going on.
Steve
Thanks a lot for the explanation! Just for final clarification, are you saying that on one end your hand is offering electrons, since you are grounded, and on the other end the circuit is completed, since the laptop/PC is grounded, which is in turn connected to the Arduino? If that’s the case, does that mean that the “capacitor” that’s formed is in series, or is there a parallel that I missed? Thanks again!
If I understand you correctly, then the capacitor is in series in the circuit.
(But there are 3 parallel circuits – one for each plate)
[…] Perhaps something like this 3D Interface you can build yourself? […]
[…] cardboard and aluminium foil and an Arduino. Might be a great project for someone to tie into a Pi!MAKE | Build a Touchless 3D Tracking Interface with Everyday Materials: Related […]
mind blowing project…. very nice Steve Hobley and i wishes your are created more and more project these types….
this is amazing and i am doing this project for my small term college project fest.
so Steve, i would like to know the coding..could u please explain the coding so that i can explain it further to the audience who come for an explanation..! it would be a very big help as my project submission day is tomorrow..lol my bad :P and i came up this website just now. so help needed ASAP
It’s really very simple code – the Arduino is just measuring the time for the pins to change state. The proximity of your hand will affect how long this takes, so it’s possible to figure out how close someone’s hand is by measuring this time value.
The processing code reads these timing values from the serial port and uses some rather cool (and not mine) code to render a 3D representation of where your hand is.
[…] Hot/Cold LEDs joins our Arduino-based projects, which have also included a touchless 3D interface made from everyday materials and a homemade data logger, among other exciting […]
[…] Hot/Cold LEDs joins our Arduino-based projects, which have also included a touchless 3D interface made from everyday materials and a homemade data logger, among other exciting […]
I am having a problem with the code there is an error ever time at line 11
Normalize n[] = new Normalize[sen];
The error reads Cannot find a class or type named “Normalize”
[…] their spinning discs, which in turn effects the audio. The other standout project would have to be A Touchless 3D Tracking Interface, because it is easy to make and great for those getting started with Arduino. Any tinkerer likely […]
[…] their spinning discs, which in turn effects the audio. The other standout project would have to be A Touchless 3D Tracking Interface, because it is easy to make and great for those getting started with Arduino. Any tinkerer likely […]
[…] Build a Touchless 3D Tracking Interface with Everyday Materials […]
I would like to know how to run the processing and arduino part in this project. Can to please give me some instructions. I have never done anything like this before so I would like to try it.
Thanks
Hi NG, can you clarify: do you mean how to install the Arduino software and connect it to your Arduino, or something more specific to this project?
Hello nick i am having some issues getting the tictactoe3D program to work and you seem to be well educated on how to problem solve with programs. Every time I run it, it just shows up as a blank cube with no points on it. What am I doing wrong? Thanks in advance
This is an amazing project. It got me thinking… Would it be possible to have a large piece of cardboard, (screen size(placed flat on a wall)) surrounded by 4 pieces of cardboard about an inch to two inches, coming outward, which will act as a touch/touchless interface? If this is possible does anyone know how? (Since i have no working knowledge of electronics, above basic wiring that is.) Also This design would have 5 different surfaces to work with instead of just 3 so could it also be used to track gestures? Thank’s in advance for all input. :)
as far as i know that would let you track the movement of a HAND through two dimensions plus touching/not touching which would let you do gestures with your entire hand but not with only your fingers, it would be possible two track two hands as long as you have AWESOME coding skills!
[…] http://blog.makezine.com/2012/08/10/build-a-touchless-3d-tracking-interface-with-everyday-materials/ […]
Aluminum sheets from the hardware store be used instead of a box and aluminum foil? Would it make any difference at all?
Sorry. Meant to ask “Could aluminum sheets from the hardware store…”
I don’t see why not, as long as they were stiff enough – and insulated from each other
Would Styrofoam insulate just as well as rubber? And what are the dimensions of the panels on this particular project?
Can anyone please write me what program this does step by step, i realy need this for my school project. Please e-mail me to kasanickyfilip@gmail.com . I will be very gratefull.
#define resolution 8
#define mains 50 // 60: north america, japan; 50: most other places
#define refresh 2 * 1000000 / mains
void setup() {
Serial.begin(115200);
// unused pins are fairly insignificant,
// but pulled low to reduce unknown variables
for(int i = 2; i < 14; i++) {
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
for(int i = 8; i < 11; i++)
pinMode(i, INPUT);
startTimer();
}
void loop() {
Serial.print(time(8, B00000001), DEC);
Serial.print(" ");
Serial.print(time(9, B00000010), DEC);
Serial.print(" ");
Serial.println(time(10, B00000100), DEC);
}
long time(int pin, byte mask) {
unsigned long count = 0, total = 0;
while(checkTimer() < refresh) {
// pinMode is about 6 times slower than assigning
// DDRB directly, but that pause is important
pinMode(pin, OUTPUT);
PORTB = 0;
pinMode(pin, INPUT);
while((PINB & mask) == 0)
count++;
total++;
}
startTimer();
return (count << resolution) / total;
}
extern volatile unsigned long timer0_overflow_count;
void startTimer() {
timer0_overflow_count = 0;
TCNT0 = 0;
}
unsigned long checkTimer() {
return ((timer0_overflow_count << 8) + TCNT0) << 2;
}
Cool construction , cheep to implement , but i don’t think it so easy to build it in reality .
[…] http://blog.makezine.com/2012/08/10/build-a-touchless-3d-tracking-interface-with-everyday-materials/ […]
[…] their spinning discs, which in turn effects the audio. The other standout project would have to be A Touchless 3D Tracking Interface, because it is easy to make and great for those getting started with Arduino. Any tinkerer likely […]
[…] Hot/Cold LEDs joins our Arduino-based projects, which have also included a touchless 3D interface made from everyday materials and a homemade data logger, among other exciting […]
[…] Young University student Dallin Briggs modified the Touchless 3D Tracking Interface for interfacing with the SeaPerch ROV, with the simple sketch code for controlling three DC motors […]