8.0 KiB
README: BLE Mouse/Keyboard on MPU6050 (fire_extinguisher_1)
Описание проекта
Этот скетч превращает ESP32 (или другую плату с BLE) в беспроводную мышь и клавиатуру, управляемую движением головы. Датчик MPU6050 (гироскоп + акселерометр) отслеживает повороты и наклоны, преобразуя их в перемещение курсора. Две кнопки позволяют имитировать клик мыши и ставить движение на паузу. Устройство подключается к компьютеру или смартфону как BLE-устройство с именем fire_extinguisher_1.
Подключение компонентов
| Компонент | Пин ESP32 | Примечание |
|---|---|---|
| MPU6050 (SDA) | 21 | I²C |
| MPU6050 (SCL) | 22 | I²C |
| Кнопка основная | 4 | Нажатие на массу (GND) |
| Кнопка паузы | 5 | Нажатие на массу (GND) |
| Светодиод | 2 | Анод через резистор ~220 Ом |
Внимание: кнопки подключаются с использованием внутреннего подтягивающего резистора (INPUT_PULLUP), поэтому второй контакт кнопки должен идти на GND.
Принцип работы
- Калибровка – при старте автоматически собираются 250 отсчётов с гироскопа и акселерометра для определения нулевых смещений. После успешной калибровки светодиод загорается постоянно (при подключении BLE).
- Расчёт углов:
- Yaw (поворот головы влево-вправо) – интегрируется сигнал с гироскопа по оси Z.
- Pitch (наклон вперёд-назад) – вычисляется из акселерометра по оси X с использованием арксинуса. Применяется фильтр низких частот и механизм сброса в ноль при возвращении в нейтральное положение.
- Преобразование в движение мыши:
- Изменение углов за короткий промежуток времени умножается на коэффициенты скорости (
YAW_SPEED_GAIN,PITCH_SPEED_GAIN), масштабируется и преобразуется в пиксели. - Оси инвертированы: поворот влево → курсор вправо, наклон вперёд → курсор вверх.
- Применяется экспоненциальное сглаживание и мёртвая зона для подавления дрожания.
- Изменение углов за короткий промежуток времени умножается на коэффициенты скорости (
- Кнопки:
- Основная кнопка (пин 4) – при нажатии: зажимается левая кнопка мыши и отправляется нажатие клавиши
1на клавиатуре. При отпускании – левая кнопка мыши отпускается. - Кнопка паузы (пин 5) – однократное нажатие временно замораживает движение мыши (повторное нажатие возобновляет). Состояние отображается в Serial Monitor.
- Основная кнопка (пин 4) – при нажатии: зажимается левая кнопка мыши и отправляется нажатие клавиши
- Индикация:
- Светодиод мигает с периодом 500 мс, пока BLE не подключено.
- После подключения горит постоянно.
- При калибровке светодиод гаснет на время сбора данных.
Управление через Serial (скорость 115200 бод)
Во время работы можно отправлять команды для настройки параметров:
| Команда | Описание |
|---|---|
y<значение> |
Установить множитель скорости по горизонтали (YAW). Пример: y1.4Допустимый диапазон: 0.5 … 3.0 |
p<значение> |
Установить множитель скорости по вертикали (PITCH). Пример: p1.6Допустимый диапазон: 0.5 … 3.0 |
cal |
Запустить калибровку заново |
reset |
Сбросить все углы и фильтры в ноль (полезно при смещении нуля) |
Примечание: команды вводятся без пробелов и завершаются переводом строки.
Редактируемые параметры в коде
В начале скетча можно изменить следующие константы:
YAW_SPEED_GAIN– множитель скорости вращения (по умолчанию 1.4)PITCH_SPEED_GAIN– множитель скорости наклона (по умолчанию 1.6)MAX_SPEED– максимальное абсолютное значение перемещения мыши за один отчёт (по умолчанию 50)smoothing– коэффициент экспоненциального сглаживания (0.4 = сильное сглаживание)MIN_MOVEMENT_THRESHOLD– минимальное изменение угла, которое учитывается (по умолчанию 0.8°)PITCH_DEADZONE– мёртвая зона для наклона (1.2°)PITCH_RESET_THRESHOLD– порог сброса наклона в ноль при возвращении (1.0°)CALIB_SAMPLES– количество отсчётов при калибровке (250)
Также можно изменить имя BLE-устройства в строке:
BleCompositeHID compositeHID("fire_extinguisher_1", "Misfit", 100);
Зависимости
Для компиляции необходимы библиотеки:
- MPU6050 (или аналогичная)
- BleCompositeHID (или другая реализация составного HID-устройства)
Установите их через менеджер библиотек Arduino.
Примечания
- Устройство работает как составное HID (клавиатура + мышь). При подключении может потребоваться подтверждение на ПК.
- Для стабильной работы рекомендуется питание от 3.3 В (общий GND с ESP32).
- При первом запуске обязательно дождитесь окончания калибровки (около 1 секунды). Не двигайте датчик в это время.
Версия
Последние изменения: улучшена обработка наклона, добавлена защита от «залипания», инверсия осей, точная настройка фильтров.
Если у вас возникли вопросы или предложения, вы можете доработать параметры под свои нужды, изменяя константы в коде.