By using this website, you agree to the use of cookies. We use them to optimize functionality and convenience of the site for our clients.
Click to order
Elemyo | 22 Февраля 2020

Обзор библиотеки Elemyo-library для Arduino.

В этой статье мы рассмотрим примеры скетчей на Arduino для обработки сигналов, получаемых с датчиков Elemyo.
Библиотеку Elemyo для работы с Arduino можно найти здесь.

Перед началом работы настоятельно советуем ознакомиться с подробной инструкцией к тому датчику, который Вы используете. Например, MYO v1.0, MYO v1.2, MYO v1.3 или MYO-kit v1.1.
Библиотека для Arduino:
перейти по ссылке
Содержание обзора:

1
TERMINAL
Данный пример предназначен для прошивки Arduino с целью визуализации и обработки сигнала в Python и MatLab. Достаточно скомпилировать данный пример и прошить Arduino, затем запустить скетч на Python (скачать пример) или MatLab (скачать пример).

Пример совместим со всей линейкой датчиков. На рис. 1 приведена используемая в примере схема подключения модуля MYO v1.0 к Arduino Uno. Подключение других датчиков происходит аналогичным образом. (В инструкции к каждому датчику есть схема подключения к микроконтроллеру. Datasheet-библиотеку вы найдете здесь.)
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
Рис. 1: Схема подключения датчика MYO v1.0 (MYO v1.2) к Arduino Uno.

2
EMG_SIMPLE_READ
Данный пример реализует самую простую функцию: считывание показаний датчика на аналоговом входе A0 и запись сигнала в Serial. Если используется датчик с регулируемым усилением, усиление можно задать посредством команды MyoSensor.gain(value), где в качестве аргумента «value» используется одно из следующий значений усиления: «x1», «x2», «x4», «x5», «x8», «x10», «x16», «x32».

Схема подключения аналогична Рис. 1.

3
MULTICONNECTION
Данный пример демонстрирует работу с массивом датчиков. В примере разобрано одновременное подключение 6 датчиков (большее или меньшее число датчиков подключается по аналогии).

Датчики подключаются согласно Рис. 2.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 2: Схема подключения 6 датчиков к Arduino Uno.
Управление коэффициентом усиления датчиков происходит посредством SPI. Если планируется управлять усилением каждого датчика по отдельности, то выводы CS каждого датчика должны быть подключены к отдельным пинам Arduino (можно как к ШИМ, так и digital). Если планируется задавать одинаковый коэффициент усиления всем датчикам, то выводы CS каждого датчика можно подключить к одному общему пину Arduino (можно как к ШИМ, так и digital). Выводы SCLK подключаются к пину 13, выводы SI к пину 11.

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

4
EMG_Moving_Average
Данный пример демонстрирует один из методов сглаживания сигнала. В качестве метода сглаживания взят метод экспоненциального скользящего среднего произвольного порядка. Информация о методе скользящего среднего и методе экспоненциального скользящего среднего произвольного порядка доступна здесь.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 3: На графике приведен пример сглаживания сигнала.
Суть метода:
Пусть у нас имеется некоторая функция f(t) (сигнал), меняющая свое значение с течением времени (например, температура, давление, ЭМГ и т.д.). Перед нами стоит задача выделения в режиме реального времени основных тенденций поведения функции на фоне краткосрочных колебаний. Для этого нам необходимо провести усреднение значений функции. Одним из способов такого усреднения является метод экспоненциального скользящего среднего произвольного порядка. Идея метода состоит в том, что каждое новое усредненное значение получается на основе текущего и предыдущих значений функции. Строится метод следующим образом:

EMAtn = a* EMAtn-1 + (1 - a)* EMAt-1n,

где EMAtn – значение экспоненциального скользящего среднего n-го порядка в текущий момент времени t. EMAt-1n – предыдущее значение экспоненциального скользящего среднего n-го порядка. EMAtn-1 – текущее значение экспоненциального скользящего среднего (n-1)-го порядка. а - сглаживающий коэффициент.

В качестве примера рассмотрим, как происходит сглаживание сигнала методом экспоненциального скользящего среднего 3-го порядка:

Вначале вычисляем значение экспоненциального скользящего среднего первого порядка.

EMAt = a*f(t) + (1 - a)*EMA(t-1), где EMAt – экспоненциальное скользящее среднее первого порядка. f(t) – значение функции в текущий момент времени, EMA(t-1) – значение экспоненциального скользящего среднего первого порядка, вычисленное на предыдущем временном отрезке.

Затем второго порядка:

DMAt = a*EMAt + (1 - a)*DMA(t-1), где DMAt – экспоненциальное скользящее среднее второго порядка.

Затем третьего порядка:

TMAt = a*DMA t + (1 - a)*TMA(t-1) – экспоненциальное скользящее среднее третьего порядка.

Начальные значения EMA0, DMA0, TMA0 можно задать равными f(0).

Реализация метода:
Если в качестве функции взять напрямую ЭМГ сигнал, то результатом сглаживания будет прямая, так как ЭМГ сигнал симметричен относительно опорного напряжения. Если ЭМГ сигнал выпрямить по отношению к опорному напряжению (рис. 4), то кривая сглаживания будет проходить между пиковыми значениями и значением опорного напряжения, при этом амплитуда сглаженного сигнала будет составлять ¼ амплитуды сигнала (рис. 5-7).
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 4: На графике приведен пример сглаживания сигнала.
Программа работает следующим образом: считывает показания с аналогового входа А0 Arduino, если значение меньше значения опорного напряжения, то показание датчика симметрично «перебрасывается» относительно значения опорного напряжения (рис. 4). Далее происходит расчет EMAtn. В программе реализован EMAt3, но при необходимости его можно заменить на любой другой порядок.

Пример работы алгоритма приведен на рис. 5-7.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 5: Три коротких мышечных сокращения.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 6: Постепенное сокращение мышцы с последующим расслаблением.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 7: Быстрое напряжение мышцы с последующим расслаблением.
Регулировать «глубину» сглаживания можно при помощи коэффициента a. Чем a ближе к 1, тем средняя кривая менее чувствительна к изменениям сигнала.

Если регистрируемый ЭМГ сигнал окажется маленьким по амплитуде, то задайте повышающий коэффициент усиления при помощи функции MyoSensor.gain(value), где в качестве аргумента «value» используется одно из следующий значений усиления: «x1», «x2», «x4», «x5», «x8», «x10», «x16», «x32».

5
CONTROLL_BY_EMG
Данный пример демонстрирует, как при помощи ЭМГ сигнала можно задать две управляющие команды. Программа работает следующим образом: если мышца напряжена в течение 1 секунды или меньше, то программа выдаст на экране значение «Type 1», если больше секунды, то значение «Type 2». Данная программа может быть использована как самый простой способ управления роботизированной рукой, двигателем или просто светодиодом. Например: если мы напряжем руку менее чем на 1 с, то робо-рука сделает захват типа "кулак", если более чем на 1 с, то робо-рука сделает "щипковый" захват. В случае со светодиодом: при коротком напряжении руки светодиод моргнёт 1 раз, в случае продолжительного напряжения руки, светодиод моргнёт дважды.

Программа постоянно следит за величиной амплитуды регистрируемого сигнала. Как только значение амплитуды становится больше некоторого заданного порога thresholdStart, программа понимает, что мышца напряжена и начинает отсчет времени (EMG_TimeStart). Как только амплитуда ЭМГ сигнала становится меньше порогового значения thresholdEnd, программа фиксирует, что мышца больше не напряжена, и вычисляет промежуток времени EMG_Time, в течение которого фиксировалось ЭМГ. В зависимости от величины EMG_Time, на экран выводится значение "Type 1" или "Type 1".

Для правильной работы программы важно правильно задать параметры thresholdStart и thresholdEnd, которые индивидуальны для каждого пользователя. Для этого вначале запустите разобранный выше пример "Terminal" и выведите на экран ЭМГ сигнал. thresholdStart задайте как половину значения максимальной амплитуды, thresholdEnd как удвоенное значение величины помехи при отсутствии ЭМГ сигнала. Если регистрируемый ЭМГ сигнал окажется маленьким по амплитуде, то задаём повышающий коэффициент усиления при помощи функции MyoSensor.gain(value), где в качестве аргумента «value» используется одно из следующий значений усиления: «x1», «x2», «x4», «x5», «x8», «x10», «x16», «x32».
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Спасибо за внимание!
Надеемся, что данный обзор на нашу библиотеку Arduino был Вам полезен.

Если у Вас остались какие-либо вопросы - пишите нам на почту info@elemyo.com.
Мы обязательно Вам ответим!
Последнее обновление:
22 ФЕВРАЛЯ / 2020
Автор обзора: Elemyo