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

See all of the Weekend Projects posts

78 thoughts on “Build a Touchless 3D Tracking Interface with Everyday Materials

  1. 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?

  2. 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. :)

    1. 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.


      1. 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!

  3. mind blowing project…. very nice Steve Hobley and i wishes your are created more and more project these types….

  4. 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 my bad :P and i came up this website just now. so help needed ASAP

    1. 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.

  5. 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”

  6. 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.


    1. 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?

      1. 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

  7. 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. :)

    1. 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!

  8. Aluminum sheets from the hardware store be used instead of a box and aluminum foil? Would it make any difference at all?

        1. Would Styrofoam insulate just as well as rubber? And what are the dimensions of the panels on this particular project?

  9. 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 . 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() {

    // 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);


    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)
    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;

Comments are closed.


I'm an artist & maker. A lifelong biblioholic, and advocate for all-things geekathon. Home is Long Island City, Queens, which I consider the greatest place on Earth. 5-year former Resident of Flux Factory, co-organizer for World Maker Faire (NYC), and blogger all over the net. Howdy!

View more articles by Nick Normal