- Необходимые материалы
- Расчет скорости и отображение ее на аналоговом спидометре
- Принципиальная схема и подключения
- Объяснение программирования
Измерение скорости / об / мин транспортного средства или двигателя всегда было увлекательным занятием. В этом проекте мы собираемся построить аналоговый спидометр с использованием Arduino. Мы будем использовать модуль ИК-датчика для измерения скорости. Для этого есть другие способы / датчики, например датчик Холла для измерения скорости, но использовать ИК-датчик легко, потому что модуль ИК-датчика является очень распространенным устройством, и мы можем легко получить его на рынке, а также его можно использовать на любом типе мотор / Транспортное средство.
В этом проекте мы собираемся показать скорость как в аналоговой, так и в цифровой форме. Выполняя этот проект, мы также улучшим наши навыки в изучении Arduino и шагового двигателя, поскольку этот проект предполагает использование прерываний и таймеров. В конце этого проекта вы сможете рассчитать скорость и расстояние, пройденное любым вращающимся объектом, и отобразить их на ЖК-экране 16x2 в цифровом формате, а также на аналоговом измерителе. Итак, давайте начнем с этой схемы спидометра и одометра с Arduino.
Необходимые материалы
- Ардуино
- Биполярный шаговый двигатель (4 провода)
- Драйвер шагового двигателя (модуль L298n)
- Модуль ИК-датчика
- ЖК-дисплей 16 * 2
- Резистор 2.2k
- Соединительные провода
- Макетная плата.
- Источник питания
- Распечатка изображения спидометра
Расчет скорости и отображение ее на аналоговом спидометре
Инфракрасный датчик - это устройство, которое может обнаруживать присутствие объекта перед ним. Мы использовали двухлопастной ротор (вентилятор) и разместили рядом с ним ИК-датчик таким образом, чтобы каждый раз, когда лопасти вращались, ИК-датчик обнаруживал его. Затем мы используем таймеры и прерывания в Arduino, чтобы вычислить время, необходимое для одного полного вращения двигателя.
Здесь, в этом проекте, мы использовали прерывание с наивысшим приоритетом для определения скорости вращения и настроили его в режиме повышения. Так что всякий раз, когда выходной сигнал датчика переходит из низкого в высокий, будет выполняться функция RPMCount () . И поскольку мы использовали ротор с двумя лопастями, это означает, что функция будет вызываться 4 раза за один оборот.
Как только затраченное время известно, мы можем рассчитать число оборотов в минуту, используя следующие формулы: где 1000 / затраченное время даст нам число оборотов в секунду (число оборотов в секунду), а дальнейшее умножение его на 60 даст вам число оборотов в минуту (число оборотов в минуту).
об / мин = (60/2) * (1000 / (миллис () - время)) * REV / bladesInFan;
После получения числа оборотов можно рассчитать скорость по следующей формуле:
Скорость = об / мин * (2 * Пи * радиус) / 1000
Мы знаем, что Pi = 3,14 и радиус 4,7 дюйма
Но сначала нам нужно преобразовать радиус в метры из дюймов:
радиус = ((радиус * 2,54) / 100,0) метров Скорость = об / мин * 60,0 * (2,0 * 3,14 * радиус) / 1000,0) в километрах в час
Здесь мы умножили число оборотов в минуту на 60, чтобы преобразовать число оборотов в минуту в число оборотов в час (оборот в час), и разделили на 1000, чтобы преобразовать метры в час в километры в час.
После определения скорости в км / ч мы можем отобразить эти значения прямо на ЖК-дисплее в цифровом виде, но чтобы показать скорость в аналоговой форме, нам нужно выполнить еще один расчет, чтобы выяснить, нет. шагов, шаговый двигатель должен двигаться, чтобы показывать скорость на аналоговом измерителе.
Здесь мы использовали 4-проводный биполярный шаговый двигатель для аналогового счетчика, который имеет 1,8 градуса, что означает 200 шагов на оборот.
Теперь мы должны показать на спидометре 280 км / ч. Итак, чтобы показать, что шаговый двигатель на 280 км / ч должен вращаться на 280 градусов.
Итак, у нас maxSpeed = 280
И maxSteps будет
maxSteps = 280 / 1,8 = 155 шагов
Теперь у нас есть функция в нашем коде Arduino, а именно функция карты, которая используется здесь для преобразования скорости в шаги.
Шаги = карта (скорость, 0, maxSpeed , 0, maxSteps);
Итак, теперь у нас есть
шаги = карта (скорость, 0,280,0,155);
После расчета шагов мы можем напрямую применить эти шаги в функции шагового двигателя для его перемещения. Нам также необходимо позаботиться о текущих шагах или угле шагового двигателя, используя данные вычисления.
currSteps = Шаги шаги = currSteps-preSteps preSteps = currSteps
здесь currSteps - это текущие шаги, полученные из последнего вычисления, а preSteps - это последние выполненные шаги.
Принципиальная схема и подключения
Принципиальная схема аналогового спидометра проста, здесь мы использовали ЖК-дисплей 16x2 для отображения скорости в цифровой форме и шаговый двигатель для вращения стрелки аналогового спидометра.
ЖК-дисплей 16x2 подключается к следующим аналоговым выводам Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Резистор 2,2 кОм используется для настройки яркости ЖК-дисплея. Модуль ИК-датчика, который используется для обнаружения лопастей вентилятора для расчета скорости вращения, подключен к прерыванию 0, что означает вывод D2 Arduino.
Здесь мы использовали драйвер шагового двигателя, а именно модуль L293N. Контакты IN1, IN2, IN3 и IN4 драйвера шагового двигателя напрямую подключены к D8, D9, D10 и D11 Arduino. Остальные соединения приведены на принципиальной схеме.
Объяснение программирования
Полный код для Arduino Speedomete r приведен в конце, здесь мы объясняем несколько важных его частей.
В программную часть мы включили все необходимые библиотеки, такие как библиотека шаговых двигателей, библиотека LCD LiquidCrystal и заявленные контакты для них.
#включают
После этого мы взяли некоторые переменные и макросы для выполнения расчетов. Расчеты уже объяснены в предыдущем разделе.
изменчивый байт REV; беззнаковое long int rpm, об / мин; беззнаковый длинный st = 0; без подписи долгое время; int ledPin = 13; int led = 0, RPMlen, prevRPM; int flag = 0; int flag1 = 1; #define bladesInFan 2 радиус поплавка = 4.7; // дюйм int preSteps = 0; float stepAngle = 360.0 / (float) stepsPerRevolution; float minSpeed = 0; float maxSpeed = 280.0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
После этого мы инициализируем ЖК-дисплей, последовательный порт, прерывание и шаговый двигатель в функции настройки.
пустая настройка () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, ВЫХОД); lcd.begin (16,2); lcd.print («Спидометр»); задержка (2000); attachInterrupt (0, RPMCount, RISING); }
После этого мы считываем число оборотов в цикле и выполняем расчет, чтобы получить скорость и преобразовать ее в шаги для запуска шагового двигателя, чтобы показать скорость в аналоговой форме.
void loop () { readRPM (); радиус = ((радиус * 2,54) / 100,0); // преобразование в счетчик int Speed = ((float) RPM * 60.0 * (2.0 * 3.14 * radius) /1000.0); // Обороты за 60 минут, диаметр шины (2pi r) r - радиус, 1000 для преобразования в км int Steps = map (Speed, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (Скорость); Serial.println («Кмч»); lcd.setCursor (0,0); lcd.print ("Об / мин:"); lcd.print (об / мин); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Скорость:"); lcd.print (Скорость); lcd.print («км / ч»); flag1 = 0; } int currSteps = Шаги;int steps = currSteps-preSteps; preSteps = currSteps; myStepper.step (шаги); }
Здесь у нас есть функция reapRPM () для расчета числа оборотов в минуту.
int readRPM () { if (REV> = 10 or millis ()> = st + 1000) // ЭТО БУДЕТ ОБНОВЛЯТЬСЯ ПОСЛЕ КАЖДЫХ 10 ЧТЕНИЙ или 1 секунды в режиме ожидания { if (flag == 0) flag = 1; об / мин = (60/2) * (1000 / (миллис () - время)) * REV / bladesInFan; время = миллис (); REV = 0; int x = об / мин; в то время как (х! = 0) { х = х / 10; RPMlen ++; } Serial.println (об / мин, DEC); RPM = об / мин; задержка (500); ст = миллис (); flag1 = 1; } }
Наконец, у нас есть программа прерывания, которая отвечает за измерение скорости вращения объекта.
void RPMCount () { REV ++; если (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, led); }
Вот как вы можете просто построить аналоговый спидометр с помощью Arduino. Он также может быть построен с использованием датчика Холла, а скорость может отображаться на смартфоне, следуйте этому руководству по спидометру Arduino для того же.