- Инфракрасный щелевой оптический датчик скорости LM-393
- Измерение скорости и пройденного расстояния для расчета стоимости проезда
Сегодня цифровые счетчики заменяют аналоговые счетчики во всех секторах, будь то счетчики электроэнергии или счетчики проезда в такси. Основная причина этого в том, что у аналоговых счетчиков есть механические детали, которые имеют тенденцию изнашиваться при длительном использовании, и они не так точны, как цифровые счетчики.
Хорошим примером этого является аналоговый спидометр и одометр, которые используются в старых мотоциклах для измерения скорости и пройденного расстояния. У них есть специальные детали, называемые шестерней и зубчатой рейкой, в которых трос используется для вращения пальца спидометра при вращении колеса. Он изнашивается при длительной эксплуатации, а также требует замены и обслуживания.
В цифровом измерителе вместо механических частей используются некоторые датчики, такие как оптический прерыватель или датчик Холла, для расчета скорости и расстояния. Это более точный, чем аналоговый счетчик, и не требует никакого обслуживания в течение длительного периода времени. Ранее мы построили множество проектов цифровых спидометров с использованием различных датчиков:
- Сделай сам спидометр с использованием Arduino и Android-приложения для обработки данных
- Цепь цифрового спидометра и одометра с использованием микроконтроллера PIC
- Измерение скорости, расстояния и угла для мобильных роботов с помощью датчика LM393 (H206)
Сегодня в этом уроке мы создадим прототип цифрового счетчика стоимости проезда в такси с использованием Arduino. Этот проект вычисляет скорость и расстояние, пройденное колесом такси, и постоянно отображает их на ЖК-дисплее 16x2. И в зависимости от пройденного расстояния он генерирует сумму тарифа, когда мы нажимаем кнопку.
На изображении ниже показана полная настройка проекта цифрового счетчика такси.
Этот прототип имеет автомобильное радиоуправляемое шасси с модулем датчика скорости и колесом энкодера, прикрепленным к двигателю. После измерения скорости мы можем измерить пройденное расстояние и найти стоимость проезда, нажав кнопку. Мы можем установить скорость колеса с помощью потенциометра. Чтобы узнать больше об использовании модуля датчика скорости LM-393 с Arduino, перейдите по ссылке. Давайте посмотрим краткое введение в модуль датчика скорости.
Инфракрасный щелевой оптический датчик скорости LM-393
Это модуль щелевого типа, который может использоваться для измерения скорости вращения колес энкодера. Этот модуль датчика скорости работает на основе оптического прерывателя щелевого типа, также известного как датчик оптического источника. Этот модуль требует напряжения от 3,3 В до 5 В и выдает цифровой выход. Таким образом, он может быть сопряжен с любым микроконтроллером.
Датчик инфракрасного света состоит из источника света (ИК-светодиода) и фототранзисторного датчика. Оба размещены с небольшим промежутком между ними. Когда объект помещается между зазором ИК-светодиода и фототранзистора, он прерывает световой луч, заставляя фототранзистор перестать пропускать ток.
Таким образом, с этим датчиком используется диск с прорезями (колесо энкодера), который может быть прикреплен к двигателю, и когда колесо вращается вместе с двигателем, он прерывает световой луч между ИК-светодиодом и фототранзистором, который включает и выключает выход (создание импульсов).
Таким образом, он выдает ВЫСОКИЙ выходной сигнал, когда есть прерывание между источником и датчиком (когда какой-либо объект помещен между ними), и дает НИЗКИЙ выходной сигнал, когда объект не помещен. В модуле есть светодиод для индикации вызванного оптического прерывания.
Этот модуль поставляется с микросхемой компаратора LM393, которая используется для создания точных сигналов HIGH и LOW на ВЫХОДЕ. Поэтому этот модуль иногда называют датчиком скорости LM393.
Измерение скорости и пройденного расстояния для расчета стоимости проезда
Чтобы измерить скорость вращения, нам нужно знать количество слотов на колесе энкодера. У меня есть колесо энкодера с 20 слотами. Когда они совершают один полный оборот, на выходе получается 20 импульсов. Поэтому для расчета скорости нам нужно количество импульсов, производимых в секунду.
Например
Если в одной секунде 40 импульсов, то
Скорость = Нет. Количество импульсов / количество слотов = 40/20 = 2RPS (оборотов в секунду)
Для расчета скорости в оборотах в минуту (оборотов в минуту) умножьте на 60.
Скорость в об / мин = 2 X 60 = 120 об / мин (оборотов в минуту)
Расстояние измерения
Измерять расстояние, пройденное колесом, очень просто. Перед тем, как рассчитать расстояние, следует знать окружность колеса.
Окружность колеса = π * d
Где d - диаметр колеса.
Значение π равно 3,14.
У меня есть колесо (радиоуправляемое автомобильное колесо) диаметром 6,60 см, поэтому окружность составляет (20,7 см).
Итак, чтобы рассчитать пройденное расстояние, просто умножьте количество обнаруженных импульсов на длину окружности.
Пройденное расстояние = окружность колеса x (количество импульсов / количество прорезей)
Таким образом, когда колесо окружности 20,7 см принимает 20 импульсов, что является одним оборотом колеса энкодера, тогда расстояние, пройденное колесом, рассчитывается следующим образом:
Пройденное расстояние = 20,7 x (20/20) = 20,7 см
Чтобы рассчитать расстояние в метрах, разделите значение расстояния в см на 100.
Примечание: это небольшое автомобильное колесо с дистанционным управлением, в реальном времени автомобили имеют колеса большего размера, чем это. Поэтому я предполагаю, что в этом уроке окружность колеса составляет 230 см.
Расчет стоимости проезда на основе пройденного расстояния
Чтобы получить общую сумму тарифа, умножьте пройденное расстояние на тариф (сумма / метр).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Затем присоедините два внешних прерывания. Первое прерывание делает вывод 2 Arduino выводом прерывания и вызывает ISR (счетчик), когда на выводе 2 обнаружен НАРАЩИВАНИЕ (ОТ НИЖЕГО НА ВЫСОКОЕ). Этот вывод 2 подключен к выходу D0 модуля датчика скорости.
А второй делает вывод 3 Arduino выводом прерывания и вызывает ISR (generatefare), когда на выводе 3 обнаруживается HIGH. Этот вывод соединен с кнопкой с понижающим резистором.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Теперь давайте посмотрим на ISR, который мы использовали здесь:
ISR1- count () ISR вызывается, когда на контакте 2 (подключенном к датчику скорости) происходит рост (от низкого до высокого).
void count () // ISR для отсчетов от датчика скорости { counter ++; // увеличиваем значение счетчика на один оборот ++; // Увеличиваем значение поворота на одну задержку (10); }
ISR2-timerIsr () ISR вызывается каждую секунду и выполняет те строки, которые присутствуют внутри ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); скорость поплавка = (counter / 20.0) * 60.0; оборотов поплавка = 230 * (вращение / 20); Rotationinm = оборотов / 100; lcd.setCursor (0,0); lcd.print ("Расстояние (м):"); lcd.print (вращение в дюймах); lcd.setCursor (0,1); lcd.print ("Скорость (об / мин):"); lcd.print (скорость); счетчик = 0; int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, моторная скорость); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Эта функция содержит строки, которые фактически сначала отсоединяют таймер 1 и вывод прерывания 2, потому что у нас есть операторы печати ЖК-дисплея внутри ISR.
Для расчета СКОРОСТИ в оборотах в минуту мы используем приведенный ниже код, где 20.0 - это количество предустановленных слотов на колесе энкодера.
скорость поплавка = (counter / 20.0) * 60.0;
А для расчета расстояния используется следующий код:
оборотов поплавка = 230 * (вращение / 20);
Окружность колеса принята равной 230 см (это нормально для автомобилей реального времени).
Затем преобразуйте расстояние в м, разделив расстояние на 100.
Rotationinm = оборотов / 100;
После этого мы отображаем СКОРОСТЬ и РАССТОЯНИЕ на ЖК-дисплее.
lcd.setCursor (0,0); lcd.print ("Расстояние (м):"); lcd.print (вращение в дюймах); lcd.setCursor (0,1); lcd.print ("Скорость (об / мин):"); lcd.print (скорость);
ВАЖНО: мы должны сбросить счетчик на 0, потому что нам нужно получить количество обнаруженных плюсов за секунду, поэтому мы используем эту строку
счетчик = 0;
Затем считайте аналоговый вывод A0 и преобразуйте его в цифровое значение (от 0 до 1023) и затем сопоставьте эти значения с 0-255 для выхода PWM (установка скорости двигателя) и, наконец, запишите эти значения PWM, используя функцию analogWrite, которая подключена к ULN2003 Мотор IC.
int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, моторная скорость);
ISR3: generatefare () ISR используется для генерации суммы тарифа на основе пройденного расстояния. Этот ISR вызывается, когда на выводе 3 прерывания обнаруживается ВЫСОКИЙ уровень (при нажатии кнопки). Эта функция отключает прерывание на выводе 2 и прерывание от таймера, а затем очищает ЖК-дисплей.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); закрепить на 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); плавающие рупии = вращение в мм * 5; жк. принт (рупии); lcd.setCursor (0,1); lcd.print («5 рупий за метр»); }
После этого пройденное расстояние умножается на 5 (я использовал 5 для ставки 5 индийских рупий за метр). Вы можете изменить по своему желанию.
плавающие рупии = вращение в дюймах * 5;
После расчета значения суммы отобразите его на ЖК-дисплее, подключенном к Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); жк. принт (рупии); lcd.setCursor (0,1); lcd.print («5 рупий за метр»);
Полный код и демонстрационное видео приведены ниже.
Вы можете дополнительно улучшить этот прототип, повысив точность, надежность и добавив больше функций, таких как приложение для Android, цифровые платежи и т. Д., И разработать его как продукт.