Trong trường hợp bất cứ ai đến tìm, tôi đã xây dựng một cái gì đó gần đây đã làm chính xác điều này.
Tôi đã xây dựng ba phiên bản, tất cả đều hoạt động, nhưng có các ràng buộc khác nhau về những gì bạn đang kết nối với mọi người.
1) Phiên bản thụ động Một người có một sợi dây gắn liền với chúng. Điều này được gắn trực tiếp vào pin analog của arduino.
Nếu bạn liên tục đọc từ chân analog của arduino, bạn sẽ nhận được một giá trị khá ngẫu nhiên (về cơ bản người đó là một ăng ten lớn). Tuy nhiên, số lượng giá trị này thay đổi là không đổi. Vì vậy, tôi làm analogRead 20 lần, tính toán phương sai (bạn biết đấy, cách rõ ràng, sử dụng toán học của bạn). Điều này không thay đổi trong khi ai đó không chạm vào bất cứ ai khác.
Khoảnh khắc họ chạm vào người khác, ăng-ten là một trong những lớn hơn rất nhiều, và phương sai tăng mạnh.
2) Phiên bản bán hoạt động
Cả hai người đều có dây nối với họ, người 1 là từ pin analog của arduino, người 2 từ mặt đất của arduino. Phương sai của một analogRead được lấy mẫu nhiều lần. Nếu mọi người không chạm vào, giá trị sẽ thay đổi xung quanh, như trước đây và phương sai cao được hiển thị. Khi mọi người chạm vào, mạch được nối đất và giá trị giảm xuống 0.
3) Phiên bản hoạt động
Cả hai người đều có dây nối với họ, người 1 từ chân analog của arduino, người 2 từ pin đầu ra kỹ thuật số. Trên chân đầu ra kỹ thuật số, tôi xuất ra một sóng vuông, đồng bộ với các phép đo của tôi về chân analog. Bằng cách này, khi mọi người chạm vào, phương sai rất cao (vì nó đang ghi 0 ... 1024 ... 0 ... 1024.) Tôi sử dụng điện trở pullup để tạo ra sóng vuông, để hạn chế dòng điện, không biết nếu nó thực sự thay đổi nhiều, nhưng tôi cảm thấy thoải mái hơn khi đưa nó qua cơ thể của người đó với nó.
Do tín hiệu hoạt động đang được sử dụng, giá trị phương sai trên và dưới khá không đổi, vì vậy phiên bản này theo tôi là chính xác nhất.
Vòng lặp đo trông giống như thế này:
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