En caso de que alguien venga a buscar, recientemente construí algo que hizo exactamente esto.
Construí tres versiones, todas de las cuales funcionan, pero tienen diferentes restricciones en cuanto a lo que estás conectando con las personas.
1) Versión pasiva
Una persona tiene un cable conectado a ellos. Esto se adjunta directamente al pin analógico del arduino.
Si lees repetidamente desde el pin analógico del arduino, obtendrás un valor bastante aleatorio (básicamente, la persona está siendo una gran antena). Sin embargo, la cantidad que varía este valor es bastante constante. Entonces, analizo 20 veces, calculo la varianza (ya sabes, de la manera obvia, usando las matemáticas de tu escuela). Esto se mantiene constante mientras alguien no toca a nadie.
En el momento en que tocan a otra persona, la antena es mucho más grande y la variación aumenta drásticamente.
2) Versión semiactiva
Ambas personas tienen cables conectados, la persona 1 es del pin analógico de arduino, la persona 2 del suelo del arduino. La varianza de un análisis analógico se muestrea repetidamente. Si las personas no se tocan, el valor cambia, como antes, y se muestra una variación alta. Cuando las personas se tocan, el circuito se conecta a tierra y el valor baja a 0.
3) Versión activa
Ambas personas tienen cables conectados, la persona 1 del pin analógico de arduino, la persona 2 del pin de salida digital. En el pin de salida digital, emito una onda cuadrada, en sincronización con mis mediciones del pin analógico. De esta manera, cuando las personas tocan, la varianza es muy alta (ya que registra 0 ... 1024 ... 0 ... 1024). Utilizo la resistencia pullup para generar la onda cuadrada, para limitar la corriente, no saber si realmente cambia mucho, pero me sentí más cómodo al pasarlo por el cuerpo de la persona.
Debido a la señal activa que se está utilizando, los valores superior e inferior de la varianza son bastante constantes, por lo que creo que esta versión es la más precisa.
El bucle de medición se parece aproximadamente a esto:
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