Автомобильный цифровой спидометр на PIC. Одометр спидометр на микроконтроллере


Квазианалоговый спидометр с прошивкой своими руками

        После того как спидометр с квазианалоговой шкалой стал комерческим, то из интернета сразу пропали его исходники и прошивки,без которых спидометр было не построить. Было решено создать прибор по функциям похож на его прибор. Но прибор вышел на многофункциональней, чем прибор МАМЕДА. И так,переходим к просмотру-схема спидометра+одометр с прошивкой своими руками.

 

 

 

Схема устройства:

 

Отображение:

1: Общий пробег от 0 до 999 999 км. Не значащие нули не высвечиваются.

2: Суточный пробег от 0 до 999, 99 км. Десятки, сотни метров (при переполнении сброс на нули).

3: Сервисный счетчик до замены масла. Остаток пробега до замены масла от 10 000 км. до 0, по умолчанию. В меню можно выставить любой.

Функции:

    1: Сервисный (желтый) светодиод . При остатке до замены масла 100 км. начинает мигать, а при 0 загорается постоянно.

   2: Выход на зуммер. При достижении определенной скорости единовременно подает четыре коротких сигнала. Скорость при которой срабатывает зуммер, выставляется в меню от 0 до 999 км. г.

   3: Выход для управления реле света. При начале движения появляется сигнал на включение ближнего света или ходовых огней. При остановке огни будут продолжать гореть еще 5 минут, чтобы избежать светового шоу в тянучках и на светофорах. Больше пяти минут в тянучках и на светофорах не стоим, а если и стали, то это очень редко и не так страшно, если огни погаснут. Время можно выставить в меню от 0 до 99 минут. При «0» свет не будет включаться!

   4: При включении ближнего света индикаторы и светодиоды притухают на 50%. Можно изменить в меню от 0 до 99%.

Управление:

      1: В обычном режиме коротким нажатием на кнопку, переходим на отражение

«общий одометр – суточный одометр – остаток пробега до замены масла»

   И так по кругу, при этом незначащие нули не светятся.

   В режиме суточного одометра длительное (более 2 секунд) нажатие на кнопку вызовет сброс счетчика на 0,00

   В режиме остаток до замены масла длительное (более 2 секунд) нажатие на кнопку вызовет сброс счетчика то на 10 000.

   В режиме общего одометра длительное (более 2 секунд) нажатие на кнопку вызовет переход в сервисное меню.

   Сигналом перехода будет мигающая надпись на индикаторе спидометра “od.c"(od. common - од. общий), меню настройки общего стартового пробега. Он будет мигать 10 секунд, в течение этого времени нужно провести последующие действия. Если ничего не делать, после окончания 10 секунд одометр возвращается в исходное состояние, общий одометр, из любой точки программирования,

 Регулировка от 0 до 999 999. По умолчанию выставлено 0 км.

    Короткое нажатие вызовет переход к следующему меню “od.d" (od. daily - од. суточный), меню установки суточного стартового пробега. (Если уж точно хотите выставить стартовый пробег)    Регулировка от 0 до 9 999.99. По умолчанию 0.00 км.

   Далее переход в меню “od.o" (od. oil - од. масла), меню установки пробега до замены масла, регулировка от 0 до 999 999. По умолчанию 10 000 км.

   Далее переход в меню "diu" (data interface unit - блок интерфейса данных), меню настройки количества импульсов на 1 метр пути, регулировка от 1 до 19. По умолчанию 6 имп.м.

   Далее переход в меню "SPd" (speed - скорость), меню установки скорости при котором сработает зуммер, регулировка от 0 до 999. По умолчанию 80 км. ч.

   Далее переход в меню "L. OF" (lamp off - выключить лампы), меню установки времени, по истечении которого выключается ближний свет, регулировка от 0 до 99 минут, при значении 00 свет включаться не будет. По умолчанию 5 минут.

   Далее переход в меню "HAb" (Here Adjustment - Здесь Регулирование, brightness –яркость), меню установки яркости индикаторов при включенных габаритах. Если в этот момент включены габариты, то можно наблюдать какая будет яркость индикаторов, регулировка от 0 до 99%. По умолчанию 50%

   Далее выход из сервисного режима.

   Программирование в сервисном режиме;

 В меню “od.c", длительное нажатие (более 2 сек.) кнопки переведет нас к установке общего пробега, “od.c" перестанет мигать и на индикаторе одометра появится мигающий первый разряд, не значимые нули засветятся. Короткими нажатиями выставляем километры стартового пробега.

   Длительное нажатие вызовет переход на следующий разряд десятки километров, он начнет мигать. И так далее.

   Аналогичные действия и в других меню. После 10 секунд от последнего действия одометр перейдет к начальному состоянию!

   Запуск:

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

   Далее в течение 2 секунд на индикаторе спидометра проходит бегущая строка с именем разработчика прошивки и знаком UA, а на индикаторе одометра слово "HELLO".

   Далее еще на 2 секунды задерживается "UА HELLO". После этого прибор переходит в рабочий режим.

 

Первые две секунды нужны для диагностики элементов индикации.

Вторые две секунды заставки, обязательное условие разработчика программного обеспечения! Третьи две секунды мое обязательное условие. Я так ХОЧУ!

Удаляться и меняться не будет!!! Кому не нравится, не начинайте проект!!!

 

   Прибор и прошивка были проверены и обкатаны на макете, и все работает безупречно.

   Индикаторы применены с общим АНОДОМ (меняться тоже не будет!!!), они не являются дефицитом, и приобрести их возможно в любом интернет магазине.

    В архиве есть проект в ПРОТЕУСЕ, и там выставлены точные частоты для соответствующей скорости. После 40 км\ч и до 80 км\ч, спидометр будет показывать на 1 км\ч больше. 90 – 120 + 2 км\ч. 130 -150 + 3 км\ч. 150 - 180 + 4 км\ч. и так далее. В реальной ситуации отклонение от истинной скорости может достигать до + 5 км/ч. в интервале от 10 до 100 км\ч. и +10 км\ч. в интервале 100 - 200 км\ч. Все заводские спидометры имеют большую погрешность!

    Вот выдержка с форума на эту тему:

Одометры всех видов установленные на транспортные средства не относятся к классу точных приборов. Для каждого вида данных приборов установлены допустимые погрешности. Надо учитывать, что данные погрешности установлены только для самих приборов, все конструктивные изменения, а так же физический износ некоторых узлов автомобиля в эту погрешность не включены. Также, по техническим требованиям ЕЭК ООН N39 спидометры не могут занижать показания, поэтому и одометр конструктивно связанный со спидометром так же, как правило, дает завышенные показания. Средняя погрешность спидометра по правилам ЕЭК ООН N39 (ГОСТ Р 41.39-99) может быть только положительной и не превышать истинную скорость движения более чем на 10%+6 км/ч

   Также есть текстовый файл с скоростью и частотами округленными до целого числа.

   Формула расчета частоты с датчиком 6 импульсов до третьего знака 1.667 * ХХХ

( где ХХХ нужна скорость )

Скачать файл проекта

radiostroi.ru

Автомобильный цифровой спидометр на PIC

speedometer led photoПредлагаемый ниже автомобильный цифровой спидометр предназначен для установки в автомобили со штатными аналоговыми спидометрами, управляемые электрическими импульсами, поступающими от установленных датчиков скорости. Также возможно использование такого устройства в случае самостоятельной установки на автомобиль подобных датчиков.

 

speedometer led sch

Спидометр выполнен на базе широко распространенного микроконтроллера PIC16F84A-04I/P фирмы "MICROCHIP". В качестве устройств отображения информации использованы светодиодные индикаторы SC10-21YWA (высота знака 25,4 мм, жёлтый свет, общий катод) фирмы "Kingbrihgt".Подключается устройство к сигнальному контакту штатного аналогового спидометра. Нажатием кнопки (дублируется звуком), можно изменять яркость свечения индикаторов "по кругу". При желании можно дополнительно установить кнопку с фиксацией для отключения питания спидометра (на схеме не показано). При неплотно закрытой двери автомобиля (сигнал низкого уровня относительно корпуса) и скорости движения более 9 км в час, раздаётся прерывистый сигнал, и показание скорости на индикаторе сменяется включенной на полную яркость аббревиатурой 'dor' (сокращённое от англ. "door" - дверь). Питание на спидометр берётся с замка зажигания (контакт - "зажигание"). При каждом включении яркость свечения индикаторов устанавливается такой, какой она была выставлена пользователем ранее. Все незначащие нули на индикаторе кроме младшего разряда отключаются. При использовании других подобных индикаторов, возможно, потребуется подборка токоограничивающих резисторов в цепи анодов их сегментов. Звукоизлучатель со встроенным генератором HA1, можно заменить любым самодельным генератором звука с частотой 1000-1500 Гц, способным работать от источника питания напряжением 5 вольт. Рисунки печатной платы в приложении. Исходные тексты программы и НЕХ-файлы для микроконтроллера под:

  •   японский стандарт (2500 импульсов на один км пути)
  •   международный стандарт (6000 импульсов на один км пути)
  •   стандарт 10000 импульсов на один км пути

находятся в приложении.

Следует отметить, что в первом варианте время измерения, а затем индикации составляет 1,44 секунды (для удобства программно уменьшено до 0,72 секунды). Во втором варианте 0,6 секунды, а в третьем варианте 0,36 секунды. Для установки времени измерения импульсов от датчика скорости с точностью до 1 км в час, необходимо разделить 3600 на количество импульсов датчика скорости на 1 км пройденного пути. Полученное значение времени измерения (в секундах) необходимо занести в программу. Например, 3600/2500=1,44 сек. Время индикации и смена показаний индикатора во время движения вполне удобочитаемо во всех представленных случаях.

 

Печатная плата, Прошивка и Проект для Proteus

micpic.ru

Спидометр + одометр и тахометр. - PICBasicPro

@ device PIC16F876, HS_OSC, WDT_OFF, PWRT_ON,PROTECT_OFF

Data @0, Word 030 '

Data @2, Word 000 ' Заносим в EEPROM при программировании

Data @4, 00 ' нужные нам показания

Data @5, Word 960 ' одометров

Data @7, 60 '

Data @8, 0

ADCON1 = %00000110

TrisA = %00101000

PortA = %00100000

TrisB = %00000001

PortB = %00000000

TrisC = %00000001

PortC = %00000010

Cifra var Byte ' Для вывода нужной цифры на индикациюацию

Time var Word ' Для отсчета времени для спидометра

ImpSpedo var Byte ' Для хранения кол-ва импульсов спидометра

ImpOdo var Byte ' Для хранения кол-ва импульсов одометра

Sped var Byte ' Для хранения скорости движения

Odo123Km var Word ' Для хранения километров одометра (тысячи)

Odo456Km var Word ' Для хранения километров одометра (сотни)

OdoMetr var Byte ' Для хранения десятков метров без сброса

OdoTripKm var Word ' Для хранения количества километров суточного пробега

OdoTripM var Byte ' Для хранения десятков метров суточного пробега

OdoPR var Byte ' Для переключения и сброса одометра

SelOdo var Bit ' Для выбора одометра

Tme Con 294 ' Время для

Time = Tme ' отсчета скорости

ImpSpedo = 0

ImpOdo = 60 ' Считаем по 10 метров пути (60 импульсов на 10 метров)

OdoTripKm = 0

OdoTripM = 0

OdoPR = 200 ' Пауза для кнопки

'SelOdo = 0

Read 0, Odo123Km.byte0

Read 1, Odo123Km.byte1

Read 2, Odo456Km.byte0

Read 3, Odo456Km.byte1

Read 4, OdoMetr

Read 5, OdoTripKm.Byte0

Read 6, OdoTripKm.Byte1

Read 7, OdoTripM

Read 8, SelOdo

Option_REG = %11000011

Intcon = %10110000

TMR0 = 5

Pause 1000 ' Для стабилизации МК

On Interrupt Goto myint ' Если произошло прерывание, переходим к обработке этого прерывания

Main:

if PortA.5 = 0 then Save ' Если зажигание выключено то - переходим к сохранению данных

if PortA.3 = 0 then ' Если кнопка одометра нажата

OdoPR = OdoPR - 1 ' Уменьшаем время паузы кнопки

endif

if OdoPR < 180 then ' Если кнопку держали

if PortA.3 = 1 then ' короткое время

OdoPr = 200 ' Сбрасываем время паузы кнопки

SelOdo = SelOdo + 1 ' Заносим 1цу в переменную выбора одометра

endif

endif

if OdoPR < 100 then ' Если кнопку

if PortA.3 = 0 then ' держим долгое время

OdoPR = 200 ' Сбрасываем время паузы кнопки

OdoTripM = 0 ' Сбрасываем

OdoTripKm = 0 ' суточный одометр

endif

endif

' ----------------------------- [ Spedometr ] -----------------------------

Cifra = Sped Dig 0 ' Spedometr Cifra 1

GoSub Look

PortA = %00000001

Pause 4

PortA = $10

if Sped < 10 then Odo

Cifra = Sped Dig 1 ' Spedometr Cifra 2

GoSub Look

PortA = %00000010

Pause 4

PortA = $10

if Sped < 100 then Odo

Cifra = Sped Dig 2 ' Spedometr Cifra 3

GoSub Look

PortA = %00000100

Pause 4

PortA = $10

' --------------------------- [ End Spedometr ] ---------------------------

' -------------------------- [ Vibiraem odometr ] -------------------------

Odo:

if SelOdo = 1 then

GoTo SytOdo

endif

' ------------------------ [ End Vibiraem odometr ] -----------------------

' ------------------------------ [ Одометр Общий ] ------------------------

Cifra = Odo123Km Dig 2 ' Odometr Cifra 1

GoSub Look

PortC = %10000010

Pause 4

PortC = $02

Cifra = Odo123Km Dig 1 ' Odometr Cifra 2

GoSub Look

PortC = %01000010

Pause 4

PortC = $02

Cifra = Odo123Km Dig 0 ' Odometr Cifra 3

GoSub Look

PortC = %00100010

Pause 4

PortC = $02

Cifra = Odo456Km Dig 2 ' Odometr Cifra 4

GoSub Look

PortC = %00010010

Pause 4

PortC = $02

Cifra = Odo456Km Dig 1 ' Odometr Cifra 5

GoSub Look

PortC = %00000110

Pause 4

PortC = $02

Cifra = Odo456Km Dig 0 ' Odometr Cifra 6

GoSub Look

PortC = %00001010

Pause 4

PortC = $02

Goto Main

' ---------------------------- [ End Одометр Общий ] ----------------------------

' ------------------------------ [ Одометр Суточный ] ---------------------------

SytOdo:

Cifra = OdoTripKm Dig 2 ' Odometr Cifra 2

GoSub Look

PortC = %01000010

Pause 4

PortC = $02

Cifra = OdoTripKm Dig 1 ' Odometr Cifra 3

GoSub Look

PortC = %00100010

Pause 4

PortC = $02

Cifra = OdoTripKm Dig 0 ' Odometr Cifra 4

GoSub Look

PortC = %00010010

PortA.4 = 0

Pause 4

Pauseus 350

PortC = $02

PortA.4 = 1

Cifra = OdoTripM Dig 1 ' Odometr Cifra 5

GoSub Look

PortC = %00000110

Pause 4

PortC = $02

Cifra = OdoTripM Dig 0 ' Odometr Cifra 6

GoSub Look

PortC = %00001010

Pause 4

PortC = $02

GoTo Main

' ---------------------------- [ End Одометр Суточный ] -------------------

' ------------------------- [ Obrobotka Impulsov ] ------------------------

Disable

myint:

if intcon.1=1 then ' Если прерывание произошло по входу INT считаем счетчики

ImpSpedo = ImpSpedo + 1 ' Счетчик скорости

ImpOdo = ImpOdo - 1 ' Счетчик одометра (основной)

INTCON.1 = 0

endif

if ImpOdo = 0 then ' Если проехали 10 метров пути

ImpOdo = 60 ' Начали сначала осчет 10 метров пути

OdoMetr = OdoMetr + 1 ' Заносим в переменную количество пройденных метров (общий одометр)

OdoTripM = OdoTripM + 1 ' Заносим в переменную количество пройденных метров (суточный одометр)

endif

if OdoMetr = 100 then ' Если проехали 1000 метров

OdoMetr = 0 ' Обнуляем счетчик метров

Odo456Km = Odo456Km + 1 ' Заносим 1цу в счетчик сотен километров

endif

if Odo456Km = 1000 then ' Если счетчик сотен километров одометра заполнился

Odo456Km = 0 ' Обнуляем счетчик сотен километров

Odo123Km = Odo123Km + 1 ' Заносим 1цу в счетчик тысячь километров одометра

endif

if Odo123Km = 1000 then ' Если счетчик тысячь километров одометра заполнился

Odo123Km = 0 ' Обнуляем счетчик тысячь километров одометра

Odo456Km = 0 ' Обнуляем счетчик сотен километров одометра

endif

if OdoTripM = 100 then ' Если проехали 1000 метров (суточный)

OdoTripM = 0 ' Обнуляем счетчик метров (суточный)

OdoTripKm = OdoTripKm + 1 ' Заносим 1цу в счетчик сотен километров (суточный)

endif

if OdoTripKm = 1000 then ' Если счетчик сотен километров одометра заполнился (суточный)

OdoTripKm = 0 ' Обнуляем счетчик сотен километров одометра (суточный)

endif

if intcon.2=1 then ' Если прерывание по переполнению TMR0

Time = Time - 1 ' Уменьшаем счетчик времени

if Time = 0 then ' Если счетчик времени отсчитал нужный промежуток времени

Time = Tme ' Начинаем отсчет времени заново

Sped = ImpSpedo ' Заносим в переменную полученную скорость

ImpSpedo = 0 ' Обнуляем счетчик импульсов скорости

endif

TMR0 = 5

intcon.2=0

endif

Resume

Enable

' ----------------------- [ End Obrobotka Impulsov ] ----------------------

' ----------------------- [ End Zajigaem cifry ] ----------------------

Look:

LookUp Cifra, [$02, $BA, $24, $A0, $98, $C0, $40, $B2, $00, $80], PortB

Return

' ----------------------- [ End Zajigaem cifry ] ----------------------

' ----------------------------- [ Save Data ] -----------------------------

Disable

Save:

PortA = $00

PortC = $02

Pause 200

Write 0, Odo123Km.byte0

Write 1, Odo123Km.byte1

Write 2, Odo456Km.byte0

Write 3, Odo456Km.byte1

Write 4, OdoMetr

Write 5, OdoTripKm.Byte0

Write 6, OdoTripKm.Byte1

Write 7, OdoTripM

Write 8, SelOdo

Pause 50

PortC = $00

End

Enable

' ---------------------------- [ End Save Data ] ---------------------------

End

www.picbasic.ru

Спидометр-одометр + вольтметр

  КОНКУРС

 В данной статье представлено устройство, которое установлено в приборную панель автомобиля и отчасти заменяет бортовой компьютер.

Начну с  предыстории.Поставил я как-то в машину торпедо от иномарки и понял, что спидометр ужасно не совпадает с реальными показателями скорости. Решено было поставить бортовой компьютер. Сказано – сделано. Множество функций, и т.п., со временем он отказал, и пришлось делать самому.

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

На просторах интернета я подсмотрел кое-что по отдельности и свёл это всё в законченное устройство представленное ниже.Из необходимых показаний  я выбрал: вольтметр бортовой сети, спидометр и одометр (общий пробег  не сбрасываемый, и суточный, сбрасываемый).Так же, в моей панели не показывал штатный показатель уровня топлива в баке, я поставил переключатель показаний вольтметра, там показывает либо напряжение бортовой сети, либо падение напряжения на датчике бака. Показания конечно не в литрах, а в каких-то цифрах,  по этому я запомнил показания пустого бака, четверти, половины, 0,75 бака, и полного. И по показаниям я могу ориентироваться о количестве топлива в баке.

 

 

Теперь о схеме.

 

Вольтметр собран на микроконтроллере pic16f676 , транзисторы я применил PNPИндикатор с общим анодом , с динамической индикацией на три разряда.В спидометре-одометре применён микропроцессор  pic16f873a,  транзисторы работающие на аноды, обратной проводимости, индикатор на спидометр на три разряда с динамической индикацией с общим анодом, на одометр я взял два индикатора с ОА с динамикой.

 

Описание датчика:

 

Алгоритм работы таков:Напряжение 12 вольт с аккумулятора на схему подаётся всегда, а вот с ножки замка зажигания 15/1  подаётся и на схему, как питание, и на ножку 21 МК , и при выключении зажигания, схема не сразу обесточивается, а идёт запись данных о пробеге  в  EEPROM контроллера, когда запись прошла удачно, микроконтроллер даёт команду на ключи, которые снимают напряжение питания всей схемы. Во время записи на индикаторе одометра загорается надпись «запись»В  печатной плате предусмотрен переключатель, который питание на аноды спидометра либо подаёт напрямую, либо пускает через резистор, что в свою очередь, в ночное время, «приглушает» яркость свечении, чтобы не ослепляло, но кому не надо, можно на плате поставить перемычку. (что я у себя и сделал)При повороте ключа зажигания , загораются показания вольтметра, спидометра и общего показания пробега, чтобы перейти в суточный пробег, надо кратковременно нажать кнопку ресет, А чтобы сбросить показания суточного пробега, эту же кнопку надо удержать долго,  и на индикаторе появится   слово «сброс» Схема работает на моей машине,  и уже на машине друга. Так что схема полностью  работоспособна и отработана  в полевых условияхИ еще, в вольтметре, вместо подстроечного резистора, я поставил постоянный 13 кОм (в моём случае) , чтобы показания под воздействием вибрации не сбивалось.И ещё, на фото приведена плата из первого опыта, там не дорисованы дорожки, но вам представлена полностью готовая плата, со всеми изменениями.

 

Фото готового устройства

 

Скачать прошивки с исходниками + файл ПП.

Автор: Ярынич Эдуард Евгеньевич (ad_tv)Связь с автором: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. ICQ#: 378987394

chipmk.ru