Логотип LADA Samara
Логотип LADA
история модели техданные современники фото и видео тюнинг и доработка устройство эксплуатация, ремонт и обслуживание полезные сайты

Электронный спидометр/одометр: программная часть

К списку статей "Тюнинг и доработка"

Это продолжение статей о спидометре. Перейти к оглавлению.

Интерфейс и управление

Основным элементом интерфейса является дисплей разрешением 128*64 px.
Информация выводится в двух режимах. При скорости до 40 км/ч информация выводится в 2 строки. На первой строке: пиктограмма текущего пробега, значение пробега. На второй строке: текущая скорость, общий пробег. При скорости выше 40 км/ч выводится только текущая скорость крупным шрифтом.

Всего есть 6 экранов: пробег с момента включения зажигания, пробег отрезка A-B, пробег отрезка C-D, пробег с последней заправки, пробег до замены масла, пробег до замены топливного фильтра. Некоторые пробеги выводятся с сотнями метров, другие - только в километрах.

.

Управление осуществляется кнопкой. Короткое нажатие кнопки циклически переключает экраны, длинное нажатие сбрасывает пробег текущего экрана. В случае пробегов до замены масла и топливного фильтра пробеги сбрасываются не на нуль, а на заданное число километров до следующей замены.

При включении зажигания загораются оба светодиода, стрелка делает оборот до max, затем до min и становится на 0 км/ч. После чего светодиоды должны погаснуть. Таким образом осуществляется инициализация и контроль. Если красный светодиод остался гореть, это означает, что информация о пробегах не считалась из энергонезависимой памяти и текущие пробеги не будут сохранены. В таком случае следует выключить и включить зажигание повторно.

Если при включении зажигания удерживать кнопку нажатой, на 10 секунд будет выведена информация о версии, дате и времени прошивки, данные разработчика.

Софт

Программное обеспечение создано в IDE Arduino.
В поисках образцов программного кода было перепробовано множество примеров. И всё оказалось непросто: то, что приведено и размножено в интернете как готовые решения, на деле работало некачественно. Это были скорее лабораторно-учебные примеры для изучения принципов, ради "попробовать".
Дважды приходилось менять библиотеки - для управления шаговым двигателем и для подсчета скорости.

Нужно отметить, что спидометр сделать сложнее одометра. Скорость это динамично меняющийся показатель, недостаточно просто наращивать счётчик, нужны быстрые расчеты и корректировки, ещё и обеспечивающие плавные движения стрелки.

Изначально основой расчётов была программа одометра: за каждый короткий промежуток времени вычислялось пройденное расстояние, а из него уже - скорость. Но от этого принципа пришлось уйти, т.к. выяснилось, что этот подход плохо работает в случае стрелочного прибора - из-за особенностей расчета стрелка постоянно дергалась. Удалось найти отличную библиотеку FreqMeasure, основываясь на ней, сделать расчёт скорости на основании частоты, а из неё - пройденного расстояния, стрелка стала двигаться достаточно плавно и стабильно. Благодарность Kevin Gale, отличная программа которого легла в основу спидометра.

Стрелочный спидометр сложнее цифрового: стрелка и управление ей при помощи шагового двигателя оказалось самым проблемным моментом во всей разработке. Есть несколько библиотек для работы с шаговыми двигателями. Изначально была использована библиотека Stepper, которая позже была полностью заменена на SwitecX25. Эта библиотека является неблокирующей в отличии от Stepper. Переход на неё убрал дрейф стрелки, и её колебания стали меньше, хотя и осталась незначительная "ступенчатость" движений.

Проблемным моментом использования шагового двигателя является и то, что в отличии, например, от сервопривода, которому можно передать нужный угол поворота, и привод повернется на заданный угол; шаговые двигатели панели приборов не имеют обратной связи, и их нужно инициировать при каждом включении. Это может делаться, например, избыточным доведением стрелки до гарантированного крайнего положения, а потом передвижением на заданное количество шагов для достижения позиции "нуля". И в процессе управления нужно передвигать стрелку на определённый относительный угол при каждом изменении исходного значения, в частности, скорости. Это принципиальное отличие вносит потенциальную неточность и некоторые проблемы в построении алгоритма.

Ещё нужно отметить, что библиотека управления дисплеем OLED_I2C из-за прерываний не дает точно считать периоды библиотеке FreqMeasure. Надо обязательно отключать прерывания в ней. На форумах пишут, что прерывания там не нужны.

Сохранение пробегов производится в EEPROM после выключения зажигания. Кроме данных о пробегах записывается контрольная сумма, которая проверяется при следующем считывании из EEPROM, обеспечивая корректность данных. После завершения записи формируется сигнал для отключения питания.

Создание иконок и шрифтов

Иконки для дисплея делаются здесь.
Лого сохранялись как PNG-8 с 8 цветами или PNG-8 с 2 цветами без прозрачности. Важна прозрачность, а цвета вроде бы не очень.

Шрифты можно создавать здесь.

Запись начальных данных

Перед началом пользования нужно внести начальные значения пробегов через скрипт starting_values. В этом скрипте нужно указать реальные пробеги, которые будут записаны в EEPROM.

Замечания и прочее

Имеется программное ограничение для стрелки. Можно установить max скорость, выше которой стрелка не будет двигаться, тем не менее цифровая информация на дисплее и подсчёт будут продолжаться.

Прошивать нужно при включенном зажигании, иначе нет питания на МК. Также можно подавать питание через разъем программирования.

Были случаи, когда после прошивки начальных значений, устройство переставало грузиться. Лечится основной прошивкой.

Благодарность также автору отличного одометра за идею, схему управления питанием, часть графики для дисплея.

Далее: конструкция.

Есть вопросы? Напишите, попробую помочь.

Понравилась статья? Поделись с другими!

Рейтинг: 0.0. 10 Голосов: 0
(0) Добавить комментарий!