Как сделать тахометр на Ардуино

Тахометр необходим для подсчета значения RPM (Rotations per minute) — количества оборотов вентилятора, колеса или иного вращающегося оборудования. В простейшем случае это система из инфракрасного приемника, передающего устройства и контроллера: когда, например, ИК-луч прерывается, значит, вращающийся элемент его перекрыл. Информацию получает контроллер и вычисляет на ее основе частоту вращения. В продаже есть множество образцов заводских приборов, но счетчик оборотов можно сделать и самостоятельно с помощью программируемой платы. Далее мы рассмотрим, как собрать несложный тахометр на Ардуино.

Тахометр на Ардуино

Принцип работы

Как уже указывалось, простой тахометр состоит из трех основных модулей:

  • передатчик луча (инфракрасного или видимого спектра);
  • приемник;
  • плата управления.

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

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

  • генерирует на входе постоянный сигнал 5 В;
  • при обрыве связи понижает таковой до 0 В;
  • после этого увеличивает показатель счетчика вращений на 1;
  • выполняет дополнительные вычисления и по триггеру выводит RPM на дисплей.

Компоненты

Для сборки понадобятся:

  • плата Arduino Uno. Ключевой управляющий и логический элемент, принимающий сообщения о прерывании светового луча и делающий вывод о нахождении на участке «приемник-передатчик» вращающегося объекта. Импульсные команды и встроенный таймер позволят системе вычислить обороты вентилятора;контролллер arduino uno
  • макетная плата;
  • ЖК-экран 16×2. Служит для понятного отображения счетчика RPM;
  • резистор подстроечный на 5 кОм. С его помощью регулируется контрастность упомянутого выше дисплея. Резистор позволяет менять напряжение от 0 до +5 вольт и настраивать удобный контраст экрана;
  • SIP-разъемы;
  • перемычки;
  • транзисторы — 2 штуки (2N3904 и 2N3906). Они преобразуют уровень сигнала с фототранзистора до «понятного» плате Ардуино уровня 0 или 5 В;
  • фототранзистор — 1 шт. При падении на этот модуль сильного света транзистор перекрывается. Пока ИК-диод горит, фотодатчик остается «открытым», но при перекрытии он, разумеется, перейдет в закрытое состояние;
  • ИК-светодиод — 1 шт. Основная часть передающего модуля;
  • резисторы на 10 Ом, 100 и 15–16 кОм — по одной штуке;
  • небольшой пятивольтовый ПК-вентилятор.

Для связи будет служить подсоединенный через низкоомный резистор ИК-светодиод: так луч выйдет ярче. Сигнал с диода пойдет на фототранзистор, «закрывающийся» при отключении светового потока. В качестве подконтрольного объекта используется компьютерный вентилятор, частоту вращения которого и станет считать прибор. Он будет висеть между передатчиком и приемником.

Вентилятор

Подключенный по транзисторной схеме ИК-приемник создает прерывания и отправляет их на контроллер Ардуино. Плата обрабатывает их через процедуры из программной библиотеки для работы с дисплеями Arduino LCD и выводит данные на экран.

Принципиальная схема будущего устройства:

Схема тахометра

Особенности схемы тахометра

Приведенная раскладка имеет некоторые нюансы:

  • на интерфейсе ЖК-дисплея к экрану подключены 4 контакта передачи данных и 2 управляющих;
  • сигнал перекрытия инфракрасного луча поступает на цифровой вход 2 контроллера Arduino. По этому прерыванию плата зафиксирует импульс и увеличит внутренний счетчик тахометра.

Код программы

Для создания тахометра на плате Ардуино нужна не только аппаратная часть, но и программная — загружаемый в систему скетч. Рассматриваемый пример строится на упомянутой выше библиотеке функций Arduino LCD (LiquidCrystal.h). Для упрощения понимания работы последней можно привести пример простого скетча: он выводит на экран стандартную фразу «Hello, World!». Код удобно использовать для тестирования оборудования.

Надпись hello world

Тестовый скетч

В нашем приборе будет интенсивно применяться метод lcd.print(millis()/1000).

Полный листинг программы (доступен по ссылке): https://cloud.mail.ru/public/F5Xc/styi6qGmt

Считаем RPM вентилятора

Подсчет ведется по прерываниям луча инфракрасного передатчика. Метод удобный, но тестовым объектом выступает вентилятор с семью лопастями. Значит, на один полный оборот придется семь прерываний луча, и только завершение этого цикла будет означать увеличение счетчика RPM на единицу.

Итак, каждое седьмое прерывание равно одному обороту. Зная необходимое для такового время, можно вычислить и значение RPM. Вычисления выполняются по формулам:

  • время на полный оборот вентилятора — P×(µS/об.);
  • RPM = обороты в минуту = 60 000 000 × (µS/мин) × (1/P) = (60 000 000 / P) × (об/мин).

Скетч выполняет две задачи:

  • работа основного цикла;
  • обновление штампа времени зафиксированных прерываний ИК-потока.

В главном цикле наш контроллер считает количество RPM и обновляет информацию на экране.

rpm на экране

Учитывая особенности кода, последнее станет происходить несколько раз в секунду. RPM тоже считается в основном цикле, поскольку прерывания обрабатываются отдельной функцией программы.

Важно: в рассматриваемом примере использован семилопастный вентилятор. С другими, например, на 4 лопасти (и в принципе для устройств с некоторым известным заранее количеством прерываний) в коде необходимо поменять конструкцию time×7 на time×4 (или иное требуемое число).

Точность работы составляет около 96%, что вполне достаточно для бытового применения.

Сборка схемы

Когда все детали подготовлены, можно приступать к монтажу.

Тахометр в разобранном виде

Первыми подсоединяются +5 В питание и линии управления/поступления данных экрана. Затем собственно жидкокристаллический мини-дисплей, регулятор контрастности и светодиод. Тахометр на Arduino в собранном виде:

Тахометр в сборе

Необходимо выдержать некоторое расстояние между транзистором и диодом — для возможности свободно поместить там контролируемый объект. Чем он больше, тем выше должно быть и это расстояние.

Расстояние между приемником и передатчиком

Применение тахометра

В результате получается способный с достаточно высокой точностью измерять RPM нужного объекта прибор. Это основное предназначение тахометра.

Но датчики обрыва луча (а тахометр и есть датчик) пригодны не только для этих целей. Так, их удобно использовать как сенсор открытия-закрытия дверей, как элемент простой сигнализации (фиксация движения), и в иных задачах.

Еще один пример тахометра

Рассмотрим другой образец схемы — на основе датчика присутствия линии и библиотеки 4Led. Измерение проводится по нанесенной на объект контрастной черте.

Важно: цвет черты не имеет значения.

Понадобятся:

  • плата микрокомпьютера Arduino Uno;
  • аналоговый детектор линии Trema — 1 шт.;
  • четырехразрядный LED-индикатор Trema — 1 шт.;
  • Trema Shield (блок расширения) — 1 шт.

Сборка

Индикатор можно подключить к аналоговым или цифровым выходам контроллера. Используется два вывода, номера которых указываются в скетче. Контакт датчика линии также задается в коде и «цепляется» на соответствующий аналоговый вход микрокомпьютера.

Тахометр trema snield

Механизм действия

Такой вариант тахометра действует следующим образом:

  • информация на ЖК-панель идет при переходе сенсора линии со «светлой» области на «темную»;
  • программа проверяет цвет поля под датчиком. Если темный, выполняется переход к следующему шагу;
  • на нем контроллер отображает на экране число RPM и сохраняет время обновления информации;
  • если темное/светлое фиксируется датчиком больше 6 секунд, код считает это остановкой и выводит на дисплей надпись STOP.

Скетч для загрузки (также есть по ссылке): https://cloud.mail.ru/public/QQe7/Di8RmxRnf

Заключение

Как видно, собрать несложный и функциональный тахометр на Ардуино довольно просто. При этом можно уложиться в сумму около 10–20  USD и получить на выходе компактное, удобное и функциональное устройство с достаточно высокой для бытовых задач точностью. А благодаря модульности Ардуино и богатой экосистеме схему можно дорабатывать и дополнять новой функциональностью.

Видео по теме

Ссылка на основную публикацию