Für den Fall, dass jemand auf der Suche ist, habe ich kürzlich etwas gebaut, das genau dies getan hat.
Ich habe drei Versionen erstellt, die alle funktionieren, aber unterschiedliche Einschränkungen hinsichtlich der Verbindung zu Personen haben.
1) Passive Version An eine Person ist ein Draht angeschlossen. Dies ist direkt an den analogen Pin des Arduino angeschlossen.
Wenn Sie wiederholt vom analogen Pin des Arduino lesen, erhalten Sie einen ziemlich zufälligen Wert (im Grunde ist die Person eine große Antenne). Der Betrag, um den dieser Wert variiert, ist jedoch ziemlich konstant. Also, ich mache analogRead 20 Mal, berechne die Varianz (Sie wissen, der offensichtliche Weg, mit Ihrer Schulmathematik). Dies bleibt konstant, während jemand niemanden berührt.
In dem Moment, in dem sie jemand anderen berühren, ist die Antenne um einiges größer und die Varianz steigt drastisch an.
2) Semiaktive Version
An beiden Personen sind Drähte angebracht, Person 1 stammt vom analogen Pin des Arduino, Person 2 vom Boden des Arduino. Die Varianz eines analogRead wird wiederholt abgetastet. Wenn sich die Personen nicht berühren, verschiebt sich der Wert wie zuvor und es wird eine hohe Varianz angezeigt. Wenn Personen berühren, ist der Stromkreis geerdet und der Wert sinkt auf 0.
3) Aktive Version
An beiden Personen sind Drähte angebracht, Person 1 vom analogen Arduino-Pin, Person 2 vom digitalen Ausgangspin. Am digitalen Ausgangspin gebe ich eine Rechteckwelle aus, die mit meinen Messungen des analogen Pins synchron ist. Auf diese Weise ist die Varianz beim Berühren sehr hoch (da 0 ... 1024 ... 0 ... 1024.). Ich verwende den Pullup-Widerstand, um die Rechteckwelle auszugeben, um den Strom zu begrenzen, nicht Ich weiß, ob sich wirklich viel ändert, aber ich fühlte mich wohler, wenn ich es damit durch den Körper der Person steckte.
Aufgrund des verwendeten aktiven Signals sind die oberen und unteren Varianzwerte ziemlich konstant, daher ist diese Version meiner Meinung nach am genauesten.
Die Messschleife sieht ungefähr so aus:
for(int n=0;n<20;n+=2)
{
pinMode(outpin,INPUT);
digitalWrite(outpin,HIGH); // square wave HIGH (through pull up resistor)
delay(2); // let things settle + don't run analogReads too close together
dataVal[n] = analogRead(inPin);
pinMode(outpin,OUTPUT);
digitalWrite(outpin,LOW);//square wave LOW (as output)
delay(2); // let things settle + don't run analogReads too close together
dataVal[n+1] = analogRead(inPin);
}
// calculate variance of the data values here