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

Nick Normal

Nick Normal

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!

  • weasel5i2

    Another thing you could do with this: make a software-based theremin!!

  • Travis Deyle

    Reminds me of work out of MIT in the 1990s:

    Cheap, accessible capacitive sensors have helped a lot!

  • jake

    Please make it function as a game controller :)

  • Anybodysguess

    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?

    • ricram2

      is there a code for Wiring?

  • Pingback: Make your own touchless 3D interface! « Science Teaching Tools()

  • Serge

    How big the cube could be?

  • ricram2

    is there a code for Wiring ?

  • dnx2000

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

    • Steve Hobley


      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.


      • dnx2000

        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!

        • Steve Hobley

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

  • eyesurgeonahmedabad

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

  • Manojit

    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

    • Steve Hobley

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

  • Zev

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

  • NG

    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.


    • Nick Normal

      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?

      • onders

        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

  • Chris Doney

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

    • jake

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

  • [email protected]

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

    • [email protected]

      Sorry. Meant to ask “Could aluminum sheets from the hardware store…”

      • Steve Hobley

        I don’t see why not, as long as they were stiff enough – and insulated from each other

        • [email protected]

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

  • Newermore

    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 [email protected] . 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;

  • Antonios Patounis Phtography

    Cool construction , cheep to implement , but i don’t think it so easy to build it in reality .

  • Pingback: Houston Mini-MakerFaire | B-boy Interactive()

  • Pingback: MAKE | Best of 2012: Weekend Projects()

  • Pingback: MAKE | Sensing Hot and Cold with Weekend Projects()

  • Pingback: Makers Making #WeekendProjects | MAKE()