From 6d6ac60b41d62bf13550e27f648994e59920def9 Mon Sep 17 00:00:00 2001 From: "lyubishev.a" Date: Tue, 17 Feb 2026 15:35:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20=C2=AB?= =?UTF-8?q?/=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 readme.md diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..bf57baa --- /dev/null +++ b/readme.md @@ -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`
Допустимый диапазон: 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](https://github.com/ElectronicCats/mpu6050) (или аналогичная) +- [BleCompositeHID](https://github.com/esp32beans/BleCompositeHID) (или другая реализация составного HID-устройства) + +Установите их через менеджер библиотек Arduino. + +## Примечания +- Устройство работает как составное HID (клавиатура + мышь). При подключении может потребоваться подтверждение на ПК. +- Для стабильной работы рекомендуется питание от 3.3 В (общий GND с ESP32). +- При первом запуске обязательно дождитесь окончания калибровки (около 1 секунды). Не двигайте датчик в это время. + +## Версия +Последние изменения: улучшена обработка наклона, добавлена защита от «залипания», инверсия осей, точная настройка фильтров. + +--- +Если у вас возникли вопросы или предложения, вы можете доработать параметры под свои нужды, изменяя константы в коде. \ No newline at end of file