EMG Sensor란?
근육의 수축 이완을 전압으로 나타냄
- 노이즈가 많음
- 매우 신화가 작아 증폭효과를 가지고 있음(계기증폭기)
- 신호를 반전시켜줘야함
- Signal processing(Low-pass filter)
- 신호가 매우 작으므로 gel type의 전극을 붙임
오실로스코프로 EMG Sensor값 읽기
아두이노로 EMG Sensor값 읽어보기
- 0~1023(5V) ->
(val*5/1023-offset)*1000
(mV변환)
1 2 3 4 5 6 7 8 9 10
| void setup() { Serial.begin(9600); }
void loop() { float val = analogRead(A0); val = (val*5/1023)*1000-2420; Serial.println(val); delay(100); }
|
신호 반전
1 2 3 4 5 6 7 8 9 10 11
| void setup() { Serial.begin(9600); }
void loop() { float val = analogRead(A0); val = (val*5/1023)*1000-2420; val = abs(val); Serial.println(val); delay(100); }
|
Serial 통신
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include "stdio.h" #include "Modules/SerialComm.h"
void main() { CSerialComm SerialComm;
if (SerialComm.connect("COM9")) printf("Serial port is connected!!\n"); else printf("Sercial connection fail!!\n");
while (1) { char data[64]; SerialComm.readCommand(data); int i = 0; while (1) { printf("%c", data[i]); if (data[i] == '\n') break; i++; } } }
|
Low-pass filter
Moving Average function 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #define WinSize 100 float data[WinSize]; int i = 0;
void setup() { Serial.begin(9600); }
void loop() { int a = 0; float sol = 0; float val = analogRead(A0); val = (val*5/1023)*1000-2420; val = abs(val); a = i % WinSize; data[a] = val; if(i > WinSize ){ for(int j = 0; j < WinSize ; j++){ sol = sol + data[j] / WinSize; } } Serial.println(sol); delay(10); i++; }
|