Загрузить файлы в «/»
This commit is contained in:
81
readme.md
Normal file
81
readme.md
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# 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 секунды). Не двигайте датчик в это время.
|
||||||
|
|
||||||
|
## Версия
|
||||||
|
Последние изменения: улучшена обработка наклона, добавлена защита от «залипания», инверсия осей, точная настройка фильтров.
|
||||||
|
|
||||||
|
---
|
||||||
|
Если у вас возникли вопросы или предложения, вы можете доработать параметры под свои нужды, изменяя константы в коде.
|
||||||
Reference in New Issue
Block a user