Полгода прошло с первой статьи 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 выходной день, и не должен требовать сложной настройки программной среды даже у школьников. А что у вас из ембедд проектов получилось полностью сбросить на агентов?
Автор: gliderman


