Flprog тахометр на ардуино

Содержание

Тахометр на Arduino

Тахометр на Arduino.

Ссылки на используемые компоненты:

ЖК-дисплей LCD1602 (синий экран) — http://ali.pub/alnru

Модуль расширителя интерфейса (I2C) — http://ali.pub/dwj5n

Часы реального времени Ds3231 — http://ali.pub/1e3pfr

Тахометр на Arduino

Оставьте комментарий:

Юный Технарь:

Помощь проекту:

Деньги можно перечислить на карту Сбербанка России:

4276 5400 2194 5088

Поиск

Последние статьи

Идея — датчик уровня жидкости на тензода…

Идея — датчик уровня жидкости на тензодатчике своими руками.

Фреймворк JeeUI2 в программе FLProg — Ко…

Фреймворк JeeUI2 в программе FLProg — Контролер для полива своими руками.

Мой канал на YouTube

Подпишитесь!

2015, Arduinoprom.ru — блог Чилингаряна Грачика. Все авторские права на тексты принадлежат ему.

При размещении текстов и видеоматериалов на сторонних ресурсах активная гиперссылка ОБЯЗАТЕЛЬНА.

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

Источник

Тахометр для компьютерного вентилятора

Тахометр для компьютерного вентилятора. RGB индикация скорости двигателя.

Ссылки на компоненты:

ЖК-дисплей LCD1602 (синий экран) — http://ali.pub/alnru

Модуль расширителя интерфейса (I2C) — http://ali.pub/dwj5n

Схема тахометра для компьютерного вентилятора

Оставьте комментарий:

Юный Технарь:

Помощь проекту:

Деньги можно перечислить на карту Сбербанка России:

4276 5400 2194 5088

Поиск

Последние статьи

Идея — датчик уровня жидкости на тензода…

Идея — датчик уровня жидкости на тензодатчике своими руками.

Фреймворк JeeUI2 в программе FLProg — Ко…

Фреймворк JeeUI2 в программе FLProg — Контролер для полива своими руками.

Мой канал на YouTube

Подпишитесь!

2015, Arduinoprom.ru — блог Чилингаряна Грачика. Все авторские права на тексты принадлежат ему.

При размещении текстов и видеоматериалов на сторонних ресурсах активная гиперссылка ОБЯЗАТЕЛЬНА.

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

Источник

Тахометр на Arduino

Тахометр — это полезный инструмент для подсчета RPM (оборотов в минуту) колеса или всего, что крутится. Самый простой способ сделать тахометр — это использовать ИК передатчик и приемник. Когда связь между ними прерывается, вы знаете, что что-то вращается и можете применять код для вычисления RPM, ориентируясь на частоту прерывания связи.

В этой статье мы рассмотрим, как использовать ИК-передатчик и приемник для изготовления тахометра с применением Arduino. Результат отображается на ЖК-дисплее 16х2.

Целью данного проекта является создание системы с одним входом и одним выходом. На входе устройства присутствует сигнал, изменяющийся с высокого (+5В) на низкий (+0В) уровень при нарушении связи. Согласно этому сигналу, Arduino будет увеличивать значение внутреннего счетчика. Потом проводится дополнительная обработка и расчет, и по прерыванию триггера на ЖК-дисплей будет выводиться рассчитанное RPM.

Для связи мы будем использовать ИК-луч от ИК-светодиода, включенного через низкоомный резистор так, чтобы светиться ярко. В качестве приёмника мы будем использовать фототранзистор, который при отсутствии света ИК-светодиода «закрывается». Компьютерный вентилятор будет размешен между ИК-передатчиком и приёмником и включен. ИК-приёмник включенный через транзисторную схему, будет генерировать прерывания. Для вывода результата будет использоваться Arduino LCD интерфейс, поэтому мы можем вывести окончательное значение RPM на ЖК-дисплей.

Элементы:
Arduino UNO
16×2 LCD
Макетная плата
Подстроечный резистор 5 кОм
Перемычки
SIP разъёмы
2x 2N2222 NPN транзистор
Инфракрасный светодиод
Фототранзистор
Резистор 10 Ом
Резистор 100 кОм
Резистор 15 кОм или 16 кОм
Компьютерный вентилятор

Подробный список элементов

Все элементы используемые в проекте указаны выше, но я более подробно опишу функции основных элементов.

Arduino UNO
Это плата Arduino, которую мы будем использовать для обработки импульсов от прерывания ИК-луча, которые сообщают о нахождении лопасти компьютерного вентилятора между приемником и датчиком. Arduino будет использовать эти импульсы наряду с таймером, чтобы вычислить RPM вентилятора.

ЖК-дисплей 16×2
После того, как Arduino вычислило RPM, эта значение будет отображаться на дисплее в понятном для пользователя виде.

Подстроечный резистор 5 кОм
Этот подстроечный резистор будет использоваться для регулировки контрастности ЖК-дисплея 16×2. Он дает аналоговое напряжение в диапазоне от 0 до +5В, позволяя настроить яркость ЖК-дисплея.

Инфракрасный светодиод и Фототранзистор
Фототранзистор открывается, когда мощный ИК-свет падает на него. Поэтому, когда ИК-светодиод горит, он держит фототранзистор открытым, но если ИК-светодиод закрывается например, лопастью вентилятора, то фототранзистор закрывается.

2N3904 и 2N3906
Эти транзисторы используются для преобразования уровня сигнала, с целью обеспечения выходных импульсов с фототранзистора для Arduino, в которых нет никаких напряжений кроме +0 и +5В.

Принципиальная схема

В схеме, интерфейс связи с ЖК-дисплеем упрощен и имеет только 2 линии управления и 4 линии передачи данных.

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

Интерфейс ЖК-дисплея 16×2
2 управляющих контакта и 4 для передачи данных подключены от Arduino к ЖК-дисплею. Это то, что указывает ЖК-дисплею, что и когда делать.

Схема обрыва ИК-луча
Сигнал обрыва ИК-луча идет на 2-ой цифровой контакт Arduino. Это прерывает Arduino, что позволяет ему засчитать импульс и позволяет тахометру получать данные.

Arduino LCD библиотека

Для этого проекта мы будем использовать Arduino LCD библиотеку. В основном мы будем просто обновлять значение RPM на второй строке на новое.

В качестве подготовки, посмотрите на код приведенный ниже, в котором при помощи этой библиотеки на ЖК-дисплей выводиться «Hello, World!» В тахометре мы будем использовать похожий код, особенно: «lcd.print(millis()/1000);».

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

Подсчет RPM при помощи Arduino

Так как мы собираемся подсчитать RPM компьютерного вентилятора, мы должны понимать, что для подсчета мы используем прерывание ИК-луча. Это очень удобно, но мы должны учитывать, что у компьютерного вентилятора 7 лопастей. Это значит, 7 прерываний равно 1 обороту.

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

Время 1-го оборота = P * (µS/оборот)
RPM = кол-во оборотов/мин = 60 000 000 * (µS/мин) * (1/P) = (60 000 000 / P) * (кол-во оборотов/мин)

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

Сборка схемы

На фотографии ниже вы можете увидеть все необходимые детали и перемычки как на схеме.

Для начала подключается +5В и линии данных/управления ЖК-дисплея. Затем ЖК-дисплей, потенциометр контрастности и светодиод питания.

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

Хватит разговоров о аппаратной части! Давайте начнем делать прошивку/программу, чтобы увидеть работу устройства!

Программная часть

Есть две основных части кода, которые показаны и подробно описаны ниже:
-Основной цикл обновления ЖК-дисплея
-Обновление времени прерываний

В основном цикле считаются обороты и обновления ЖК-дисплея. Поскольку основной цикл это гигантский while(1) цикл, то он будет работать всегда, RPM считаться, а ЖК-дисплей обновляться несколько раз в секунду. Функция в прерывании подсчитывает время между прерываниями ИК, поэтому считать RPM можно в основном цикле.

Помните, что компьютерный вентилятор имеет 7 лопастей, так что это тахометр предназначен для работы только с такими вентиляторами. Если ваш вентилятор или другое устройство дает только 4 импульса за оборот, измените в коде «(time*4)».

Два вентилятора работают на примерно 3000 оборотов в минуту и ​​2600 оборотов в минуту, с погрешностью около + / -100 оборотов в минуту.

Обзор тахометра на Arduino

Вентилятор генерирует импульсы прерывания, а на выходе мы видим RPM. Хотя точность не 100%, а примерно 95%, при стоимости элементов 10$ есть смысл построить этот тахометр на Arduino.

Что теперь делать?

Системы на основе обрыва луча полезны не только при измерении RPM, но и в качестве других датчиков. Например, вы хотите знать, открыта дверь или закрыта. Возможно, вы хотите знать, не проходило-ли что то под роботом. Есть много применений обрыва луча, а схема используемая тут настолько проста, что есть много путей для улучшения и сборки других удивительных устройств.

Заключение

В целом, я считаю этот проект успешным. Но дело во времени и опыте.. Так или иначе, система работает как задумывалось и достаточно надежно, а мы получили ожидаемый результат. Надеюсь, вам понравилось прочитать эту статью и узнать как сделать свой собственный тахометр на Arduino!

Источник

Тахометр на основе Ардуино и датчика Холла своими руками

Приборы и принадлежности

  • Плата ардуино UNO или любая другая.
  • Модуль датчика Холла или отдельный датчик Холла установленный на специальную плату.
  • Два резистора сопротивлением 200-250 Ом.
  • Два светодиода.
  • Цифровой ЖК дисплей, снабженный интерфейсом шины I2C.
  • Плата для макетирования и провода типа «вилка – вилка» и «вилка-розетка».
  • Персональный компьютер с установленной средой программирования Arduino.
  • Кабель USB.

Основой настоящей лабораторной работы является датчик Холла. Датчик Холла – это полупроводниковый прибор, работающий на основе одноименного эффекта. Датчик подключается к внешнему источнику питания. При внесении датчика в магнитное поле на его выходе формируется логический сигнал низкого уровня. В отсутствие магнитного поля на выходе датчика наблюдается высокий уровень сигнала.

Простейшая схема подключения датчика представлена на следующем рисунке. Она включает цифровой датчик A3144. Постоянный резистор и может содержать или не содержать конденсатор постоянной емкости. Резистор, номиналом 10 ком служит для надежной работы датчика в качестве ключевого элемента. Конденсатор фильтрует высокочастотные пульсации выходного сигнала. Если смотреть на переднюю сторону датчика (маркировка), то левый первый контакт соединяется с источником питания. Средний – с общим проводом, землей, правый – является выходным.

Используется готовый модуль датчика Холла А3144. Он имеет как цифровой выход D0, так и аналоговый A0, который не используется.

Схема подключения модуля датчика Холла к Ардуино UNO представлена на рис. 2. Датчик Холла подключается напрямую к плате ардуино своими тремя контактами D0, VCC и GND. VCC и GND соединяются с соответствующими контактами Ардуино. Цифровой выход D0 следует присоединить к одному из цифровых входов Ардуино, связанных с аппаратными прерываниями. Для ардуино Уно это D2 или D3. В нашей работе мы используем цифровой вход D3.

Кроме датчика Холла лабораторная установка включает цифровой жидкокристаллический дисплей LCD1602. Но может использоваться и любой другой. От формата дисплея будет зависеть код управляющей программы микроконтроллера и доступный объем выводимой информации.

Цифровой дисплей можно подключать к ардуино через имеющийся параллельный интерфейс, как у моего дисплея LCD2004, либо через последовательный интерфейс шины I2C, которым может быть дополнительно снабжен дисплей, как вы видите на моем дисплее LCD1602.

Я выбрал последний вариант, так как он позволяет сократить число задействованных выходных линий Ардуино.

Для обмена данными по шине I2C линии последовательного интерфейса дисплея присоединяют к следующим выходам Ардуино: линию SDA к выходу А4, линию SCL к выходу А5, линии питания VCC и земли GND – к соответствующим линиям Ардуино.

Кроме того для регистрации сигнала и вывода индикации лабораторная установка содержит два светодиода, подключенных через резисторы сопротивлением 220 Ом к цифровым выходам D10 и D13.

Собираем лабораторную установку в соответствии со схемой.

Познакомимся с основными принципами измерения частоты цифровым способом.

Всего существует два принципа. Оба они основаны на сравнении периодов образцового и измерительного сигналов.

Первый способ иллюстрирует следующая схема.

Импульс входного сигнала (передним или задним фронтом), поступающий от датчика Холла, запускает аппаратное прерывание Ардуино. При срабатывании функции прерывания запускается подсчет количества импульсов n встроенного тактового генератора, период следования которых T0 заранее известен, и продолжается до следующего срабатывания прерывания.

Таким образом сумма длительностей импульсов тактового генератора будет соответствовать времени Т между двумя срабатываниями аппаратного прерывания.

Частота определяется как величина обратная периоду:

А частота вращения, выраженная в об/мин будет в 60 раз больше:

Для получения длительности импульсов образцового сигнала встроенного генератора пользователю Ардуино доступна функция Micros (). Она показывает текущее значение времени в микросекундах с начала запуска программы. Таким образом, обращаясь к ней в моменты срабатывания функции прерывания, можно получить количество микросекунд между двумя срабатываниями. Так как длительность одного образцового импульса T0 равна 1 мкс=1/1000000 с, тогда формула приобретает вид:

Если на валу вращающегося двигателя установлен не один магнит, а несколько (z), то время T между ближайшими срабатываниями функции прерывания сокращается в z раз, а частота входного сигнала возрастает в z раз, тогда формула примет вид:

Второй способ отличается от первого тем, что ведется прямой подсчет числа импульсов k, поступивших от датчика Холла за большой период времени Tm. Этот способ поясняется вторым рисунком. Согласно этому способу частота вращения вала будет равна:

А в минуту – в 60 раз больше:

Если принять Tm=1 c., то формула приобретает вид:

Для управления работой Ардуино необходимо разработать управляющую программу.

Для начала подключаем необходимые библиотеки:

#include — библиотека таймера

#include
— библиотека работы с дисплеем по шине i2c

LiquidCrystal_I2C lcd(0x27,16,2); — указываем i2c адрес (наиболее распространенное значение), а также параметры экрана

Объявляем переменные и константы:

const int RPM_PIN=3; — константа определяющая номер цифрового входа для подключения датчика Холла

volatile int rpm = 0; — частота импульсов (сразу обнуляем)

volatile int rpm_k = 0; — счетчик импульсов входного сигнала (обнуляем)

volatile boolean kontrol;

volatile int rpm_array[3] = <0,0,0>; — массив промежуточных значений частоты вращения (не менее трёх значений) для усреднения (сразу обнуляем)

volatile int rpm_result = 0; — расчётная частота вращения вала (обнуляем)

Объявляем функцию прерывания, которая при срабатывании будет подсчитывать количество импульсов входного сигнала

digitalWrite(13, HIGH); — на долю секунды выводим сигнал на красный сетодиод при каждом поступившем импульсе входного сигнала (для контроля работы схемы и датчика)

delayMicroseconds(500); — длительность свечения красного светодиода

digitalWrite(13, LOW); — выключение красного светодиода

Объявляем функцию сохранения значения частоты вращения при каждом новом цикле измерения и ее обнуления для последующего счета импульсов

rpm = rpm_k; rpm_k = 0; записываем подсчитанное число импульсов с датчика Холла в переменную частоты вращения, а счетчик обнуляем

digitalWrite(10, HIGH); — на долю секунды выводим сигнал на зеленый сетодиод при каждом отсчете образцового сигнала (для контроля работы)

delayMicroseconds(500); digitalWrite(10, LOW);

Объявляем основную процедуру Ардуино

lcd.begin(); — инициализируем дисплей

pinMode(RPM_PIN,INPUT); — устанавливаем режим работы входной линии ардуино на ввод

attachInterrupt(digitalPinToInterrupt(RPM_PIN), rpm_count, RISING); — настраиваем функцию прерывания, срабатывание по переднему фронту

Timer1.attachInterrupt(SensorData); — настраиваем срабатывание прерывания по таймеру

Timer1.initialize(1000000); — указываем период работы таймера – 1 с.

pinMode(10, OUTPUT); — устанавливаем режим работы цифрового выхода 10 и 13 на вывод

Объявляем основной цикл программы

rpm_result = 0; — обнуляем итоговый результат

Источник

Adblock
detector