Как сделать 3д спидометр

Опубликовано: 01.05.2024

Идея оснастить свой автомобиль дополнительным спидометром у меня возникла сразу, как у меня вышла из строя АБС. И мы весь отпуск проездили без АБС и спидометра. Сейчас у меня стоит новый блок АБС и спидометр тоже работает. На большинства новых машинах вся электроника типа АБС и всяких контролирующих движения завязана на один блок. У некоторых вообще при выходе из строя оного не точто спидометр не кажет, а вся панель не работает. И бывает даже и не заводится. Хорошо что у меня автомобиль не из таких.

Из найденных в интернете схем спидометров, мне понравилась схема на микроконтроллере PIC16F628A.

Спидометр выполнен на базе микроконтроллера PIC16F628A. В качестве устройств отображения информации подойдут любые светодиодные индикаторы с общим катодом. Я использовал маленький трёх сегментный индикатор. При использовании других индикаторов, возможно, придётся подбирать токоограничивающие резисторы в цепи анодов. Подключается устройство к сигнальному контакту штатного спидометра. Нажатием кнопки SB1 (дублируется звуком), можно изменять яркость свечения индикаторов «по кругу». При каждом включении яркость свечения индикаторов устанавливается такой, какой она была выставлена ранее. Звукоизлучатель HA1 любой со встроенным генератором, способным работать от источника питания напряжением 5 вольт. При неплотно закрытой двери автомобиля (сигнал низкого уровня относительно корпуса) и скорости движения более 9 км в час, раздаётся прерывистый сигнал, и показание скорости на индикаторе сменяется включенной на полную яркость аббревиатурой ‘dor’ (сокращённое от англ. «door» – дверь).
Используемая прошивка микроконтроллера универсальная позволяющая выбрать один из пяти вариантов работы спидометра в зависимости от кол-ва импульсов поступающих с датчика скорости автомобиля. Предлагаемый цифровой спидометр «понимает» датчики, выдающие: 2500 имп/км, 4000 имп/км, 6000 имп/км, 8000 имп/км и 10000 имп/км. Список можно расширить, внеся соответствующие изменения в программу. Допустим, если считывание скорости автомобиля берётся, интегрировано со всех четырёх колёс. И сигнал можно взять с одного из датчиков колёс.
А так для выбора нужного варианта необходимо установить перемычку S1 и затем подать питание на устройство. При установленной перемычке индикатор не горит. Теперь нажатием кнопки SB1 «Яркость» (на 1-2 с, с паузой между нажатиями 1-2 с) выбирается нужный вариант:

1 нажатие — 2500 имп/км;
2 нажатия — 4000 имп/км;
3 нажатия — 6000 имп/км;
4 нажатия — 8000 имп/км;
5 нажатий — 10000 имп/км.

Через 3 секунды после последнего нажатия, раздастся соответствующее количество коротких звуковых сигналов излучателя НА1, подтверждая запись в EEPROM микроконтроллера нужного варианта. По умолчанию установлен режим для датчика скорости 2500 имп/км. А при количестве нажатий более 5, будет также установлен японский стандарт (2500). Для выбора другого режима работы достаточно повторить выше описанные действия. После выбора нужного режима работы перемычку S1 необходимо убрать. Теперь спидометр готов к работе.
Погрешность показаний составляет для:

1 варианта (2500) +0,2 км;
2 варианта (4000) менее 0,1 км;
3 варианта (6000) +0,2 км;
4 варианта (8000) — 0,4 км;
5 варианта (10000) менее 0,1 км;

Если количество импульсов от датчика скорости неизвестно, необходимо выполнить следующие. На ровном участке дороги от колеса автомобиля отмерить 10 метров. Подключить стрелочный вольтметр (тестер) к сигнальному контакту аналогового спидометра и медленно двигаясь, подсчитать кол-во «дёрганий» стрелки вольтметра. Умножить полученный результат на 100.

Вместо PIC16F628A можно использовать PIC16F84A только уже перемычка S1 не используется. Выбор режима работы спидометра только выбирается соответствующей прошивкой.

Под катом обещаю много картинок, посредственное видео, код и текст — всё в лучших традициях.

Теория
Идея простая — за фиксированный промежуток времени считаем количество импульсов от датчика скорости. В качестве ЦП простой и доступный 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) Создаем новый документ, размером 4 * 4 px, после чего рисуем следующие квадраты:

Нарисовав, сохраняем: Edit-Define Pattern:

 width=

 width=

 width=

3) Новый слой, открываем направляющие и выставляем их по центру, рисуем круг, необходимого Вам размера:

 width=

заливаем линейным cooper градиентом

 width=

после чего жмем Ctrl+U, и используем следующие настройки: Hue 205, Saturation 4, Lightness +6:

 width=

в итоге получаем:

 width=

4) На этом же слое с помощью рисуем, что- то, типа этого, не забыв потом удалить выделение:

К слою применяем следующие настройки:

 width=

5) Выделяем имеющийся круг, увеличиваем его размер, примерно на 3 px, создаем новый слой, и заливаем черным цветом, после чего, Ctrl+клик мышки на старом кругу + Del, далее Filtr-Blur-Gaussion Blur со значением 2, имеем:

 width=

 width=
 width=

7) Новый слой, рисуем круг , заливаем линейным cooper , после чего жмем Ctrl+U, и используем следующие настройки: Hue 205, Saturation 4, Lightness +6, выставляем также обводку в 1 px, церным цветом,в итоге получаем:

 width=
 width=

8) Рисуем разметку спидометра: можно в ручную. При этом, чтобы правильно распределить деления, в центре нужно нарисовать shape tool'ом звезду с нужным количеством лучей.

 width=
 width=

9) Теперь пишем, циферблат:

 width=

10) Напишем, что-нибуть в информационном окне:

 width=

11) Нарисуем в середине спидометра, подложку, расписывать не буду, приведу сразу картинки:

Стандартный список диаграмм Excel весьма ограничен и, чтобы построить что-то действительно интересное и необычное, приходится проявлять недюжинную фантазию. Одной из таких нетипичных диаграмм является так называемая "диаграмма-спидометр" (выглядит как полукруглая шкала прибора со стрелкой, показывающей текущее значение показателя).

Строится такая диаграмма на основе комбинированной диаграммы, составленной из кольцевой и круговой. Разберем пошагово процесс построения.

В качестве исходных данных нам нужна всего лишь одна цифра - процент выполнения плана. Это может быть стадия готовности проекта, показатель KPI, результаты тестирования и любые другие показатели, которые выражаются значением от 0% до 100% . Возьмем для примера данные готовности проекта.

В ячейке с выполнением плана (C4) находится формула: =C3/C2. Она вычисляет процент готовности путем деления количества завершенных этапов на общее число этапов проекта.

Далее нужно будет отдельно построить цветовую шкалу (шкала спидометра), и круговую диаграмму, которая будет рисовать стрелку спидометра.

Для создания шкалы понадобится кольцевая диаграмма. Она представляет собой круг (360 градусов). Чтобы шкала выглядела как полукруг, нижняя часть должна быть прозрачной (и равняться 180 градусам - половина круга). Оставшуюся половину можно разбить на любое количество зон, характеризующих тот или иной процент выполнения. Главное условие - сумма величин всех зон также должна равняться 180 градусам. В нашем примере будет 4 таких зоны. Таблица для построения шкалы выглядит так:

Чтобы нарисовать стрелку нам понадобится похожая таблица, но в ней всегда будет 4 части: прозрачный полукруг (180 градусов), размер стрелки (3-5 градусов будет достаточно), зона выполненного плана (180 умножить на % выполнения плана минус размер стрелки), зона остатка плана (180 минус зона выполненного плана минус размер стрелки).

Теперь, когда все данные подготовлены, переходим непосредственно к процессу построения. Выделяем в таблице "Шкала" столбец с числовыми значениями и выбираем "Вставка" - "Диаграммы" - "Кольцевая" .

После этого кликаем по-очереди по каждому сектору диаграммы (первый клик - выделяется кольцо, второй - выделяется конкретная точка данных) и окрашиваем его в нужный цвет (выбираем "Формат точки данных" - "Заливка" и задаем цвет). Там же желательно убрать границы, установив галочку "Нет линий". Для самого большого сектора нужно указать "Нет заливки", так как он должен быть прозрачным.

Теперь нужно добавить на диаграмму стрелку. Для этого кликаем на ней правой кнопкой мыши и нажимаем "Выбрать данные". В открывшемся окне нажимаем кнопку "Добавить".

Вводим имя ряда (например, "Стрелка") и указываем в качестве источника столбец с данными из таблицы для построения стрелки. На диаграмму добавится второй кольцевой ряд.

Для всех секторов этого ряда, кроме самого узкого - стрелки, нужно убрать заливку способом, описанным выше. Нелишним будет также убрать границы для всех точек, выбрав пункт "Нет линий". Саму стрелку можно перекрасить в удобный цвет.

Теперь нужно изменить тип диаграммы для стрелки, чтобы она перекрывала шкалу. Кликните правой кнопкой мыши на диаграмме и выберите "Изменить тип диаграммы. " Выберите "Комбинированная" и установите для ряда "Стрелка" тип "Круговая", а для второго ряда - "Кольцевая". Снимите все галочки, отвечающие за вспомогательную ось.

Диаграмма выглядит почти так, как нужно. Осталось "повалить ее на бок". Для этого кликните правой кнопкой мыши ряду данных и выберите "Формат ряда данных". В появившейся панели переходим на вкладку "Параметры ряда" и указываем "Угол поворота первого сектора" равным 90 градусов.

Перевернется один из рядов (скорее всего, стрелка). Чтобы повернуть второй нажмите на стрелку рядом с надписью "Параметры ряда" на панели "Формат ряда данных" и выберите из списка второй ряд. После чего проделайте ту же операцию по повороту первого сектора.

Как сделать спидометр на светодиодах из шагового двигателя

Сигналы с датчика необходимо преобразовать в напряжение, для этих целей используется LM2917. При увеличении напряжения будут последовательно включаться 30 светодиодов, которые подключаются через три микросхемы типа LM3914.

Конкретной в этой статье автор заменил датчик ABS на шаговый двигатель, ведь он тоже может генерировать импульсы. Помимо этого такой двигатель вырабатывает еще и напряжение, которое растет при увеличении скорости. В связи с этим необходимость использования регулятора напряжения LM2917 отпала.

Материалы и инструменты для изготовления:
- шаговый двигатель (можно найти в струйном принтере);
- провода;
- паяльник с припоем;
- микросхемы LM3914;
- подстроечный потенциометр на 47 кОм;
- 31 светодиод;
- плотная бумага для создания дисплея (картон);
- два резистора на 1 кОм;
- три резистора 2.2 кОм;
- электролитический конденсатор 470 мкФ/25В;
- два полипропиленовых конденсатора на 100 нФ;
- ножницы и другие мелочи.


Процесс изготовления спидометра:

Шаг первый. Устанавливаем датчик скорости
Для того чтобы сделать датчик можно использовать инфракрасные детекторы и светодиоды, различные сенсоры и так далее. Автор использовал для этих целей шаговый двигатель от струйного принтера. Из двух был выбран самый большой, который вырабатывает больше всего мощности и сигналов. Самое сложное - соединить двигатель с тросиком, то есть поставить шаговый двигатель вместо прежнего стрелочного спидометра.









Микросхемы LM3914 являются драйверами светодиодного дисплея. Каждый из этих драйверов нужен для управления десятью светодиодами, это может быть как сегментный режим, так и точечный. Режимы переключаются по приложенной инструкции. Что касается контроллера 7809 (9В), то он регулирует напряжение.

Шаг третий Сборка спидометра
Светодиодов всего должно быть 31 штука, свет выбирается индивидуально, главное, чтобы они были яркими. Автор использовал яркие светодиоды белого цвета. Можно сделать ленту разноцветной, к примеру, к концу поставить красные, что будет говорить о высокой скорости движения, а вначале зеленые или синие светодиоды.










Первый светодиод должен непрерывно гореть при подключении питания +12В. Остальные же 30 будут включаться последовательно при росте скорости автомобиля. Основа для светодиодов делается из картона, напротив них вырезаются прямоугольные отсеки, на которые затем приклеивается более тонкая бумага. При работе светодиодов свет будет проходить только через тонкую бумагу, образовывая эффект, который можно увидеть на фото. Бумагу можно покрасить в любой цвет. Естественно впоследствии вся эта конструкция ставится вместо внутренностей старого стрелочного спидометра.

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

Читайте также: