Используя этот веб-сайт, вы соглашаетесь с использованием файлов cookie. Мы используем их для оптимизации процессов использования сайта его посетителями.
Ок
Close
Click to order
Cart
Ваш заказ
Total: 
Фамилия
Имя
Email
Ваш телефон
Доставка
Точную стоимость доставки уточнит оператор после оформления заказа
Нажимая на эту кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой конфиденциальности.
Content Oriented Web
Make great presentations, longreads, and landing pages, as well as photo stories, blogs, lookbooks, and all other kinds of content oriented projects.

Elemyo | 22 Февраля 2020

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

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

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

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

Пример совместим со всей линейкой датчиков. На рис. 1 приведена используемая в примере схема подключения MYO к Arduino Uno. Подключение других датчиков происходит аналогичным образом.
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
Рис. 1: Схема подключения датчика к 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
Не пропустите новости об акциях и новинках,
получайте первыми полезные материалы!
Подписка
Хочу быть в курсе новостей, акций и полезных материалов Elemyo.com
Нажимая на эту кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой конфиденциальности.