

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
Sign up below for the Weekend Projects Newsletter to receive the projects before anybody else does, get tips, see other makers’ builds, and more.
More:
See all of the Weekend Projects posts


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?
Pingback: Make your own touchless 3D interface! « Science Teaching Tools
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)
Pingback: Interfaces « Bird in a Bowler
Pingback: Build a Touchless 3D Tracking Interface with Everyday Materials (reblog) | Raspberry PiPod
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.
and i came up this website just now. so help needed ASAP
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
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.
Pingback: MAKE | Sensing Hot and Cold with Weekend Projects
Pingback: Sensing Hot and Cold with Weekend Projects
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”
Pingback: MAKE | Best of 2012: Weekend Projects
Pingback: Best of 2012: Weekend Projects
Pingback: MAKE | Best of 2012: 10 Most Popular Posts of the Year
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!
Pingback: Houston Mini-MakerFaire | B-boy Interactive
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 .
// What's Trending
Raspberry Pi Design Contest
Lost PLA Casting from 3D Prints
Seventeen Sneaky Secret Hides
Ten Tips for Adhesive Tape
10 Things to Connect to Your Raspberry Pi
Is it a Hackerspace, Makerspace, TechShop, or FabLab?
I Have a (Puzzling) Dream
Teardrop Camper Trailer
// What's Shared
A better way to slice a pumpkin
DIY Nerf Darts
100 Dollar Store Organization Ideas for Craft Rooms and Beyond
In the Maker Shed: Minty Boost USB Charger
Mad’s Mouse House
Lace Princess Crowns
I Have a (Puzzling) Dream
Play the Rings of a Tree Trunk Like a Record
// Most Commented
DIY Hacks & How To’s: Get Emergency Power from a Phone Line
Resin Casting: Going from CAD to Engineering-Grade Plastic Parts
Ten Tips for Screws and Screwdrivers
Is it a Hackerspace, Makerspace, TechShop, or FabLab?
Ten Tips for Better Measurement
Makers on TV: Big Brain Theory
Arduino Announces New Wireless Linux Board
Grow: A Portable CNC Router System
Trending Topics
Get our Newsletters
About Maker Media
Subscribe
to MAKE!
Get the print and digital versions when you subscribe