За десять лет работы автоэлектриком я столкнулся с сотнями неисправностей, некоторые из них здесь, но самые коварные — те, что не хотят проявляться в гараже. Проблемы с проводкой, подгнившие реле, окислившиеся разъёмы — всё это может дать сбой раз в неделю, а то и раз в месяц. Как поймать момент, когда напряжение с реле пропадает раз в неделю? Как зафиксировать пропадание массы, которое случается только на кочках? Обычный мультиметр бесполезен, осциллограф слишком громоздок для длительного мониторинга в дороге.
Сначала я собрал «костыль» из нескольких плат Arduino, соединённых проводами‑паутинкой. Питание от внешнего аккумулятора, SD‑карта на макетке, куча перемычек — это работало, но было ненадёжно, боялось вибраций и занимало полчемодана. После нескольких провальных выездов (то контакт отвалился, то карта не инициализировалась) я понял: нужен специализированный прибор. Так родился этот проект — компактный даталоггер на STM32F103C8T6, который можно закрепить под капотом и забыть на неделю.
Проект полностью открыт: схемы, исходники, 3D‑модель корпуса — всё доступно на GitHub и GITVERSE. Сегодня я расскажу, как его собрать, настроить и использовать для поиска «плавающих» неисправностей в электрооборудовании автомобиля.
Что умеет даталоггер?
- Запись 4 аналоговых каналов (0–16в, но заменив делители и формулу пересчёта в коде можно сделать любыми).
- Сохранение данных на SD‑карту в формате CSV с временными метками (в миллисекундах от старта).
- Автоматическое создание новых файлов (log001.csv … log999.csv) - не нужно думать о перезаписи.
- Настраиваемый интервал - от 100 мс до нескольких секунд (задаётся через config.txt).
- Светодиодная индикация состояния — сразу видно, работает ли устройство.
- Встроенный просмотрщик на HTML/JavaScript - открывайте логи в браузере, даже без интернета.
Где это может пригодиться?
- Поиск кратковременных пропаданий питания на датчиках (коленвала, ABS, температуры).
- Отслеживание работы реле – фиксация момента срабатывания и падения напряжения на контактах.
- Диагностика цепей зарядки – запись напряжения бортовой сети во время движения.
- Обнаружение «глючных» масс – когда на корпусе появляется блуждающий потенциал.
- Мониторинг нескольких точек одновременно – например, входное и выходное напряжение регулятора.
Аппаратная часть
За основу взят популярный модуль STM32F103C8T6 (Blue Pill) – он дёшев, имеет 12‑битный АЦП и аппаратный SPI. К нему подключается:
- Модуль SD‑карты (SPI‑интерфейс). Внимание: большинство модулей работают от 3,3 В, но есть и 5‑вольтовые – проверяйте.
- Светодиод – встроенный на PB12 (на некоторых платах он подключен к PC13, но в проекте используется PB12).
- Делители напряжения – для защиты входа АЦП и масштабирования сигналов (если измеряете выше 3,3 В).
Схема подключения (пины)
Пин STM32НазначениеPB12LED (индикация)PA4CS для SD‑картыPB13SCK для SD‑картыPB14MISOPB15MOSIPA0Аналоговый вход 0PA1Аналоговый вход 1PA2Аналоговый вход 2PA3Аналоговый вход 3
Подключение к SD‑модулю:
- VCC → 3,3 В (или 5 В, смотря по модулю)
- GND → GND
- CS → PA4
- SCK → PB13
- MOSI → PB15
- MISO → PB14
Все аналоговые входы могут быть дополнительно защищены супрессорами и RC‑фильтрами, если вы подключаете их к цепям с высоким уровнем помех.
Программная часть
Проект написан в PlatformIO (можно открыть и в Arduino IDE) с использованием Arduino‑фреймворка для STM32. Это упрощает работу с SPI, SD‑библиотекой и АЦП.
В репозиториях приведён полный код main.cpp — именно он работает в моём устройстве. Всё прокомментировано для ясности. Нет смысла его копировать сюда.
Как это работает
- Инициализация – настраиваются пины, SPI, проверяется наличие SD‑карты. Если карта есть, создаётся новый файл с инкрементируемым номером, читается config.txt и записывается заголовок CSV.
- Индикация – три коротких вспышки при успехе, быстрый мигающий свет (2 Гц) при ошибке, постоянное горение во время записи, медленное мигание (1 Гц) в режиме ожидания.
- Основной цикл – по таймеру (интервал из конфига) читаются 4 канала АЦП, формируется строка и дописывается в файл. Файл закрывается после каждой записи, чтобы минимизировать потерю данных при внезапном отключении питания.
Настройка интервала логирования
По умолчанию частота опроса – 1 Гц (интервал 1000 мс). Но для диагностики быстрых процессов может потребоваться 10 Гц (100 мс) или, наоборот, для длительного мониторинга – 1 раз в минуту.
Для изменения просто создайте в корне SD‑карты файл config.txt с единственной строкой:
INTERVAL=200
где 200 – интервал в миллисекундах. Если файл отсутствует или строка не найдена, берётся значение по умолчанию.
Формат данных
Файлы logXXX.csv содержат заголовок и строки:
csv
Timestamp(ms),Analog_0,Analog_1,Analog_2,Analog_3
120,1024,512,256,128
1120,1020,510,260,130
...
- Timestamp – время в миллисекундах от старта МК (сброс при включении).
- Analog_0..3 – сырые значения АЦП (0–4095). При необходимости вы можете пересчитать их в напряжение или другие единицы в таблице после выгрузки.
Просмотр данных прямо на карте
На SD‑карте есть папка datalogger cd с тремя файлами (index.html, style.css, script.js). Скопируйте их в корень карты, откройте index.html в любом браузере на компьютере (или даже на смартфоне). Встроенный просмотрщик построит графики по выбранному CSV‑файлу – очень удобно.
Как я собирал свой экземпляр
Первая версия была спаяна на макетке, но для полевых условий я разработал печатную плату размером с кредитку. На ней предусмотрено место для трёхосевого акселерометра ADXL345 (для вибрационного анализа), но в базовой версии он не используется – на плате просто есть посадочное место.
Важный момент: при работе под капотом стоит защитить плату от влаги и грязи – используйте герметичный бокс или нанесите защитный лак на плату.
Результаты испытаний
В первый же выезд прибор помог поймать «умирающее» реле бензонасоса – напряжение на его выходе падало с 12,6 В до 8 В на 20с при каждом третьем включении. Без даталоггера мне пришлось бы менять всё подряд или ездить с осциллографом.
Второй случай – поиск плохой массы на датчике кислорода. Сигнал «плавал» от 0,1 до 0,9 В, хотя должен был быть стабильным. Лог показал синхронные провалы с включением вентилятора охлаждения – проблема оказалась в общем соединении масс.
Что можно улучшить?
- Добавить RTC часы для реального времени (вместо millis).
- Подключить GPS для привязки к координатам.
- Ввести прерывания по таймеру для более точных интервалов.
- Реализовать передачу данных по UART в реальном времени.
Но даже в базовом варианте устройство решает 90% задач автоэлектрика.
Где взять всё необходимое?
- Готовая плата – вы можете заказать производство по файлам из репозитория.
Заключение
Этот проект родился из личной необходимости и превратился в универсальный инструмент, который я использую. Он дёшев, прост в сборке и очень эффективен. Если вы автоэлектрик или просто любите копаться в электронике автомобиля – обязательно попробуйте.
Буду рад ответить на вопросы в комментариях. Удачи на дорогах и стабильного напряжения в цепях!
PS. Если у вас нет возможности спаять плату, можете использовать готовый модуль на STM32 с SD‑картой – достаточно подключить выводы по схеме и залить прошивку. Весь проект заточен на минимальные доработки.