Распознавание жестов с ESP32 и акселерометром Arduino 101: простое DIY-руководство
Компоненты и материалы
| Arduino 101 | Встроенный акселерометр, доп. компоненты не нужны | ×1 |
| Arduino UNO | Можно использовать вместо 101, но нужен внешний акселерометр | ×1 |
| Аналоговый акселерометр ADXL335 (Adafruit или SparkFun) | Для Arduino, отличных от 101 | ×1 |
О проекте
Обзор
Учебник по добавлению базового распознавания жестов в Arduino-проекты с помощью системы ESP. Примеры: теннисные удары (форхенд, бэкхенд, подача), танцевальные движения, упражнения с весами. Жесты фиксируются акселерометром, данные отправляют в приложение ESP на компьютере. ESP использует простой алгоритм машинного обучения (Dynamic Time Warping) для сопоставления живых данных с записанными образцами. Система распознаёт отдельные дискретные жесты, не оценивая качество исполнения.
Скачать ESP Gesture Recognition:
- Mac:
ESP-Gestures-Mac-20161028.zip - Windows:
ESP-Gestures-Win-20161028.zip(нужен Visual C++ Redistributable Update 3) - Ubuntu:
ESP-Gestures-Ubuntu-20161028.tar.gz - Пример жестов:
ForehandBackhandServe.grt
Шаг 1. Подключение акселерометра
Если используете Arduino 101 — пропустите шаг. Иначе припаяйте 핀-хедеры к breakout-плате и подключите к Arduino. Можно вставить прямо в аналоговые входы (питание и землю настраиваются в коде) или через макетную плату к 5V, GND и трём аналоговым входам (X, Y, Z).

Шаг 2. Загрузка Arduino-кода
Выберите подходящий скетч (для ADXL335 или Arduino 101), проверьте соответствие пинов, загрузите.
Шаг 3. Проверка данных в Serial Monitor
Откройте Serial Monitor на 9600 бод — должны быть три колонки чисел, меняющихся при движении. Используйте Serial Plotter для графика. Закройте монитор перед запуском ESP.
Шаг 4. Запуск ESP и выбор COM-порта
В меню конфигурации выберите порт Arduino. Появятся живые графики трёх осей (красный — X, зелёный — Y, синий — Z).


Шаг 5. Запись калибровочных образцов
Положите акселерометр на ровную поверхность, Z вверх. Зажмите клавишу «1» на секунду — запишется образец «Upright». Переверните вверх дном, зажмите «2» — образец «Upside down». ESP определит 0g по X/Y и 1g по Z.

Шаг 6. Запись примеров жестов
Перейдите на вкладку «Training» (клавиша T). Можно записать до 9 жестов. Делайте жест, удерживая клавишу с нужным номером (1–9). Записывайте только фазу движения, без возврата руки в исходную позицию. Хороший образец начинается и заканчивается короткими плато. Рекомендуется 5–10 образцов на жест; качество важнее количества.



Плохие образцы можно удалить (delete), обрезать (trim) или переназначить (re-label). Переименовать класс — кнопка rename.

Шаг 7. Обучение системы
Нажмите «t» для обучения. Появится «training successful». Теперь при выполнении похожего жеста его имя появится на графике живых данных.

Если система не срабатывает — добавьте образцы. Если ложные срабатывания — удалите плохие образцы или уменьшите параметр variability. После изменений нажмите «t» снова.
Шаг 8. Настройка параметров
В конфигурации (click to open configuration) два параметра: variability (допустимое отличие от образца) и timeout (мс паузы перед следующим распознаванием). После изменения — переобучите («t»).
Шаг 9. Интеграция в Arduino-проект
При распознавании ESP шлёт в Arduino номер жеста (ASCII + newline, например «1\n»). Читая последовательный порт, Arduino может реагировать. Также данные идут по TCP на localhost:5204 (для Processing и др.).
Как это работает
Алгоритм Dynamic Time Warping (DTW) деформирует живой сигнал (удаляет/дублирует отсчёты), создаёт вариации и ищет ближайший обучающий образец. Если расстояние ниже порога — предсказание выдаётся. Порог настраивается параметром variability.
ESP основан на Gesture Recognition Toolkit (GRT) — наборе алгоритмов ML для реального времени. Существуют примеры для цвета, позы, аудио. Подробнее на GitHub ESP.
Код
Arduino ADXL335 Code
Читает ADXL335: X -> A5, Y -> A4, Z -> A3. Отправляет табуляцию-разделенные строки на 9600 бод.
Arduino 101 Accelerometer Code
Читает встроенный акселерометр Arduino 101. Отправляет табуляцию-разделенные строки на 9600 бод.
Производственный процесс
- Надежная система учета рабочего времени на Arduino с RFID и Python
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
- Точное измерение частоты и коэффициента заполнения на Arduino UNO
- Управление Arduino-роботом через Firmata и геймпад Xbox One
- Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
- Бесшовное управление яркостью светодиодов с помощью Bolt IoT и Arduino UNO
- Умная робо-рука на Arduino: простое DIY-руководство
- Цифровой компас в реальном времени на Arduino и Processing