Аналоговый спидометр на основе Arduino и инфракрасного датчика


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

Внешний вид аналогового спидометра на основе Arduino и инфракрасного датчика

В рассматриваемом проекте мы будем показывать скорость как в аналоговой, так и в цифровой форме. Также в данной статье мы можем улучшить свои познания в области шаговых двигателей и использования прерываний и таймеров в Arduino. В результате реализации данного проекта мы сможем измерять скорость любого вращающегося объекта, отображать ее в цифровой форме на экране ЖК дисплея 16x2 и в аналоговой форме на соответствующем указателе.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Биполярный (двухполюсный) шаговый двигатель (4 провода) (bipolar stepper motor).
  3. Драйвер шагового двигателя L298n (Stepper motor driver) (купить на AliExpress).
  4. Модуль инфракрасного датчика (IR sensor module) (купить на AliExpress).
  5. ЖК дисплей 16х2 (16*2 LCD display) (купить на AliExpress).
  6. Резистор 2,2 кОм (купить на AliExpress).
  7. Соединительные провода.
  8. Макетная плата.
  9. Источник питания.
  10. Напечатанная на принтере картинка спидометра.

Внешний вид компонентов для проекта

Расчет скорости и ее отображение на аналоговом спидометре

Инфракрасный (ИК) датчик представляет собой устройство которое может обнаруживать присутствие объекта перед собой. Для тестирования работы проекта мы использовали двухлопастной вентилятор, который поместили перед инфракрасным датчиком, поэтому всегда когда лопасть вентилятора будет проходить над датчиком ИК датчик будет обнаруживать это. Для расчета времени одного оборота вентилятора мы задействуем таймеры и прерывания платы Arduino. В определенной степени данная часть проекта похожа на тахометр на основе платы Arduino, ранее рассматривавшийся на нашем сайте.

Внешний вид инфракрасного датчика

В этом проекте мы будем использовать прерывание самого высокого приоритета для определения числа оборотов вентилятора в минуту (rpm - revolutions per minute). Мы будем применять это прерывание в нарастающем режиме. То есть всегда когда выход датчика будет изменять свое состояние с LOW на High будет вызываться на выполнение функция RPMCount(). А поскольку в проекте мы использовали двухлопастной вентилятор это значит что данная функция будет вызываться 4 раза за один оборот.

Когда мы определим время одного оборота мы можем рассчитать по ниже приведенной формуле число оборотов в минуту (RPM). В этой формуле 1000/time позволит определить нам число оборотов в секунду (RPS - revolution per second), а умножив полученное значение на 60 мы получим число оборотов в минуту.

После расчета числа оборотов в минуту (RPM) скорость можно определить по следующей формуле:

Поскольку число пи нам известно (Pi = 3.14), а радиус в нашем случае составляет величину 4.7 дюйма, то сначала конвертируем радиус из дюймов в метры:

В представленной формуле мы умножаем rpm на 60 чтобы конвертировать rpm в rph (revolution per hour – число оборотов в час) и делим на 1000 чтобы преобразовать м/ч (метров в час) в км/ч.

После получения скорости в км/ч мы можем непосредственно показать ее на экране ЖК дисплея в цифровой форме, однако чтобы показать ее в аналоговой форме нам необходимо произвести дополнительные преобразования, в частности, мы должны определить число шагов, которое должен сделать наш шаговый двигатель.

В нашем проекте мы используем 4-проводный биполярный шаговый двигатель, который совершает 200 шагов за один оборот, то есть за один шаг он поворачивается на 1.8 градуса.

Внешний вид 4-проводного биполярного шагового двигателя

К примеру, нам необходимо показать скорость 280 км/ч на спидометре – для этого шаговый двигатель должен повернуться на 280 градусов. То есть максимальная скорость у нас будет равна maxSpeed = 280, а максимальное число шагов (maxSteps) будет равно:

Для преобразования скорости в число шагов мы будем использовать функцию Arduino под названием map:

Итого, получим:

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

где currSteps – текущее число шагов, полученное в результате предыдущего вычисления скорости, а preSteps – последнее выполненное число шагов.

Работа схемы

Схема аналогового спидометра на основе платы Arduino представлена на следующем рисунке.

Схема аналогового спидометра на основе платы Arduino

В схеме мы будем использовать ЖК дисплей 16x2 для отображения скорости в цифровой форме и шаговый мотор, с помощью вращения которого будет показываться скорость в аналоговой форме.

ЖК дисплей подключен к следующим контактам платы Arduino:

RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0

Резистор 2,2 кОм используется для установки яркости ЖК дисплея. Модуль инфракрасного датчика (IR sensor module), который используется для определения числа оборотов лопастей вентилятора, подключен к контакту D2 платы Arduino, который в данном случае используется как вход внешнего прерывания 0 (interrupt 0).

Внешний вид собранной конструкции для проекта аналогового спидометра

В качестве драйвера мотора мы использовали модуль L293N. Контакты IN1, IN2, IN3 и IN4 драйвера шагового двигателя непосредственно подключены к контактам D8, D9, D10 и D11 платы Arduino.

Объяснение программы для Arduino

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

В программе первым делом мы должны подключить все используемые библиотеки – для работы с шаговым двигателем и для работы с ЖК дисплеем, а также инициализировать контакты Arduino, к которым эти устройства подключены.

После этого нам необходимо объявить в программе используемые переменные.

После этого в функции setup мы инициализируем ЖК дисплей, последовательный порт, прерывание и шаговый двигатель.

После этого в функции loop мы будем считывать значение rpm (число оборотов в минуту) и производить необходимые вычисления для расчета скорости и преобразования значения скорости в необходимое число шагов для шагового двигателя чтобы отображать скорость в аналоговой форме.

Также в программе мы должны запрограммировать функцию readRPM() для расчета числа оборотов в минуту.

И, наконец, нам будет необходима программа обработки прерываний, которая будет измерять количество оборотов объекта (в нашем случае лопастей вентилятора).

Для дальнейшего усовершенствования проекта можно применить датчик Холла и выводить измеряемую скорость на приложение в смартфоне как это сделано в проекте спидометра для велосипеда.

Исходный код программы (скетча)

Видео, демонстрирующее работу аналогового спидометра

(1 голосов, оценка: 5,00 из 5)
Загрузка...
2 931 просмотров

Комментарии

Аналоговый спидометр на основе Arduino и инфракрасного датчика — 12 комментариев

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

    • Почему руками? Ведь направление вращения шагового двигателя можно изменять. На представленном видео видно же что стрелка поворачивается как по часовой, так и против часовой стрелки

  2. Шляпа какая то, стрелка ходит как стрелка часов. Вы когда то видели спидометры в машине, как там все плавно? Не пытались побороть проблему рывков?

    • Петр, ну поставьте более дорогой и качественный шаговый двигатель и тогда, я думаю, проблему этих небольших рывков (на мой взгляд, они не так критичны) можно будет побороть без труда

  3. Здравствуйте, в инете много схем для создания спидометра на ардуино на датчике. GPS, но у всех проектов вывод показаний скорости реализуется на экранчик, возможно ли скорость вывести на аналоговый спидометр? В данный момент на плате стоит биполярный двигатель (4 контакта). Спасибо.

    • Здравствуйте, а чем вас этот проект не устраивает? В нем как раз вывод показаний скорости происходит на аналоговый спидометр. Реализовано это с помощью шагового двигателя. С помощью биполярного двигателя это тоже можно сделать, но это будет уже посложнее. А если вам нужно получать показания скорости от GPS датчика, то в приведенной в данном проекте схеме просто замените инфракрасный датчик на модуль GPS

      • Так а подключение модуля куда и как, программу менять нужно. Проект мне нужен на gps для работы спидометра моего автомобиля, на нем нет ни одного датчика, ни на АКПП, ни на АБС.
        Могу ли я вас попросить осуществить это? Оплату обсудим! И на счёт моторчика я не совсем уверен что он биполярный, но идёт на 4 контакта , 2 катушки .
        Спасибо что ответили.

        • GPS-модуль подключается к последовательному порту платы Ардуино. У нас на сайте уже есть похожий проект - GPS спидометр на Arduino и OLED дисплее. Вам в него нужно просто вместо OLED дисплея добавить двигатель, который будет вращать стрелку аналогового спидометра.
          Помочь с проектом не могу, извините, временно пока нет доступа к оборудованию. Но могу ответить на ваши вопросы, которые вы будете задавать в комментариях на моем сайте.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *