Files

81 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.
## Принцип работы
1. **Калибровка** при старте автоматически собираются 250 отсчётов с гироскопа и акселерометра для определения нулевых смещений. После успешной калибровки светодиод загорается постоянно (при подключении BLE).
2. **Расчёт углов**:
- **Yaw (поворот головы влево-вправо)** интегрируется сигнал с гироскопа по оси Z.
- **Pitch (наклон вперёд-назад)** вычисляется из акселерометра по оси X с использованием арксинуса. Применяется фильтр низких частот и механизм сброса в ноль при возвращении в нейтральное положение.
3. **Преобразование в движение мыши**:
- Изменение углов за короткий промежуток времени умножается на коэффициенты скорости (`YAW_SPEED_GAIN`, `PITCH_SPEED_GAIN`), масштабируется и преобразуется в пиксели.
- Оси инвертированы: поворот влево → курсор вправо, наклон вперёд → курсор вверх.
- Применяется экспоненциальное сглаживание и мёртвая зона для подавления дрожания.
4. **Кнопки**:
- **Основная кнопка (пин 4)** при нажатии: зажимается левая кнопка мыши и отправляется нажатие клавиши `1` на клавиатуре. При отпускании левая кнопка мыши отпускается.
- **Кнопка паузы (пин 5)** однократное нажатие временно замораживает движение мыши (повторное нажатие возобновляет). Состояние отображается в Serial Monitor.
5. **Индикация**:
- Светодиод мигает с периодом 500 мс, пока BLE не подключено.
- После подключения горит постоянно.
- При калибровке светодиод гаснет на время сбора данных.
## Управление через Serial (скорость 115200 бод)
Во время работы можно отправлять команды для настройки параметров:
| Команда | Описание |
|---------------|--------------------------------------------------------------------------|
| `y<значение>` | Установить множитель скорости по горизонтали (YAW). Пример: `y1.4`<br>Допустимый диапазон: 0.5 … 3.0 |
| `p<значение>` | Установить множитель скорости по вертикали (PITCH). Пример: `p1.6`<br>Допустимый диапазон: 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](https://github.com/ElectronicCats/mpu6050) (или аналогичная)
- [BleCompositeHID](https://github.com/esp32beans/BleCompositeHID) (или другая реализация составного HID-устройства)
Установите их через менеджер библиотек Arduino.
## Примечания
- Устройство работает как составное HID (клавиатура + мышь). При подключении может потребоваться подтверждение на ПК.
- Для стабильной работы рекомендуется питание от 3.3 В (общий GND с ESP32).
- При первом запуске обязательно дождитесь окончания калибровки (около 1 секунды). Не двигайте датчик в это время.
## Версия
Последние изменения: улучшена обработка наклона, добавлена защита от «залипания», инверсия осей, точная настройка фильтров.
---
Если у вас возникли вопросы или предложения, вы можете доработать параметры под свои нужды, изменяя константы в коде.