Introduction: I Just Wanna Hold Your Hand

Conducting energy through people to stimulate tangible public interactions

What did we do?

We put together an Arduino, some wire, a Mac mini and a DLP Projector, then created a pair of hands out of aluminum. We additionally 3D printed some wall plates that resemble light switch plates, but instead of holding an on/off switch they are precision matched to the hands that we created on the waterjet at TechShop SF.  The hands activate a projected display with intriguing colors.  However, they could have many other uses.

Why did we do it?

This was an idea that bubbled up in the pitch night for UPSF.   Tosh Chiang introduced this idea to the audience and the rest of us just couldn't help it, either because we loved the idea or we wanted to hold hands with Tosh.  It's hard to say, but we all ended up at the table and in one fabulous weekend fabricated the 1.0 version of what you're undoubtedly going to improve upon when you bring this to your town.

Why do you want to do it?

We believe that this project can activate "dead" city spaces.  Imagine starting a public fountain, municipal artwork, or other public energy-consuming installation by holding hands!  Also, we like sending electricity through people.  

Electrocution, really?

No, well, kinda!  We send 5 volts from the Arduino to the hands.  When two or more bodies complete the circuit, electrons flow through the bodies and are then received by the Arduino.  The Analog to Digital Conversion of the Arduino then measures the flow against 1 volt and outputs a data stream.  This figure varies depending on the quality of hand holding, as well as the conductivity of the individual(s). Processing then compares the data and outputs a graphical, aesthetic display, based on threshold values within the code.

So, really, why?

The technology behind this project is very simple, but the social outcome is nuanced and complex.  Is it odd to hold hands with a friend or stranger?  How will that experience create memories or even trigger communities?  Does it make the moment more tangible?  On top of this, there are no moving parts to the interface; there are no buttons to break.  So long as the unit is powered, it will work!  

Who are We?

We met at the UP makeathon.  This project was conceived in a night, and fully executed 48 hours later!

Yael Braha: Hand Holder + Processing Hacker + Visual Designer

Tosh Chiang: Hand Holder + Arduino Hacker + Concept

Melody Donoso: Hand Holder + Visual Design

Ellen Keith: Hand Holder + Visual Design

Jasdeep Garcha: Hand Holder + Sound Engineer + Programmer

Marc Roth: Hand Holder + Fabricator


Step 1: Bill of Materials

1) Arduino (any board will do, we had a MEGA)
2) Computer (we used a mac mini)
3) Projector
4) Small PC speaker (ours came from a street fighter 2 arcade!)

1) Processing
2) Arduino Compiler
3) FTDI drivers (just in case)

1)  An Aluminum Sheet, or other conductive metal.
2)  20-50 feet of 18AWG wire
3)  Double-sided tape
4)  A 4"x6" project box (not necessary, but it keeps it neat!)
5)  Zener Diode x2
6)  20K resistor x2
7) Breadboard

1)  Water-Jet Cutter
2)  3D printer 

1)  Precision screwdriver
2)  Wire strippers
3)  Wire Cutters
4)  Scissors

Step 2: Program and Configure Arduino Circuit

Assemble the Circuit:
 1)  Take the Zener Diode and the resistor and hook them up on the breadboard according to the diagram.  For now, just use bare wires to represent the hands.  Initially we used 25k potentiometers instead of the single-value resistor.  This allowed us to "dial-in" our signal level.

2)  The Schematic shows only 1 pair of hands.   To do two, simply duplicate the circuit, but have R1 & D1 connected to A1 on the Arduino.

****these next two steps are optional, but help with debugging.  SO YOU BETTER DO THEM.

3)  Hook-up an LED to pin 13 (don't forget to observe polarity...anode to the arduino, cathode to ground)

4)  Hook-up the PC speaker to pin 12 (the other end to ground)

5)  Download our code with the pitches file.

github too (includes processing code too):

6)  Open the code (hands_sound_integrate2b.ino) in the complier and check that the "analogReference" line matches your Arduino.  We set it to 1 volt.  Make sure that pitches.h is included in the same folder too.

7)  Now open the serial monitor in the compiler.  Everytime the bare wires touch, you should hear a beep, and the led should light up!  If you hold the wires, you should also get non-zero readings.  Hopefully the tighter you hold the wires, the higher the numbers! 

8)  Modify a project box to hold the arduino and breadboard.  This makes set-up a snap!

pasted code:

by Ellen Keith, Yael Braha, Marc Roth, Tosh Chiang and Jasdeep Garcha
for SF UP festival 2012

#include "pitches.h"

int melody[] = {
  NOTE_E5, NOTE_B6};
int melody2[] = {
  NOTE_F5, NOTE_C6};
int noteDurations[] = {
  8, 8, 2};

//sampling and io
int pairOne = A0;
int pairTwo = A1;
int led = 13;
int aOut = 12;

//the rest

int triggerThresh = 50; //sets the trigger foroutput
boolean stopMusic = true;
int countOut = 0;

void setup() { //configures inputs and outputs

  pinMode(pairOne, INPUT);
  pinMode(pairTwo, INPUT);
  pinMode(led, OUTPUT);   //on arduino
  pinMode(aOut, OUTPUT); 

void loop() {
  int handShakeReadFinal1;//for final
  int handShakeReadFinal2;
  analogReference(INTERNAL1V1); //command varies between arduinos
  //  analogReference(INTERNAL);
  // read the input on analog pin 0 and 1:
  int handShakeRead1 = analogRead(pairOne);
    delay(10); //resample pin 0!
  int handShakeRead1b = analogRead(pairOne);
  int handShakeRead2 = analogRead(pairTwo);
    delay(10); //resample pin 1!
  int handShakeRead2b = analogRead(pairTwo);

//output value only if both samples are greater than threshold and non-zero
if (handShakeRead1 > triggerThresh and handShakeRead1b > triggerThresh){
   handShakeReadFinal1 = handShakeRead1;
    handShakeReadFinal1 = 0;

if (handShakeRead2 > triggerThresh and handShakeRead2b > triggerThresh){
   handShakeReadFinal2 = handShakeRead2;
    handShakeReadFinal2 = 0;

//print values to serial port

// delay(50);   


if(handShakeReadFinal1>triggerThresh || handShakeReadFinal2>triggerThresh)
    digitalWrite(led, HIGH);
    if (stopMusic) {
    countOut = 0;
    stopMusic = true;
    digitalWrite(led, LOW);

void tune(){
  for (int thisNote = 0; thisNote < 2; thisNote++) {
    int noteDuration = 1000/noteDurations[thisNote];
    tone(aOut, melody[thisNote], noteDuration);
    delay(noteDuration +30);

Step 3: Integrate Arduino and Processing

Download the Processing sketch:  

1)  Close the arduino compiler program.
2)  Download the processing sketch
    github link: http://http://

3)  Open the code in processing (UPanimation.pde)...."personalizedFunctions.pde" should be in the same folder.
4)  Ensure the Arduino is hooked-up via usb to your computer
5)  Ensure that the processing line with "myPort = new Serial(this, Serial.list()[0], 9600);" is correct, where  Serial.list()[0] is your serial port.  For us it was usually 0, but sometimes it was 1.  This is the port that talks to your arduino.  You'll get an error if this is not configured.
6)  Run the sketch.  Hopefully, whenever you touch the bare wires, you'll see changes on the screen.  
7)  Note the if-then-else structure of the Processing code.  You can edit this to make different RGB color blooms or add more thresholds to get a larger span of colors...

Step 4: Make Some Hands

Keeping in mind that you may not have all of these tools at your disposal. Most people do not. This should not stop you from doing this project. Until you move near a TechShop you could just as easily cut this out of cardboard with an exacto knife, decorate the negative with something non-conductive and wrap the cutout hands in household aluminum foil, put them back together then run leads to your homemade hands. Between that and our version there are a million more possibilities and we are seriously excited to hear how you iterate on this design.

Here is how we did it:

Take a slab of 6061 Aluminum (we found ours in a junk pile), slap it on a WaterJet, vector out a pair of hands, realize that you have enough slab left over for kids sized hands, shrug your shoulders, tweak the file on the fly to be 60% of the original and run the job again. Poof, you've got two sets of human sized metal hands that you can run wire to and create connectivity.

Then what:

Well, we've got these cool hands, wouldn't it be cooler if we had hand sockets to put them in? Yeah! Where can we find a giant 3D printer that has nothing to do? Just look in the backyard, I'm sure someone has idle time and plenty of material to spare (okay we got a killer deal from a great company that went out of their way to make sure that we had what we wanted inside of our budget Thanks Autodesk).

Where are those files:

See attachments-
The DWG and DXF files were edited with FlowPath which is the WaterJet software used at TechShop.

The STL files are the cutouts of the hands that we 3D printed using a Connex 500

A little more detail please:

Be aware that using these files separately without checking the dimensions could have a negative outcome. Different 3D printer software likes to do funny things. To err on the side of caution I even increased the file size to 101%  on the 3D print to make sure that we could get the much less pliable aluminum hands to fit happily inside. They fit like a glove (I know I couldn't help myself).

Once you have all of your adult sized hands the way you want them, simply reduce everything to 60% or .6 of actual size and you've got your kids sized everything.

Our Adult sized hands are exactly 6.233" x 7.0585"

         that is if you were to draw a box around a single hand that
         goes from the tip of the finger to the bottom of the palm and
         left to right from the furthest point of the pinky to the furthest
         point on the thumb, it would encompass the entire hand those
         would be the measurements of your box.

So to create your Wall outlets, assuming that all of the math stays the same (it doesn't have to, only the proportions do) then your looking at plates that are the Exact dimensions for the rectangle enclosing the hands

x =9.521
y = 12.708

Then children's sizes

x = 5.7126
y = 7.6248


What's better than the unlimited free coffee and popcorn at TechShop SF? The WaterJet!

If you reach the end of this and you "have to have" WaterJet 6061 3/8" aluminum WaterJet hands, but you don't know how to get your hands on them, let us know. Someone will forward me the request and I'd be glad to make you a set as long as you cover the costs and shipping (assuming we don't get over run with requests for this). I also have the hands files in an Autodesk Inventor 2012 Professional assembly file that I'd be glad to send along since it cannot be uploaded here.

Why are you still reading? Go make awesome hands and then come back for the next step :-) -Marc

Step 5: Put It All Together

Yeah, put it all together!

1)  Remember the bare wires from the arduino circuit?  Give each hand a generous lead of 18 AWG wire.  We attached the wire to the hands simply by stripping the wire and then taping it to the underside of the hands.   Terminate the other end of the wire where the bare wires were in the step 2.  The schematic represented this as "hand one" and "hand two."  A 2nd pair would be added the same way as described in step 2.  Then attach the hands to a wall with double-sided tape.  Place the 3d printed "light switches" over the hands, and attach with double-sided tape as well.   Make sure that the gap between hands is larger than one person can span--this way you need two people!  

2)  Set-up a table, or pedestal with your cpu and projector.

3)  Hook up the Arduino circuit to the computer, and the computer video output the the projector.

4)  Open the processing sketch and select "Present."  This will fullscreen the application.

5)  Start holding hands with strangers!!!  


Instructables Design Competition

Second Prize in the
Instructables Design Competition

UP! Contest

Participated in the
UP! Contest