Как сделать точный спидометр
Под катом обещаю много картинок, посредственное видео, код и текст — всё в лучших традициях.
Теория
Идея простая — за фиксированный промежуток времени считаем количество импульсов от датчика скорости. В качестве ЦП простой и доступный ATMega8.
Первая сложность оказалась в согласовании МК 5 В и индикаторов 7.5 В. Фантазия рисовала схему из пачки транзисторов и резисторов (7 элементов при динамической индикации). Из всех гуглов мне помогла всего одна статья про замену индикаторов в часах, жаль потерял её адрес. Пользуясь возможностью, передаю благодарность автору за идею использовать TD62783 (от 5 шт в лоте). Собственно, это драйвер семисегментных индикаторов, внутри транзисторная сборка.
Далее, DC/DC преобразователь. Сделал на MC34063, их у меня много, их я запас. Посчитал на калькуляторе, проверил тестером — 7.5 В. В полевых испытаниях оказалось мало, яркости не хватало, увеличил до 10 В.
Яркость регулируется исходя из показаний датчика света, который обычный китайский фоторезистор.
В итоге схема получилась такой:
Практика
Печатную плату мне развёл TopoR. Я воспользовался авторазмещением, хоть и зафиксировал большую часть элементов вручную. Должен же прогресс работать на меня, а не только я на прогресс. Получилась красота:
С шириной корпуса U4 промахнулся, пришлось дорисовывать дорожки и не припаивать 11ю ногу.
Как это выглядит в реале:
Следующий нежданчик подкрался в софте (не буду рассказывать, как я забыл отзеркалить 2 и 5, 4 — тут нечем гордиться). Сложнее была проблема такая: счётчик насчитывал нужное количество импульсов слишком долго. К примеру, при 60 км/ч подсчёт 60 импульсов с датчика скорости занимал больше секунды. Такое редкое обновление показаний меня не устроило.
Пришлось каждые пол измерения умножать на 2.
Линейное изменение яркости по сравнению с освещённостью не подошло: когда было чуть темнее — яркость оказывалась недостаточной, когда было почти темно — яркости было чересчур. Запустил эксель, построил график для разных математических функций. В итоге выбрал квадрат.
'HUD-speedometer
'17/01/2016
'21/01/2016
'v1.1
$regfile = "m8adef.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Portb = Output
Config Portc = Output
Config Portd = Output
Config Portd.4 = Input
Portd.4 = 1
Config Timer0 = Counter , Edge = Falling
Config Timer1 = Pwm , Pwm = 8 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up , Prescale = 8
Config Timer2 = Timer , Prescale = 1024
On Timer2 Mytimer2
Enable Interrupts
Enable Timer2
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Dim I As Byte 'счётчик в основной цикл
Dim N As Byte 'счётчик в таймер
Dim Pwm_value As Integer 'яркость
Dim Speed As Integer , Speed_half As Integer , First_symbol As Integer , Second_symbol As Integer
Dim A As Integer 'разность Speed и Speed_half
Dim R1 As Word
Declare Sub Digit_indication(digit As Integer) 'вывод цифры
Const P = 500
Const T = 5000 'время горения одного индикатора
Const T1 = 1000 'время паузы для срабатывания PWM
Pwm_value = 5
Tcnt0 = 0 'счётчик
Do
Incr I
If I = 25 Then 'чтоб не перегружать МК
R1 = Getadc(7)
R1 = Sqr(r1) 'делаем гиперболу
R1 = R1 * 8
If R1 < 250 Then
Pwm_value = 250 - R1
Else
Pwm_value = 3 'минимальная яркость
End If
I = 0
End If
Gosub Indication
Loop
Indication:
If Speed < 3 Then 'если скорость 0 - не горит, 3 - защита от помех
Pwm_value = 0
End If
While Speed > 99 'т.к. всего 2 знака
Speed = Speed - 100
Wend
First_symbol = Speed / 10 'записали отдельно
Second_symbol = First_symbol * 10 'десятки
Second_symbol = Speed - Second_symbol 'отдельно еденицы
Pwm1b = 0
Pwm1a = 0
Waitus T1 'без паузы подмигивает
Call Digit_indication(first_symbol) 'и выводим цифры
Pwm1b = Pwm_value
Waitus T
Pwm1b = 0
Pwm1a = 0
Waitus T1 'без паузы подмигивает
Call Digit_indication(second_symbol)
Pwm1a = Pwm_value
Waitus T
Return
Sub Digit_indication(digit As Integer)
Select Case Digit
Case 0:
Portd.0 = 0
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
Case 1:
Portd.0 = 0
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
Portc.4 = 0
Portc.5 = 1
Case 2:
Portd.0 = 1
Portc.0 = 0
Portc.1 = 1
Portc.2 = 1
Portc.3 = 0
Portc.4 = 1
Portc.5 = 1
Case 3:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 0
Portc.3 = 0
Portc.4 = 1
Portc.5 = 1
Case 4:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 1
Portc.4 = 0
Portc.5 = 1
Case 5:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 0
Portc.3 = 1
Portc.4 = 1
Portc.5 = 0
Case 6:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 0
Case 7:
Portd.0 = 0
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
Portc.4 = 1
Portc.5 = 1
Case 8:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
Case 9:
Portd.0 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 0
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
End Select
End Sub
Mytimer2:
Incr N
If N = 26 Then
N = 0
Speed = Tcnt0 'Speed = количество импульсов с датчика
Tcnt0 = 0 'сброс счётчика импульсов
End If
If N = 13 Then 'т.к. количество импульсов набегает слишком долго (редко меняются показания)
Speed_half = Tcnt0 * 2 'добавим удвоение
A = Speed - Speed_half
A = A And &B0111111111111111 'модуль
If A > 2 Then
Speed = Speed_half
End If
End If
Timer2 = 135 'корректировочка 135 логан
Return
В конце 135 — поправочный коэффициент, подбирал его для каждой машины индивидуально (135 это для логана, для соляриса было меньше — у всех разные датчики скорости).
Обещанное видео. За качество простите, снимал на кусок синей изоленты одной рукой, другой рулил:
Индикаторы не горят, когда скорость меньше 3 км/ч. Если скорость больше 99, то отображает без первого знака.
Бюджет:
ATMega8 — 200р за 5 шт — 40р
Индикаторы — 825р за 10 шт — 165р
TD62783 — 250р за 5 шт — 50р
Остальная рассыпуха у меня была, но в целом видно, что в 500р можно уложиться.
Больше рассказать и нечего. Получился большой красивый счётчик. Тестировал на Солярисе. На фокусе не удалось, на фокусе не оказалось датчика скорости. Чуть допилю программу для работы с OBD2 через ELM327.
Папка с проектом на Яндекс.Диске
Всем спасибо за внимание!
У собранного своими руками электронного спидометра будет три режима:
- Спидометр (определение скорости) и одометр (пройденная дистанция)
- Задача 1 – проехать 32 км (20 миль)
- Задача 2 – достичь скорости 30 км\ч
Спидометр собран на Ардуино, так что нет предела вашему воображению.
Шаг 1: Как всё работает
Принцип работы проекта прост, но для сборки его нужно понимать. В самом простом понимании, он состоит из Геркона или магнитного выключателя, установленного на раму велосипеда и еще одного магнита, установленного на спицу колеса.
Так как колесо вращается, то магнит активизирует выключатель при каждом обороте. Сигнал поступает на Ардуино, который считает количество оборотов и по ним определяет покрытую дистанцию (нужно будет сначала указать диаметр вашего колеса). Также Ардуино следит за временем и вычисляет скорость. Данные выводятся на дисплей, где они отображаются в милях в час (или в километрах, если доработать формулу).
Шаг 2: Необходимые материалы
Проект недорогой и может обойтись вам в 300-700 рублей. Сборка потребует от вас некоторые умения в пайке.
Материалы для сборки:
- Плата Ардуино – если вы возьмёте Ардуино Про Мини, то для программирования вам также понадобятся Ардуино Уно или адаптер usb-ttl (как программировать Ардуино Про Мини через Ардуино Уно) или используйте Ардуино Микро или Ардуино Уно.
- Дисплей Ардуино 16×2
- 3.7805 voltage regulator (increases the control over the contrast no major difference -optional)
- 2x выключателя для задней подсветки (опционально)
- Резистор на 220 Ом
- Потенциометр на 10k Ом
- Джамперы мамы и папы, если вы хотите, чтобы Геркон был съемным
- Геркон
- Провода
- Мгновенный переключатель, чтобы менять режимы
- Конденсатор 0.1uf чтобы уменьшить дибаунс кнопки
- Резистор 10k Ом
Список необходимого инструмента:
- Паяльник
- Припой
- Корпус
- Что-то наподобие дремеля, чтобы прорезать в корпусе отверстия для установки электроники и дисплея
- Горячий клей или что-то подобное для закрепления компонентов на местах.
Шаг 3: Код
Перед тем, как мы перейдём к электронике, будет неплохо загрузить код, чтобы вы не испытывали конфуз, метаясь между неправильно подключенными проводами. Загрузите код на Ардуино, перед этим не забыв указать диаметр колеса вашего велосипеда.
Шаг 4: Электроника
Схема соединения компонентов приложена выше, но я также напишу её отдельно.
- 1 — GND
- 2 VCC
- 3 VIPER PIN на потенциометре (концы на vcc и gnd, а центр на пин 3 дисплея)
- 4 13
- 5 gnd
- 6 12
- 7 —
- 8 —
- 9 —
- 10 —
- 11 11
- 12 10
- 13 9
- 14 8
- 15 VCC
- 16 GND
- Резистор на 220 Ом соединяем между пином 2 Ардуино и землёй
- Мгновенный переключатель соединяется с пином 2 и vcc
- Конденсатор на 0.1 uf помещаем между двумя клемами выключателя, чтобы уменьшить дибаунс
- Геркон на vcc и A0
- Резистор между A0 и gnd
После соединения всех компонентов можно запитать девайс и проверить, что всё работает.
Шаг 5: Корпус
Корпус можно сделать из пластика или дерева, он должен быть прочным и в нём должно быть достаточно пространства.
После установки переключателей, экрана, кнопки и хедеров проверьте девайс на работоспособность. Постарайтесь сделать устройство водонепроницаемым, ведь оно окажется в самых худших для работы условиях.
Шаг 6: Тестирование и устранение неполадок
Запитайте устройство от батарейки 9V и проверьте все три режима. Поднесите магнит близко к Геркону и скорость с дистанцией должны начать увеличиваться.
Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.
Индикаторы в приборной доске автомобиля всегда играли и играют важную роль в отображении важных показателей состояния средства передвижения. Одним из важных и устанавливаемых на всех автомобилях является спидометр – прибор для отображения скорости передвижения автомобиля.
Автомобильные спидометры, устанавливаемые при производстве современных автомобилей, обладают весьма привлекательным внешним видом, четко и ярко отображают показания в темное время суток. Но что делать тем, у кого автомобиль старого производства, а спидометр оставляет желать лучшего в плане восприятия отображаемой информации?
Ответ прост – купить готовый, но только для тех, кто не увлекается электроникой и не любит сделать что-то своими руками. Именно поэтому, я решил собрать цифровой спидометр на замену штатному в автомобиле ВАЗ 2106 друга-автолюбителя.
Описание прибора
Так как хотелось, чтобы прибор был современным и выглядел красиво, то было принято решение использовать современную элементную базу и графический дисплей для отображения информации.
После тщательного и долгого просмотра статей в интернете были выбраны для использования следующие основные компоненты:
Стабилизатор напряжения LM317 – регулируемый стабилизатор напряжения, который настроен на 10,5В, питает подсветку графического индикатора и стабилизатор напряжения, питающий логическую схему спидометра.
Стабилизатор напряжения L1117 – стабилизатор напряжения с фиксированным напряжением 3,3В, питающий логическую схему спидометра.
Графический LCD от телефона Siemens S65 (LS020) – используется для отображения всей информации, предоставляемой микроконтроллером.
Подробный список компонентов представлен в файлах проекта платы и схемы принципиальной электрической в формате программы Diptrace.
Функционал спидометра
При проектировании устройства захотелось добавить дополнительные функции, которые были бы интересны для автомобилиста, и которых не было в штатном спидометре:
Отображение напряжения бортовой сети автомобиля
Отображение ускорения автомобиля
Отображение времени разгона автомобиля с 0 до 100 км/ч
Спидометр способен показывать:
Скорость в диапазоне от 0 до 255 км/ч с точностью до 1 км/ч
Напряжение бортовой сети от 0 до 16В с точностью до 0,01В
Ускорение автомобиля от 0 до 255 м/с 2 с точностью до 0,01 м/с 2
Время разгона автомобиля до 100 км/ч от 0 до 255 с с точностью 0,1 с
Спидометр питается от бортовой сети автомобиля 12В
Работа спидометра
Для получения сведений о скорости автомобиля в коробку передач был установлен датчик скорости от автомобиля ВАЗ 2110, который сконструирован по принципу эффекта Холла и предназначен для преобразования частоты вращения приводного вала в частоту электрических импульсов.
Датчик скорости непосредственно подключен к плате спидометра. Для подключения датчика к спидометру необходимо правильно ориентировать контакты:
Датчик выдает 6 импульсов на один пройденный метр пути.
Сигнал от датчика является цифровым и имеет форму импульсов, что позволяет нам подсчитывать эти импульсы за равные промежутки времени.
Подсчет импульсов основан на том, что сигнал от датчика скорости приходит на порт микроконтроллера, настроенный на работу внешнего прерывания. В обработчике внешнего прерывания подсчитывается количество импульсов равное количеству прерываний за определенный промежуток времени, который отсчитывается внутренним таймером микроконтроллера.
Сам микроконтроллер работает на 48 МГц от кварцевого резонатора на 20 МГц. Такой мощный контроллер и запущен на такой высокой тактовой частоте не случайно. Для быстрого отображения информации на графическом LCD необходимо быстро выводить информацию, для чего и был выбран микроконтроллер PIC18F2550.
Вычисленная скорость отображается на графическом LCD.
Исходя из вычисленной текущей скорости, рассчитываются и другие показатели, такие как ускорение и время разгона до 100 км/ч, также отображаемые на графическом LCD.
Напряжение питания бортовой сети подается на АЦП микроконтроллера через делитель, чтобы напряжение, подводимое к контакту микроконтроллера, не превышало напряжение питания (3,3В). Напряжение измеряется через равные промежутки времени, отмеряемое одним из таймеров микроконтроллера. Измеряемое напряжение обрабатывается и выводится на графический LCD.
Таким образом, мы получаем на экране цифрового спидометра полную информацию о характере движения автомобиля, а также дополнительную информацию о состоянии аккумулятора.
Схема спидометра
Программа микроконтроллера
Программа микроконтроллера написана на языке CCS PICC. Для создания проекта программы микроконтроллера использовалась среда разработки MPLAB 8.66.
Корпус и установка
Плата спидометра выполнена из двустороннего фольгированного текстолита. Обе стороны соединены между собой переходными отверстиями.
Фото платы цифрового спидометра с двух сторон:
Плата с экраном были установлены в корпус штатного спидометра автомобиля ВАЗ 2106. Корпус штатного спидометра с платой цифрового спидометра был установлен в приборную панель на свое место.
Ниже показаны фото установленного цифрового спидометра в автомобиле.
Благодарности
Используемая литература
Описание микроконтроллера Microchip PIC18F2550
Паспорт датчика скорости Ваз 2110
Help языка CCS PICC
Embedded C programming and the Microchip PIC – Richard Barnett, Larry O’cull, Sarah Cox, 2004
Эта статья — оглавление группы статей о создании электронного спидометра/одометра полностью с нуля для автомобилей с электронным датчиком скорости (большинство "инжекторов"). Прибор полностью заменяет собой механический спидометр и одометр "восьмерки", показывает скорость как в цифровом виде, так и стрелкой, ведет подсчет пробегов нескольких видов.
Используются следующие технологии: микроконтроллер ATmega328, IDE Arduino, OLED-дисплей, шаговый двигатель X27 (Switec X25 и подобные).
В настоящее время проект реализован, устройство установлено и работает.
Предваряя вопросы и комментарии:
— мне хорошо известно, что можно поставить "приборку от пятнашки", GPS-спидометр и пр. Здесь речь идёт не о таких работах.
— цель разработки: изучение технологий и саморазвитие, а не доведение ВАЗа до уровня "мерседеса".
— да, устройство может быть использовано и на других автомобилях, не только на ВАЗ.
Кто читает БЖ "Чароита", знает, что я давно "веселюсь" с датчиками скорости. Много лет ДС работал исправно, а потом начались сбой за сбоем по причине некачественных датчиков, а может и изношенный трос играл свою роль. Так или иначе, а мне очень хотелось избавиться от троса и сделать спидометр с электронным приводом. Его внешний вид меня вполне устраивал, не устраивал именно механический привод.
Как-то раз мне удачно попалась приборная панель от ВАЗ-2110. Интересна она была тем, что в ней используется гибридный спидометр/одометр — он и электронный, и механический одновременно: получает сигнал по проводам от электронного датчика скорости, а одометр у него на механических барабанах, которые приводятся шаговым двигателем. Вот этот прибор меня и заинтересовал, появилась мысль внедрить его в "приборку" ВАЗ-2108. Как потом оказалось, ничего из этого не вышло, и пришлось искать другие, впрочем, более современные решения. Но обо всём этом в дальнейших статьях.
Во время одного из тестирований: в центре дисплей с данными спидометра и одометра, справа стрелочный спидометр, слева задающий генератор вместо датчика скорости.
Мои благодарности:
— камраду Андрею vampo за качественную программу одометра и схему питания;
— камраду Виталию vitaliy455 , благодаря которому удалось найти программу спидометра;
— камраду Kevin Gale — именно его отличная программа спидометра легла в основу всего софта;
— всем, чьи проекты так или иначе пригодились.
Важной особенностью разработки было создание надежного рабочего устройства, т.к. в сети встречается много устройств недоведенных, непроверенных, "на попробовать", отлаженных только на столе.
В процессе разработки было перелопачено много информации: схем, спецификаций, программ — всё это опубликовать здесь нет возможности. Так что если есть вопросы — спрашивайте, постараюсь рассказать.
Всю техническую информацию по изготовлению смотрите на сайте "Чароита".
Читайте также: