Продвинутая автопилотная система для парусной лодки: точное автоматическое рулевание
Компоненты и материалы
- Arduino UNO — основной контроллер
- Arduino Nano — сторожевой таймер (Watchdog)
- GPS-приёмник Beitian BN-220T (2Hz, NMEA $GNRMC)
- Шаговый двигатель 23LM (54 шага = 1/4 оборота) + драйвер Keyes L298
- RF 433 МГц пульт (XD-YK04) + катушка антенны
- 6 тактовых кнопок (2 красн., 2 зелёных, синяя, чёрная)
- LCD1602 2×16 + I2C адаптер (4 провода)
- 3 светодиода (красный, синий, жёлтый)
- EEPROM 24C04 (I2C, 512 байт)
- Мультиплексор 4051 (аналоговые датчики)
- LiPo 2S 7.4В 2600 мАч + стабилизатор 7805 + радиатор
- Термистор NTC MF52-103 (контроль температуры радиатора)
- Шунт 0.22 Ом 2Вт + делители на 10кОм (замер тока)
- Самовосстанавливающийся предохранитель 2А
- Корпус прозрачный «влагозащищённый»
О проекте
Преамбула
Автор — любитель одиночных парусных прогулок. Автопилот позволяет отвлечься на «чай с печеньем», удерживая курс. Не заменяет моряка — ассистирует.
Что делает автопилот
Парусник не имеет двигателя для точечного следования маршруту. Автопилот удерживает курс (Heading), руляя рулём через шаговый двигатель. Моряк задаёт курс, автопилот корректирует отклонения от ветра, волн, течений, перемещения веса на борту.
Управление: 4 кнопки на пульте и на корпусе — +1, -1, +10, -10 градусов. Синяя кнопка — пауза/старт. Чёрная — вход в меню настроек (сохранение в EEPROM).
Архитектура схемы
- Arduino Uno — основной мозг: GPS, шаговый двигатель, дисплей, кнопки, EEPROM, датчики.
- Arduino Nano — внешний Watchdog. Uno должен переключать пин 3→A0 Nano каждые 2.5 сек. Если нет — Nano сбрасывает Uno (RST). Ещё не срабатывало ни разу.
- Дисплей LCD1602 + I2C — экономит пины.
- Кнопки и RF-пульт — через резистивные делители на 1 аналоговый вход (1% резисторы). При смене резисторов — скорректируйте константы в
checkHWButtons()иcheckRfRC(). - GPS BN-220T → TX к RX (D0) Uno. Настроен на 2Hz, только $GNRMC. При прошивке Uno — отключайте GPS от D0!
- EEPROM 24C04 — хранение параметров PID-подобного рулевания.
- Датчики через 4051: термистор (температура 7805), шунт (ток), делитель (напряжение LiPo). При U<7.0В — пискер. При T>50°C — пискер.
- Индикация: жёлтый мигает 1Гц (Watchdog жив), синий — автопилот активен, красный мигает при нажатии пульта.
Печатные платы и сборка
- Однослойные PCB с перемычками. Файлы для ЛУТ (лазерная печать на глянцевой бумаге, утюг).
- Платы стыкуются как шилды на Uno: снизу — Power, сверху — Autopilot.
- Всё соединено через разъёмы (Dupont) — для ремонтопригодности. Рекомендация: припять всё для надежности.
Настройка параметров (через чёрную кнопку)
Меню на дисплей (6 экранов):
- Датчики: Vбат, мА, °C.
- Interval (мс, 1000–5000, шаг 100) — период попыток коррекции курса.
- Minimum (°, 0–20, шаг 1) — мёртвая зона: меньше угла → руль на месте.
- Max (°, 10–45, шаг 1) — макс. поворот руля за один цикл.
- Coefficient (x°, 0.1–4.0, шаг 0.1) — множитель: руль поворачивается на (ошибка × коэф.).
- Сохранение в EEPROM («Updating...»).
Подбор параметров — на воде, в солнечный безветренный день. Зависят от диаметров блоков, длины рулевой палки, чувствительности руля.
Работа «вживую»
- В море/озере. Включаете автопилот — ждёте GPS фикс.
- На дисплее: скорость (узлы), время, курс R=заданный, H=текущий (0°=С, 90°=В, 180°=Ю, 270°=З).
- Соединяете шнур шагового двигателя с рулевой палкой (пули блокируют на резинках).
- Нажимаете синюю кнопку — автопилот захватывает руль. H начинает сходиться с R.
- Корректируете курс пультом/кнопками. Для возврата ручного управления — пауза + отсоедините шнур.
Программная часть
- Скетч ~65% флеш, ~45% RAM. Использует
Stringдля парсинга NMEA, но стабилен. serialEvent()принимает GPS 2Hz →nmeaExtractData()→ проверка CRC (nmea0183_checksum).- Пример NMEA:
$GPRMC,095836.000,A,4551.9676,N,01328.7118,E,2.09,341.84,280519,,*08 - EEPROM: байты 0–1 = ID (0x29, 0x00), 2–3 interval, 4–5 min, 6–7 max, 8–11 coeff (float).
- Датчики опрашиваются каждые 10 сек через 4051.
- Кнопки и дисплей — в зависимости от флага
isSetup. - Рулевание: функция
gomotor()двигает шаговый туда-обратно каждыеStearingIntervalмс. - Watchdog: просто переключает пин 3 высоко/низко максимально часто.
Установка на лодку
Автопилот и шаговый — на корме, на болтах. Шнур 6мм от главной шкива двигателя идёт через два блока по бокам (на банджи-резинках для натяжения). К рулевой палке — временное крепление (легко снять).
Новости и обновления
- 10.05.2020: добавлены .STEP файлы 3D-моделей шкива шагового (автор) и крепёжной пластины (Andrew Barney).
Дисклеймер
Это игра/хобби-проект, НЕ сертифицированное мореходное оборудование. Реальный автопилот — это серьезное железо и ПО, которому доверяют жизнь. Этот проект — для удовольствия и обучения. Пользуйтесь на свой страх и риск!
Marco Zonca
Исходный код
Скетч автопилота (Arduino Uno)
/* Autopilot for small sailing boats, Marco Zonca 2019
* Uno CPU, Nano watchdog, GPS BT-220 NMEA, Stepper+L298, RF433, 6 btns, buzzer, I2C LCD, 3 LED, 24C04 EEPROM, 4051 Mux, LiPo 2S, 7805, Thermistor */
#include <LiquidCrystal_I2C.h>
#include <NewTone.h>
#include <Stepper.h>
#include <Wire.h>
// ... (полный код см. в оригинале или GitHub)
// Основные функции: serialEvent, nmeaExtractData, nmea0183_checksum,
// readMuxSensors, gomotor, RefreshDisplay, checkRfRC, checkHWButtons,
// goleft/goright/goleft10/goright10/gopause/gosetup/goupdateEEPROM,
// EEPROM read/write, watchdog feeding, PID-like steering logic.
Скетч Watchdog (Arduino Nano)
/* Watchdog для Arduino Nano 3.0, Marco Zonca */
const int feedingPin = 14; // A0
const int ledPin = 15; // A1
const int restartPin = 16; // A2
const int buzzerPin = 17; // A3
const long ledInterval = 1000;
const long feedingInterval = 2500;
const long timeForClientStart = 16000;
// ... loop: мигает LED, проверяет feedingPin, если нет активности >2.5с — рестарт Uno через restartPin (LOW)
3D-модели (STEP)
- 23lm-stepper-plate-v2.step — крепёжная пластина
- 23lm-stepper-pulley-56.step — шкив шагового двигателя
Схемы (Eagle/изображения)
Производственный процесс
- Построение DIY инфракрасного датчика движения для Raspberry Pi — пошаговое руководство
- Проектирование баллистической парашютной системы восстановления для БПЛА
- Подходит ли непрерывный мониторинг для ваших операций?
- ATI Industrial Automation: лидирующие автоматические сменщики инструментов для промышленных роботов
- Готово ли ваше производство к IoT? Практическое руководство
- Точные полигональные резаки для автоматов: регулируемые высокопроизводительные решения
- R07 Cincom: CNC-токарный станок с точностью 7 мм для мелких деталей
- Революционная гиперзвуковая пропульсивная система обеспечивает трансконтинентальные перелеты менее чем за…
- Принцип работы механической и автоматической коробки передач
- Автоматическая коробка передач: полное руководство — виды, узлы, принцип работы