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 | 05 июля 2022

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

В данном обзоре мы подробно расскажем как использовать библиотеку Elemyo для Arduino IDE: установка, чтение и обработка ЭМГ/ЭКГ сигналов, примеры фильтрации и визуализации сигналов, примеры использования ЭМГ сигналов для управления (например, серводвигателем).



Перед началом работы настоятельно рекомендуем ознакомиться с подробной инструкцией к используемому Вами датчику. Актуальную инструкции можно скачать здесь.
Библиотека предназначена для работы со всей линейкой датчиков, кроме MYOstack и MYOblue.
БИБЛИОТЕКА ДЛЯ ARDUINO IDE:
перейти по ссылке
Содержание обзора:
1
Установка библиотеки
Перейти в раздел
2
Функционал библиотеки
Перейти в раздел
4
5
Servo_Motion_Control.ino
Перейти в раздел
6
Servo_Discrete_Control.ino
Перейти в раздел
8
1. Установка библиотеки
Установите последнюю версию Arduino IDE (ссылка)
Скачайте библиотеку с официальной страницы Elemyo на GitHub по ссылке: https://github.com/ELEMYO/Elemyo-library. Для скачивания щелкните на меню «Code» (зелёного цвета) и выберите «Download ZIP».
Запустите программу Arduino IDE и установите библиотеку. Для этого пройдите в меню «Скетч -> Подключить библиотеку -> Добавить .ZIP библиотеку» и выберите скачанный архив. Дождитесь пока библиотека будет установлена.
Перезапустите Arduino IDE.
Библиотека готова к использованию.
2. Функционал библиотеки
Все датчики Elemyo, за исключением MYOstack и MYOblue, выдают на выходе аналоговый сигнал, для чтения которого не требуется специализированных библиотек, достаточно воспользоваться стандартной функцией analogRead(). Основное назначение библиотеки Elemyo – это обработка сигнала и регулировка коэффициента усиления датчика (зависит от модели датчика). Также в библиотеку интегрированы примеры фильтрации и визуализации сигнала, в том числе управления серводвигателем по ЭМГ сигналам.
Основные функции библиотеки:
Регулировка коэффициента усиления (зависит от модели датчика)
Режекторный фильтр.
ФНЧ
Полосовой фильтр
Огибающая сигнала
3. Terminal.ino
Данный скетч предназначен для работы с датчиком в программе «ELEMYO GUI». Подробное описание работы скетча «TERMINAL.INO» и программы «ELEMYO GUI» доступно здесь.
4. EMG_Simple_Read.ino
Cкетч EMG_Simple_Read.ino предназначен для быстрого знакомства с работой датчика. Скетч позволяет считать сигнал с одного датчика и вывести на экран два графика: оригинальный сигнал и его огибающую.

Подключите датчик к Arduino согласно схеме рис. 1. В разделе «Инструменты» выберите используемую Вами модель Arduino и COM порт. Загрузите скетч на Arduino и запустите плоттер: «Инструменты -> Плоттер по последовательному соединению». В плоттере будет отрисовываться два графика: синий – оригинальный сигнал, красный – огибающая сигнала. На рис. 2 приведен пример работы скетча.
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
Рис. 1: Схема подключения датчика MYO v1.4 к Arduino Uno.
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
Рис. 2: Пример работы скетча EMG_Simple_Read.ino
Если используется датчик с регулируемым усилением, усиление можно задать в строке 57 заменив значение в MyoSensor.gain(х1) на x2, x4, x5, x8, x10, x16, x32.
Коэффициент сглаживания огибающей можно регулировать (строка «int sensorValueMA = MyoSensor.movingAverage(sensorValue, signalReference, 0.8);» ). Изначально коэффициент равен 0.8. Чем больше коэффициент, тем плавнее огибающая. Коэффициент можно менять в диапазоне 0 – 1 (0 – полное повторение сигнала, 1 – отсутствие реакции на изменение сигнала).
5. Servo_Motion_Control.ino
Данный скетч позволяет управлять углом поворота серводвигателя пропорционально силе напряжения мышцы: чем сильнее напряжена мышца, тем больше угол поворота. Принцип управления простой: угол поворота пропорционален значению огибающей ЭМГ сигнала. Данный скетч отличается от скетча «EMG_Simple_Read.ino» только тем, что текущее значение огибающей (рис. 3, красный график) передается в качестве угла поворота для двигателя (строка 74).

Подключите датчик и серводвигатель к Arduino согласно схеме рис. 1. В разделе «Инструменты» выберите используемую Вами модель Arduino и COM порт. Загрузите скетч на Arduino.
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
Рис. 3: Пример работы скетча Servo_Motion_Control.ino
Для корректной работы программы необходима калибровка. Необходимо в строке «int val = map(signalValueMA, 0, 1024, 0, 180)» вместо значения «1024» задать максимальную амплитуду Вашего ЭМГ сигнала. Для этого, после прошивки Arduino, запустите плоттер (Инструменты -> Плоттер по последовательному соединению). Установите датчик на тело (в области мышцы, которую будете напрягать) и максимально напрягите мышцу. Запомните примерное значение красного графика и запишите его в строке «int val = map(signalValueMA, 0, 1024, 0, 180)» вместо значения “1024”. Затем закройте плоттер и прошейте Arduino.

Если используется датчик с регулируемым усилением, усиление можно задать в строке 57 заменив значение в MyoSensor.gain(х2) на x1, x4, x5, x8, x10, x16, x32.
6. Servo_Discrete_Control.ino
Данный скетч позволяет управлять углом дискретно: при однократном коротком напряжении мышцы двигатель поверся на угол 10, при однократном продолжительном напряжении на угол 120.
Подключите датчик и серводвигатель к Arduino согласно схеме рис. 1. В разделе «Инструменты» выберите используемую Вами модель Arduino и COM порт. Загрузите скетч на Arduino.

Калибровка.
7. Filters.ino
В данном скетче приводится пример использования следующих фильтров:
фильтр низких частот,
полосовой фильтр,
 режекторный фильтр.

Подключите датчик к Arduino согласно схеме рис. 1. В разделе «Инструменты» выберите используемую Вами модель Arduino и COM порт. Загрузите скетч на Arduino и запустите плоттер: «Инструменты -> Плоттер по последовательному соединению». В плоттере будет отрисовываться два графика: синий – оригинальный сигнал, красный – сигнал после фильтрации.
Изначально в программе включен режекторный фильтр на 50 Гц. Для включения фильтра нижних частот в строке «Serial.println(bandStopValue);» замените «bandStopValue» на «lowPassValue», для полосового фильтра замените на «bandPassValue» и загрузите скетч.
8. Multiconnection.ino
Данный скетч демонстрирует работу с массивом датчиков. В примере разобрано одновременное подключение 6 датчиков (большее или меньшее число датчиков подключается по аналогии).

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

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

Спасибо за внимание!
Надеемся, что данный обзор на нашу библиотеку Arduino был Вам полезен.

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