Спидометр и тахометр на ARDUINO для автомобиля

Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

Каравкин В.
Здесь описывается цифровой прибор, измеряющий скорость движения автомобиля и частоту вращения коленвала его двигателя. Индикатором служит ЖК-дисплей типа 1602А, он стандартный, на основе контроллера HD44780. Обозначение 1602А фактически значит, что он на две строки по 16 символов в строке. Индикатор был куплен на «Aliexpress», найден по запросу «HD44780» (цены от 81 рубля). Как уже сказано, у данного индикатора есть две строки. Так вот, в верхней строке прибор показывает скорость движения автомобиля, а в нижней - частоту вращения коленвала двигателя. В отличие от многих бортовых компьютеров, таких как «Орион-БК» и подобных, а так же, приборов со светодиодными семисегментными индикаторами, этот ЖК-дисплей при включенной подсветке дает очень четкое изображение, отлично видно как на свету, так и ночью в темноте, что особенно важно при автомобильной эксплуатации.


В основе схемы прибора лежит готовая плата ARDUINO UNO, на которой расположен микроконтроллер ATMEGA328,
а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания. Стоимость ARDUINO UNO на том же «Aliexpress» начинается от 200 рублей. Описание платы ARDUINO UNO, а так же программного обеспечения для неё, и подключения к персональному компьютеру приводится автором в Л.1, так что, если кто не в курсе что такое ARDUINO и «с чем его едят», обязательно прочтите сначала статью в Л.1.
Прибор подключается по питанию к выходу замка зажигания автомобиля, а сигналы получает с его датчиков Холла, один из которых является датчиком зажигания, а второй датчиком скорости. Прибор может работать только в автомoбиле с инжекторным двигателем (в карбюраторных датчика скорости нет, а датчик зажигания есть далеко не во всех). Схема прибора показана на рисунке 1. На этом рисунке плата ARDUINO UNO показана схематично как «вид сверху». Для согласования портов с датчиками используются каскады на транзисторах VT1 и VT2. Так как питание поступает на прибор с выхода замка зажигания он работает только при включенном зажигании.
Датчик скорости, равно как и датчик зажигания автомобиля представляют собой источники импульсов, частота которых зависит от вращения механических деталей автомобиля. Датчик зажигания автомобиля с четырехцилиндровым бензиновым двигателем формирует два импульса за один оборот коленчатого вала. Если у двигателя не четыре цилиндра частота следования импульсов будет иной.
Датчики скорости бывают разные, но в большинстве своем, что особенно касается отечественных автомобилей, они дают 6000 импульсов за один километр пробега. Хотя, бывают, и такие что дают 2500 импульсов на километр, возможно, есть и другие.
Программа на C++ с подробными комментариями приведена в таблице 1.

Действие программы основано на измерении периода импульсов, поступающих с датчиков, и последующего расчета скорости и частоты вращения коленвала.
Для работы используется функция pulseIn , которая измеряет в микросекундах длительность положительного либо отрицательного перепада входного импульса. Так что, для того чтобы узнать период нужно сложить длительность положительного и отрицательного полупериодов.
Далее, скорость движения (при датчике на 6000 импульсов на км) вычисляется по формуле:
F = 0,6/Т
где Т - период в секундах, a F - скорость в км/час. Поскольку период измерен в микросекундах фактически формула:
F= 600000/T
Если датчик на 2500 импульсов на км (японский), то формула будет такой:
F= 1,44/Т
Соответственно, учитывая, что период измерен в микросекундах:
F= 1440000/T
Под другой датчик нужно будет рассчитать другое число, которое делится на период, и подставить его в программу вместо «600000».
Для измерения частоты вращения коленчатого вала используется формула:
F=30/T
где Т - период в секундах, a F - частота вращения коленвала в оборотах в минуту. Поскольку период измерен в микросекундах фактически формула такая:
F= 30000000/T
Затем, результаты выводятся в соответствующие строки ЖК-дисплея. Единицы измерения указаны как «km/h» и «ob/min» (если не нравится, можете изменить).
Если входного сигнала нет, например, включили зажигание, но двигатель не завели, не поехали, то в строках, где нет сигнала, будет надпись «inf».
В принципе, налаживания не требуется. Однако, если неизвестно сколько импульсов на километр дает датчик скорости конкретного автомобиля, это нужно предварительно выяснить. Либо заниматься экспериментальным подгоном числа, которое делится на период, сверяясь со стрелочным спидометром, что весьма хлопотно, или невозможно, если штатный спидометр неисправный (что и могло стать причиной изготовления данного прибора).
Но лучше все же узнать параметры датчика скорости. А потом рассчитать число, которое в программе делится на период. Обозначим это число X, а количество импульсов на километр N. Тогда X можно рассчитать по такой формуле:
X = 3600000000 / N
Например, если датчик дает, допустим, 2500 импульсов на километр:
Х= 3600000000 / 2500 = 1440000
Или, если датчик дает 6000 импульсов на километр:
Х= 3600000000 / 6000 = 600000
Если прибор дает сбои, может потребоваться оптимизация режима работы входных каскадов на транзисторах VT1 и VT2, соответственно, подбором сопротивлений резисторов R3 и R6, а так же емкостей конденсаторов С2 и СЗ.
Литература:
1. Каравкин В. «Ёлочная мигалка на ARDUINO как средство от боязни микроконтроллеров», ж. Радиоконструктор, №11, 2016 г. стр. 25-30.
РК 12-2016

Комментарии  

#1 Андрей 06.10.2019 14:09
Очень интересная статья. Один вопрос, как подключить к генератору дизеля?

Оставлять комментарии могут только зарегистрированные пользователи