# Wiring a capacitance sensor to a controller

I'm trying to make a simple capacitance sensor to use with my controller. Do I need two resistors? And where do I place them? I drew a circuit diagram of what I'm thinking so far.

#### Attachments

• 20160425_102743.jpg
14.5 KB · Views: 246

## Answers and Replies

Merlin3189
Homework Helper
Gold Member
As far as I can see, your circuit just connects the sig input directly to -ve. So that's the potential it will always see, unless there is a hidden resistance in the -ve connection (there will be, but it's probably too small to be useful.)
Connect the sig input direct to the plate, but connect from the plate via a big resistance to whatever DC potential you want on the plate.

Then explain:
what is going to happen to the plate,
and what your sig input is going to look for.

It looks to me as if you intended to charge the plate to a certain potential, then detect the change in potential when the capacitance of the plate (to earth) changes. Depeding how fast the capacitance changes, the resistance may have to be quite big because the plate capacitance may be quite small. I don't know how reliable that method is, as I've never tried it.

Thanks for your response, here is a diagram I found online of what it should look like, although I'm not certain.

#### Attachments

• img.gif
5.4 KB · Views: 368
Merlin3189
Homework Helper
Gold Member
With the Send & Receive, that looks more like an AC idea. You apply a known alternating voltage to the RC combination and effectively measure the capacitance by reading either the voltage or phase at the junction. When a hand comes near, the capacitance changes and so does the voltage and phase of the signal at the junction.
Oh! Or maybe you just send a single pulse to the RC and measure the time for the voltage to rise. That sounds much more likely if a controller is reading it.
Again I've not done that one, but my guess would be something like,
configure the input to trigger an interrupt when the voltage rises above a threshold. Mainly hold the send low, allowing the plate capacitance to discharge. Periodically, output high to the send, start a timer. When the interrupt triggers, stop the timer, reset the send to low and use the time as the value of the capacitance. Compare it with either a quiescent value or the previous value to decide if the capacitance has changed.
(If you don't want / can't use an interrupt, just keep measuring the ip voltage until it reaches threshold.)

The time to charge (to say 2/3 of Vsend) will be roughly proportional to the capacitance of the plate. (For 63% charge, T=RC) So you choose R to give you a reasonable time count for the quiescent C and expect it to double when a hand is within a cm or so. By reasonable, I mean something you can count reliably - a count of 1 or 2 doubling to 2 to 4 does not give much confidence, 100 doubling to 200 is more obvious, but you don't want to waste time nor risk counter overflow, so no need to use thousands.
The capacitance of the plate might be a few pF, so you get a few μsec for each MΩ of R. (maybe more if plate is covered with suitable dielectric?)

That's my quick off the cuff idea and back of envelope estimates, but, as said, I've not tried it myself. Snags I see are: insulating the plate if you need R too big, and what problems 50Hz pickup might cause (and these days, maybe pickup from radio sources like phones and wifi.)

I'm sure there are others here with more appropriate experience. And if not, try electronicspoint.com or similar.

Edit: Ok I've found where you got the diagram and IMO Arduino playground is a reliable source, so I'd go with their idea (which I'm pleased to see is about what I guessed, only simpler!)

Last edited:
kolleamm
With the Send & Receive, that looks more like an AC idea. You apply a known alternating voltage to the RC combination and effectively measure the capacitance by reading either the voltage or phase at the junction. When a hand comes near, the capacitance changes and so does the voltage and phase of the signal at the junction.
Oh! Or maybe you just send a single pulse to the RC and measure the time for the voltage to rise. That sounds much more likely if a controller is reading it.
Again I've not done that one, but my guess would be something like,
configure the input to trigger an interrupt when the voltage rises above a threshold. Mainly hold the send low, allowing the plate capacitance to discharge. Periodically, output high to the send, start a timer. When the interrupt triggers, stop the timer, reset the send to low and use the time as the value of the capacitance. Compare it with either a quiescent value or the previous value to decide if the capacitance has changed.
(If you don't want / can't use an interrupt, just keep measuring the ip voltage until it reaches threshold.)

The time to charge (to say 2/3 of Vsend) will be roughly proportional to the capacitance of the plate. (For 63% charge, T=RC) So you choose R to give you a reasonable time count for the quiescent C and expect it to double when a hand is within a cm or so. By reasonable, I mean something you can count reliably - a count of 1 or 2 doubling to 2 to 4 does not give much confidence, 100 doubling to 200 is more obvious, but you don't want to waste time nor risk counter overflow, so no need to use thousands.
The capacitance of the plate might be a few pF, so you get a few μsec for each MΩ of R. (maybe more if plate is covered with suitable dielectric?)

That's my quick off the cuff idea and back of envelope estimates, but, as said, I've not tried it myself. Snags I see are: insulating the plate if you need R too big, and what problems 50Hz pickup might cause (and these days, maybe pickup from radio sources like phones and wifi.)

I'm sure there are others here with more appropriate experience. And if not, try electronicspoint.com or similar.

Edit: Ok I've found where you got the diagram and IMO Arduino playground is a reliable source, so I'd go with their idea (which I'm pleased to see is about what I guessed, only simpler!)
Thanks for the advice! I'm gonna to try out the sensor and hey if it doesn't work at least I'll learn something. But I'm really hoping it does work :)