Как организовать миографический контроль (ЭМГ) на модуле AD620

Существует проект MyoWare, который предлагает небольшой блок, способный управлять устройствами при помощи сигнала мышц. Почему бы не использовать модуль AD620 для усиления электрической активности мышц или электромиограмму (ЭМГ)? Получится доступный аналог этой системы.

Как организовать миографический контроль (ЭМГ) на модуле AD620
Изображение из Интернет

Электромиограмма (ЭМГ)

Электромиограмма (ЭМГ) сложный для понимания сигнал. Он образован работой множества мышечных волокон, управляемых мотонейронами, а они в свою очередь – нервной системой. Управление происходит, как увеличением частоты, так и пространственным распределением электрической активности. Поэтому форма ЭМГ может показаться случайным сигналом типа шума, возникающим во время сокращения мышцы.

ЭМГ
Изображение из Интернет

В действительности это не так и каждый импульс идет от своего конкретного источника – мышечного волокна, работающего асинхронно с остальными. Из-за этого диапазон сигнала довольно широкий и достигает 1 кГц.
К счастью, если не ставить цель диагностики нарушений мышечной системы, то можно ограничить диапазон частот до 100..200 Гц, что облегчит работу с ним.

Схема соединений

В первом приближении можно использовать самое простое соединение модулей AD620 и Ардуино, без аппаратных фильтров, как это было описано в статье о настройке AD620 для ЭКГ сигнала. Кстати, это же алгоритм настройки можно применить и в данном случае для ЭМГ.

Как организовать миографический контроль (ЭМГ) на модуле AD620

Алгоритм обработки ЭМГ сигнала

Прежде всего нужно ограничить спектр сигнала, удалив постоянную составляющую при помощи фильтра высоких частот.

ЭМГ


Затем отразить отрицательную часть сигнала при помощи модуля. Останется только найти огибающую полученного сигнала низкочастотным фильтром и управляющий импульс сформирован!

ЭМГ

Программа Ардуино для управления исполнителем (светодиод)

Попробуем организовать управление светодиодом по сигналу ЭМГ мышц предплечья (они приводят в действие кисть руки). Электроды S+ и S- наложены вдоль мышцы, а общий провод GND – отдельно.
Управление ведется встроенным светодиодом на плате Arduino UNO.
При сокращении мышцы светодиод включается, при расслаблении – отключается. Вместо светодиода можно подключить все что угодно и управлять этим!
Программа Ардуино для этого эксперимента:

// Программа для электромиографического управления
// labdata.ru/article/myocontrol_ad620
// (с) LabData.ru

// Объявление внешних подключений
#define analogInPin A0  // Разъем для подключения аналоговой части
#define Ts  10          // Период дискретизации сигнала (мс)
#define led 13          // Разъем для подключения исполнительного устройства
// Объявление переменных
int X = 0;         // Результат измерения
uint32_t ms_old = 0;
const float Klf = 0.1;
const float Khf = 0.9;
float fX = 0;
float fXc = 0;
float K0 = 0;
float K1 = 0;
// итерация ФНЧ
float LPF(float X, float Y, float K){
       return (K*X) + (1-K)*Y;  
}
//итерация ФВЧ
float DCRemover(int X){
     float Y_out = 0;
     K0=X+Khf*K1;
     Y_out=K0-K1;
     K1=K0;
     return Y_out;
}
// Процедура инициализации
void setup() {
  Serial.begin(115200);          // Настройка скорости передачи на ПК (бод)
  pinMode( analogInPin, INPUT );// Настройка входа аналоговой части
  pinMode( led, OUTPUT );        // Настройка выхода управления
  analogReference(INTERNAL);     // Опорное напряжение 1.1 В (для Arduino UNO/Nano)
  ms_old = millis();
}
// Главный цикл работы
void loop() {
  uint32_t ms = millis();
  uint32_t delta = ms-ms_old;
  if (delta >= Ts){
    X = analogRead(analogInPin); // Провести АЦП  
    ms_old = millis();
    fXc = DCRemover(X);  // ФВЧ
    fX = LPF(abs(fXc),fX, Klf); // ФНЧ
    if(fX > 60)  // Здесь можно задать уровень срабатывания
        digitalWrite(13,HIGH);
    else
        digitalWrite(13,LOW);
    Serial.print(fX, DEC); // Отправить результат измерения в ПК
    Serial.println();
  }
}

А вот более сложный пример: управление сервоприводом при помощи ЭМГ.

Как организовать миографический контроль (ЭМГ) на модуле AD620

Причем силой мышечного сокращения можно задать угол наклона вала сервопривода! Можете попробовать сделать нечто подобное самостоятельно. Как работать с сервоприводами описано в соответствующей статье на сайте LabData.ru.

Лучше посмотреть все это в действии на видео:

Ну и в заключении о возможных сложностях:

  1. Электроды могут быть наложены не точно на нужную мышцу и сигнал будет не качественный.
  2. Необходимо продумать надежное крепление электродов, т.к. при мышечном сокращении они стремятся отсоединиться и при повторном сокращении может случиться сбой.
  3. Электродный гель высыхает и со временем может измениться характер сигнала, поэтому уровень срабатывания придется менять.

Но все это решаемо. Если у вас есть интересное предложение по использованию данной технологии – пишите в комментариях!
Подписывайтесь на канал YouTube и в группу ВК обратная связь приветствуется.

(с) Роман Исаков, 2021

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *