근전도 EMG(Electromyogram) sensor
EMG 센서는 근육의 움직임으로 인한 미세한 전기신호를 감지하는 센서입니다.
EMG 센서는 근육의 미세한 전기 신호를 감지한 뒤 이를 증폭하고 필터로 처리해줍니다. 이렇게 처리된 신호는 아두이노 등에서 받아서 사용할 수 있습니다.
EMG 센서도 테스트용 장비부터 의학용까지 스펙트럼이 다양합니다. 아래 링크를 보시면 테스트 용으로 사용할만한 센서킷을 보실 수 있습니다.(의학용 아님!!)
http://www.seeedstudio.com/depot/Grove-EMG-Detector-p-1737.html
많은 다른 센서와 유사하게 측정값을 Analog 핀으로 읽을 수 있습니다. VOUT 핀을 아두이노의 아날로그 핀으로 연결해 준 뒤 전압값을 읽으면 됩니다.
아두이노 –> EMG 센서
- 5V –> VCC
- GND –> GND
- A0 –> VOUT
아래 예제코드를 원하는 형태로 응용해서 사용하세요.
// Grove - EMG Sensor demo code // Grove - EMG Sensor connect to A0 // note: it'll take about serval seconds to detect static analog value // when you should hold your muscle static. You will see led bar from level 10 turn to // level 0, it means static analog value get ok int max_analog_dta = 300; // max analog data int min_analog_dta = 100; // min analog data int static_analog_dta = 0; // static analog data // get analog value int getAnalog(int pin) { long sum = 0; for(int i=0; i<32; i++) { sum += analogRead(pin); } int dta = sum>>5; max_analog_dta = dta>max_analog_dta ? dta : max_analog_dta; // if max data min_analog_dta = min_analog_dta>dta ? dta : min_analog_dta; // if min data return sum>>5; } void setup() { Serial.begin(9600); long sum = 0; // Calibration. Do not move your arm. for(int i=0; i<=10; i++) { for(int j=0; j<100; j++) { sum += getAnalog(A0); delay(1); } Serial.println(10-i); } sum /= 1100; static_analog_dta = sum; Serial.print("static_analog_dta = "); Serial.println(static_analog_dta); } int level = 5; int level_buf = 5; void loop() { int val = getAnalog(A0); // get Analog value int level2; if(val>static_analog_dta) // larger than static_analog_dta { level2 = 5 + map(val, static_analog_dta, max_analog_dta, 0, 5); } else { level2 = 5 - map(val, min_analog_dta, static_analog_dta, 0, 5); } // to smooth the change of led bar if(level2 > level) { level++; } else if(level2 < level) { level--; } if(level != level_buf) { level_buf = level; Serial.println(level); } delay(10); }
참고자료 :