Inmoov's Touch Sensors


Skip to comments

The other day DJ suggested an easy way to make a touch sensor, see this thread

So I started playing with that idea and made a couple of touch sensors by soldering a piece of foiling tape (I "borrowed" some from my wife's stain glass supplies) to the end of a wire. I attached the wire to an ADC Port and put the foiled end on the robot. Wrote a script and it works pretty good.

Here's a picture of the sensor.
User-inserted image

A short video of them working.

Thanks for the idea DJ !

By — Last update


Upgrade to ARC Pro

Become a Synthiam ARC Pro subscriber to unleash the power of easy and powerful robot programming

I'm so jealous that you have a Inmoov:D
If you touch the shoulder, the robot should automatically look into the right direction. same function as a NAO robot and very human like.
Good job Bob.... Simple but effective touch sensor..... are you thinking about putting these sensors in his hands too?
Great idea Bob...The thread to also caught my attention.
A conductive mesh over the silicone caps on the fingertips would do a good job.

Now you have to script your Inmoov to serve wine to your wife into a bare stain glass...
Ask Richard how to. ;)
United Kingdom
I second that "great idea"! Love your Inmoov, and can't wait to get started on
mine, once I figure out space to build it.

I would be interested in the script you wrote, can you post it?

Thanks for the comments. The foiling tape works well as it is copper and has an adhesive backing. I have also found that by putting a piece of electrical tape under the sensor improves the sensitivity. I have a sensor on each shoulder and one each forearm now and probably will try them in the hands.
Here's the code.


#Get ADC value
$TS0 = GetADC(ADC0)#left shoulder
$TS1 = GetADC(ADC1)#Right shoulder
$TS2 = GetADC(ADC2)#left arm
$TS3 = GetADC(ADC3)#right arm

if($TS0 >150 or $TS0 <35)
ControlCommand("Auto Position", AutoPositionFrame, "Head Left", 25,2,2)
$sent = "You are touching my left shoulder"
ControlCommand("2 Text to Speech", ScriptStart)
ControlCommand("Auto Position", AutoPositionFrame, "Rest",25,2,2)

elseif($TS1 >150 or $TS1 < 35)
ControlCommand("Auto Position", AutoPositionFrame, "Head Right", 25,2,2)
$sent = "I feel you touching my right shoulder"
ControlCommand("2 Text to Speech", ScriptStart)
ControlCommand("Auto Position", AutoPositionFrame, "Rest",25,2,2)

elseif($TS3 > 175)
ControlCommand("Auto Position", AutoPositionFrame, "Look down right",25,2,2)
$sent = "you are touching my right arm"
ControlCommand("2 Text to Speech", ScriptStart)
ControlCommand("Auto Position", AutoPositionFrame, "Rest",25,2,2)

elseif($TS2 > 175 or $TS2 <35)
ControlCommand("Auto Position", AutoPositionFrame, "Look down left",25,2,2)
$sent = "I feel you touching my left arm"
ControlCommand("2 Text to Speech", ScriptStart)
ControlCommand("Auto Position", AutoPositionFrame, "Rest",25,2,2)

Goto (loop)

In the video I didn't have it running in the "loop" and I activated the script with a voice command. If it is running in the loop it will sense your touch whenever you touch a sensor. I had to play with the values using the ADC Value control to know what settings to use.
I need to print one of these inmooves
Look at what I have found you might be interesting to implement

Working on a HDMI cable to fit in my Inmoov's arm, I discover a conductive mesh that can fit easily on hand's fingers.

User-inserted image
I got back to working on these touch sensors, however, they don't work now and I'm trying to figure out why. I don't get any change in the ADC value when I touch the copper sensor. When I originally made the sensors and programmed them, I would get huge value changes. I have tried a couple of different v4's - same result - no change and I tried different ports as well. I have also tried other types of sensors on these v4's and they work so I know the ADC ports are working. Putting a small capacitor in line doesn't make any difference either. I'm stumped!

Does anyone have any thoughts on why these sensors won't work any more?

Could it be a power difference? You originally used a v3 for this correct?
I'm running them on a v4, always have - nothing has changed power wise, or anything else for that matter.
Can you describe how they are wired? What pins on the ez-b, etc...
Each sensor is connected to an ADC port with a single wire. They were originally connected to ADC 0,1,2,3. With the ADC meter configured it shows a value that hovers around 68 with or without the sensor attached and no change when I touch the sensor. I've tried all of the ADC ports - all the same.
Where are they getting power?
Good question. They are just a single wire, see my first post.
Ah, i see - you're collecting ADC value by static. Well, it still should work "if" you're not grounding the tinfoil. Maybe InMoov has absorbed some moisture? Or you're just not staticy anymore:) Rub your feet on the carpet - well, maybe don't do that because you can easily build up thousands of volts by doing that and damage the ez-b haha

I would recommend separating the tinfoil from the inmoov and seeing if it works. It might just be grounded too well from moisture over time - or the garage humidity has changed drastically since the last attempt.
@DJ, Thanks, but none of your suggestions have made a difference. If anything it is drier in my shop now. If humidity effects this type of sensor then I think I'll look at a different way to do the touch sensors. I'm thinking that if I make a sensor with a signal wire and a ground wire and when the sensor is touched, the ground wire and signal wire touch, this gives a more positive reaction - the ADC reading goes to 0.
Do you see any problems doing that?
When I first saw this idea I was very surprised that it worked for you Bob. I can understand why you are now getting varying results. Since there are radio waves all around us the human body becomes an antenna (more often then not we become 60 Hertz antennas here in North America due to our electricity). Stick your finger onto an oscilloscope probe and you'll see it.

User-inserted image

The response from your body to the copper foil will change based on humidity, cloud cover, metal in the area, and moisture of your skin. The better antenna you are the more signal you can send into the ADC port. The dry environment you are in probably isn't going to help in terms of being an antenna.

Seems like you were also trying to use a capacitive effect. If you'd like us this type of method you won't need a capacitor in line with the copper foil as this will only work if you are a good antenna. Since capacitors are transparent to AC voltage the signal will pass through the capacitor to the ADC and it'll work the same as the original way you were trying.

User-inserted image

If you want to build a touch sensor that is a bit more reliable look into the sigma-delta concept. The concept does require you to have a capacitor attached to each copper pad, but it won't be in-line it will be attached from sensor to ground. Then you will need to charge that capacitor with 3.3V (maybe with a digital pin or use a single transistor to apply 3.3V to all the touch sensors). Once charged you can then start reading the ADC, then when the touch sensor is touched the capacitor will drain through the body (not enough voltage to hurt anything). You can detect the amount/length of touch based on how much time the capacitor takes to drain.

I'm sure I'm not explaining it very clearly but if you google Sigma-Delta touch sensing you'll get a better explanation:)