Автомобильный вольтметр и тахометр на ARDUINO UNO

Рейтинг:  0 / 5

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

Каравкин В.
У очень многих современных автомобилей нет ни тахометра ни вольтметра. Возможно, производители и правы, и знать водителю частоту вращения коленвала двигателя и напряжение в бортовой сети не обязательно. Но, если все же хочется, можно автомобиль дооборудовать тахометром и вольтметром. В продаже есть такие приборы, выводящие на цифровой индикатор частоту вращения и напряжение. Но, большинство из них сделаны на светодиодных индикаторах, что не очень удобно в автомобиле, потому что ярким солнечным днем цифры не видны, а ночью они слишком яркие. К тому же, обычно выводится только один параметр, а для просмотра другого нужно нажимать кнопку.
Здесь приводится описание очень несложного в изготовлении, благодаря применению готового модуля - ARDUINO UNO, прибора, который одновременно показывает и напряжение и частоту вращения коленвала. Причем, показывает это он на очень четком, подсвечиваемом ЖК-дисплее, который очень хорошо виден как днем, так и ночью. Следует заметить, что и себестоимость данного прибора относительно невысока, если покупать ARDUINO UNO и дисплей на радиорынке или на Aliexpress.


Индикатором служит ЖК-дисплей типа 1602А, он стандартный, на основе контроллера HD44780. Обозначение 1602А фактически значит, что он на две строки по 16 символов в строке.
Основой прибора служит ARDUINO UNO это относительно недорогой готовый модуль, - небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания.
Тем, кто незнаком с ARDUINO UNO, рекомендую сначала ознакомиться со статьей Л.1.
Прибор подключается по питанию к выходу замка зажигания автомобиля, а сигнал на измерение частоты вращения коленвала получает с датчика Холла, который является датчиком зажигания. Датчиком напряжения служит цепь питания прибора. То есть, он измеряет то напряжение, которым питается.
Прибор может работать только в автомобиле с электронной системой зажигания (в автомобиле с электромеханической системой зажигания датчика Холла нет).
Схема прибора показана на рисунке 1. На этом рисунке плата ARDUINO UNO показана схематично как «вид сверху». Для согласования цифрового порта с датчиком Холла используются каскад на транзисторе VT1.
Для измерения напряжения, простой делитель напряжения на резисторах R5 и R6. Он нужен потому, что максимальное напряжение, подаваемое на аналоговый вход не должно быть более 5V.
Так как питание поступает на прибор с выхода замка зажигания он работает только при включенном зажигании.
Датчик зажигания автомобиля с четырехцилиндровым бензиновым двигателем формирует два импульса за один оборот коленчатого вала. Если у двигателя не четыре цилиндра частота следования импульсов будет другой. Здесь именно под четырехцилиндровый мотор.
Программа на C++ с подробными комментариями приведена в таблице 1.

Действие программы по измерению частоты вращения коленвала основано на измерении периода импульсов, поступающих с датчика, и последующего расчета частоты вращения коленвала.
Для работы используется функция pulseln , которая измеряет в микросекундах длительность положительного либо отрицательного перепада входного импульса. Так что, для того чтобы узнать период нужно сложить длительность положительного и отрицательного полупериодов.
Далее, частота вращения вычисляется по формуле:
F=30/T
где Т - период в секундах, a F - частота вращения коленвала в оборотах в минуту. Поскольку период измерен в микросекундах фактически формула такая:
F= 30000000/T
Измерение длительности периода состоит из трех этапов, сначала измеряются длительности положительной и отрицательной полуволны в строках:
Htime=pulseIn(10,HIGH); Ltime=pulseIn(10,LOW);
Затем, происходит вычисление полного периода в строке:
Ttime=Htime+Ltime;
И потом, вычисление частоты вращения коленвала в строке:
frequency=30000000/Ttime;
Действие программы по измерению напряжения основано на чтении данных с аналогового входа и расчета результата измерения.
Выход аналогового порта преобразуется АЦП микроконтроллера в цифровую форму. Для получения результата в единицах вольт, нужно его умножить на 5 (на опорное напряжение, то есть, на напряжение питания микроконтроллера) и разделить на 1024.
Для того чтобы можно было измерять напряжение более 5V, вернее, более напряжения питания микроконтроллера, потому что реальное напряжение на
выходе 5-вольтового стабилизатора на плате ARDUINO UNO может отличаться от 5V, и обычно немного ниже, нужно на входе применить обычные резистивные делители.
Здесь это делитель напряжения на резисторах R5 и R6.
При этом, для приведения показаний прибора к реальному значению входного напряжения, нужно в программе задать деление результата измерения на коэффициент деления резистивного делителя. А коэффициент деления, обозначим его «К», можно вычислить по такой формуле:
К = R6 / (R5+R6)
Очень любопытно то, что резисторы в делителях совсем не обязательно должны быть высокоточными. Можно взять обычные резисторы, затем измерить их фактическое сопротивление точным омметром, и уже в формулу подставить эти измеренные значения. Получится значение «К» для конкретного делителя, которое и нужно будет подставлять в формулу.
Чтение данных с аналогового порта происходит в строке:
vout=analogRead(analogInput);
Затем, производится вычисление фактического напряжения с учетом коэффициента деления делителя входного напряжения:
volt=vout*5.0/1024.0/0.152;
В этой строке число 5.0 - это напряжение на выходе стабилизатора платы ARDUINO UNO. В идеале должно быть 5V, но для точной работы вольтметра это напряжение нужно предварительно измерить. Подключите источник питания напряжением 12V и измерьте достаточно точным вольтметром напряжение +5V на разъеме POWER платы. Что будет, то и вводите в эту строку вместо 5.0, например, если будет 4.85V, строка будет выглядеть так:
volt=vout*4.85/1024.0/0.152; На следующем этапе нужно будет измерить фактические сопротивления резисторов R5 и R6 и определить коэффициент К (указан 0.152) для этой строки по формуле:
К1 = R6 / (R5+R6)
Допустим, получилось К = 0.159, так и пишем:
volt=vout*4.85/1024.0/0.159;
Таким образом, в текст программы нужно внести изменения соответственно фактическому напряжению на выходе 5-воль-тового стабилизатора платы ARDUINO UNO и согласно фактическому коэффициенту деления резистивного делителя.
Затем, результаты измерений выводятся на ЖК-дисплей. Напряжение вносится в первую строку дисплея, а частота вращения во вторую. Единицы измерения указаны как «V» и «ob/min».
Если входного сигнала с датчика Холла нет, например, включили зажигание, но
двигатель не завели, то в строке, где индицируется частота вращения, будет надпись «inf».
Если прибор дает сбои при измерении частоты вращения коленвала, может потребоваться оптимизация режима работы входного каскада на транзисторе VT1, соответственно, подбором сопротивления резистора R3, а так же емкости конденсатора С2.
Статья в формате pdf
Литература:
1. Каравкин В. «Ёлочная мигалка на ARDUINO как средство от боязни микроконтроллеров», ж. Радиоконструктор, №11,2016г. стр. 25-30.
2. Каравкин В. «Частотомер на ARDUINO». ж. Радиоконструктор, №12, 2016г., стр. 12-15.
3. Каравкин В. «Спидометр и тахометр на ARDUINO для автомобиля», ж. Радиоконструктор, №12, 2016, стр. 34-36.
Радиоконструктор 01-2017

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