Давно хотел написать про этот проект, чтобы собрать мысли и показать прогресс.
BoatLock — это моя попытка сделать виртуальный якорь для лодки. Идея простая:
лодка сама держит точку по GPS и курс по компасу, а я могу спокойно рыбачить,
не доставая якорь каждые 10 минут.
Сейчас это ещё не готовый продукт, а рабочий прототип —
электроника собрана, код написан, экран показывает данные,
привод напечатан на 3D-принтере, но на воду пока не выходил —
реальные тесты только впереди.
Как всё начиналось
Начал с простого: ESP32-S3, GPS-модуль и шаговый мотор NEMA17.
Первые тесты сразу показали, что без фильтрации GPS «скачет» даже на столе —
точка прыгает на 2–4 метра. Добавил медиану и скользящее среднее —
на экране стало стабильнее, но видно, что в реальных условиях
надо будет подбирать параметры фильтра по скорости сноса.
Сенсоры, которые пробовал
Тут было весело.
- ICM-20948 — многообещающий, но калибровка адовая, дрейф огромный.
- HMC5883L — дёшево, но шумный, курс плавал, пришлось отказаться.
- BNO085 — заказал, но приехала подделка, прошивка кривая,
калибровка не проходила, данные хаотичные. - BNO055 — сейчас основной вариант. Простая калибровка,
стабильные данные, встроенные фильтры, работает «из коробки».
GPS тоже пришлось подобрать — Neo-6M оказался медленным,
взял u-blox с 5 Гц обновления, теперь координаты приходят быстро,
реакция будет адекватной.
Механика
Сначала хотел ставить ремень GT2, но он тянется и проскальзывает.
Сейчас стоит жёсткая зубчатая передача, напечатанная из PETG.
Корпус, крепления, даже кожух — всё напечатано на моём принтере.
Люфтов почти нет, шаговик держит уверенно.
Программная часть
Код пишу на C++ (PlatformIO). Разделил задачи через FreeRTOS:
- одна таска читает GPS,
- вторая управляет мотором,
- третья отвечает за интерфейс.
Использую PID-регулятор, чтобы мотор поворачивался плавно,
а не дёргался. EEPROM хранит последнюю точку,
чтобы при включении система знала, куда вернуться.
Экран (OLED по I2C) показывает режим, курс, статус GPS,
это удобно при отладке — вижу, что реально происходит.
Часть кода писалась с помощью ChatGPT/Codex —
особенно фильтрация GPS, работа с углами, архитектура задач.
Flutter-приложение
Уже готово базовое приложение для телефона:
- BLE-соединение с ESP32,
- карта с текущей точкой лодки,
- выбор точки удержания,
- просмотр сохранённых маршрутов,
- панель отладки (координаты, курс, состояние мотора).
Это сильно упрощает работу — можно управлять системой прямо с телефона,
а не с кнопок на корпусе.
Что уже есть
- Полностью собранная электроника с экраном.
- Механика напечатана, шаговик крутит как надо.
- Курс по компасу держится стабильно (на столе проверено).
- Flutter-приложение подключается, видит координаты,
можно задавать точки и маршруты.
Что ещё предстоит
- Выйти на воду и проверить, как всё работает в реальных условиях.
- Настроить PID под реальные сносы лодки.
- Добавить логгирование маршрута на microSD и экспорт GPX.
- Доработать интерфейс приложения (быстрая смена точки,
управление мотором вручную). - Возможно, напечатать новый корпус, если в лодке
окажется неудобно монтировать текущий вариант.
Зачем я всё это делаю
Во-первых, просто интересно — совмещает электронику, механику и код.
Во-вторых, это реально полезная штука: не надо якоря,
лодка сама держит позицию и курс.
Дальше планирую выкладывать обновления по мере тестов на воде.
Интересно будет посмотреть, насколько близко получится держать точку
и как поведёт себя система на течении.