
Полгода прошло с первой статьи https://habr.com/ru/articles/969230/ , вариометр летает и сигнализирует о наборе высоты и о потере высоты, пилоты довольны. Код сыроват конечно. EMA фильтр стоит, линейная архитектура стоит, записи высот в полете нет и экспорта нет. Как-то работает. Но можно качественнее сделать. А вот когда лень переписывать с нуля, знакомая херня? Но решился.
Развернул Hermes Agent, закинул на аккаунт DeepSeek4 40 юаней, это 430 рублей, и начал диалог в терминал. Работал в диалоге с консолькой, ну просто магия. Без промптов. "Сделай FSM(конечные автоматы) вместо ифов, добавь зуммер в стиле Браунигер, компенсацию акселерометра по трём осям с учётом гравитации, а не по модулю, трек полёта на флешпамять кольцевым буфером с CRC, WiFi экспорт через вебморду."

Агент сам зашел на старый репо - сделал себе форк на винт, скачал себе среду разработки, все проверил, все скомпилировал, и запушил форк в репозиторий на гитхаб.
И вот началось: ИИ задавал вопросы и вопросы эти не про цвет кнопок. А я испытал экзистенциальный ужас общения со сверхинтелектом, помните чемпиона го с Альфаго когда реакция «это что за ход»? Вот тут то же самое.

Какую задержку комплементарного фильтра ставить? Ноль целых пять сотых - это быстро и шумно. Восемь секунд гладко, но задержка. Компромисс? Три. CRC16 на запись или CRC32 на блок? На секторе или рекорде? Как посадку определять по скорости изменения высоты или с акселерометром? А если в турбулентности данные с акселерометра это шум? Ты подумай, акселерометр в болтанке выдаёт мусор.
Шесть часов. Код не писался, принимались решения, а ИИ реализовывал. За ночь сделано то, что пилилось бы три недели. А агент сожрал через дипсика токенов на 300 рублей.
Код вырос до почти 2000 строк. Фильтр стал комплементарным с гравитацией и барометром. Архитектура стала конечным автоматом. Появился звук по просьбам пилотов, трекер в кольцевой буфер с CRC16 на каждый маркер высоты, WiFi экспорт через точку доступа с HTTP сервером отдающим CSV. Чувствительность от нуля до девяти, ватчдог на два ядра, самопроверка.
Я отдал втихаря код опытному инженеру на ревью. Со словами - просто посмотри. Вердикт -Senior Embedded Avionics рейтинг 8.75 из 10, немного до идеала не дотянул, есть что поправить, пусть еще недельку поковыряет. Не ардуинщик, а профи. Дисциплина кода, ноль статиков, constexpr. Защита WDT, CRC, self test, умный сон. Зоны роста есть, пять I2C без проверки, документация отстаёт, гонка при старте. Но сам факт - senior выдаёт 100-200 строк в день. Тут 2000 за 6 часов. А автор в роли архитектора проектов написал ноль строк.
З0 юаней купили три недели жизни. Остаётся непонятно, как к этому относиться. С одной стороны крутой продукт за копейки. С другой экспертиза кодера уровня синьора теперь стоит 300 рублей и 6 часов. Экспертиза архитектора дорогая. Но надолго ли? Ответ очевиден, признавать никто не хочет.
А это на скрине затраты на токены - прожорливый агент, однако, 300 млн токенов потратил. Можете прикинуть, что будет по деньгам в других моделях.

Отличия от родительского проекта:
Область | VibroVario (оригинал) | VibroVarioAuto v1.6 (форк) |
|---|---|---|
Версия | 1.1 (EMA filter) | 1.6 (FSM + трекер + WiFi) |
Строк кода | ~549 | ~2000 |
Звук | Только вибро | Вибро + баззер Brauniger-style |
Фильтр | EMA (простое сглаживание высоты) | Комплементарный: gravity-vector из акселерометра + барo |
Архитектура | Линейный код | Конечный автомат (6 состояний: CLOCK, SETTINGS, CALIBRATING, RUNNING, STOPPED, WEB_EXPORT) |
Диспетчер |
|
|
Скрытые состояния |
| Все состояния в |
Кнопки | BACK/SELECT/RIGHT (GPIO 26/35/4) | UP/OK/DOWN (GPIO 25/4/35) — любая будит |
Пробуждение | Только UP (GPIO 25) | UP, OK, DOWN — любая кнопка |
Настройки | Нет | Экран Settings: Buzzer ON/OFF, Vibro ON/OFF, время, высота места |
Настройки через web | Нет |
|
Самодиагностика | Нет | SELF-TEST при пробуждении (кнопки, датчики, батарея) |
Обнаружение отказа BMP | Нет — тихо замирает | SENSOR FAIL на экране полёта |
Акселерометр | Проверка магнитуды | Chip ID верификация (0x11), fallback при отказе |
Управление задачей |
|
|
init дисплея | Всегда полный | Пропускается при RTC alarm wake (экономия 200 мс) |
Сон | Фиксированный (всегда 60 с или 24ч) | Умный: счётчик motionTime, 15 мин без движения → 24ч |
Сторожевой таймер | Нет | WDT 10 сек на обоих ядрах — защита от зависания I2C |
Запись трека | Нет | Кольцевой буфер на flash 1.5MB: номер полёта, время, высота (1 Гц) |
Экспорт трека | Нет | WiFi AP + HTTP-сервер: CSV всех/одного полёта, таймаут 15 мин |
Конфиги |
|
|
Комментарии | Русские | Английские (100%) |
Чувствительность | Фиксированная | Настраиваемая 0-9 (комплементарный фильтр) |
Трекер | Нет | Кольцевой буфер с датой/временем/высотой в каждой записи |
Новый форк проекта целиком сделан агентом, ни одной команды на срр не было введено, только наш православный и могучий, с редкими вставками англицизмов ссылка на работу агента: https://github.com/advogr2022-max/VibroVario
P.S. Пост не реклама, все за свои кровные. По коду не увидел смысла разбивать монолит на большое число модулей, хотя агент предлагал. Проект позиционируется как хоббийный на 1 выходной день, и не должен требовать сложной настройки программной среды даже у школьников. А что у вас из ембедд проектов получилось полностью сбросить на агентов?