BoatLock: умный якорь, который я делаю сам

Давно хотел написать про этот проект, чтобы собрать мысли и показать прогресс.
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.
  • Доработать интерфейс приложения (быстрая смена точки,
    управление мотором вручную).
  • Возможно, напечатать новый корпус, если в лодке
    окажется неудобно монтировать текущий вариант.

Зачем я всё это делаю

Во-первых, просто интересно — совмещает электронику, механику и код.
Во-вторых, это реально полезная штука: не надо якоря,
лодка сама держит позицию и курс.

Дальше планирую выкладывать обновления по мере тестов на воде.
Интересно будет посмотреть, насколько близко получится держать точку
и как поведёт себя система на течении.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *