Андрей Смирнов
Время чтения: ~6 мин.
Просмотров: 2

Урок 29. Тахометр. Определяем скорость вращения при помощи датчика линии

ВНИМАНИЕ!

Если вы не знаете, куда подключить Arduino, где взять программу для прошивки, как установить драйвера, как всё настроить и как устанавливать библиотеки – читайте статейку “Первые шаги с Arduino”, ссылка справа от этого текста. Там же разобраны типичные ошибки, описаны варианты питания и есть краткий FAQ.

  • 3 цифровой пин используется как источник питания (+5В) для датчика Холла. Для этого в setup() прописано подать сигнал высокого уровня на 3 пин.
  • 2 пин принимает прерывания. Для нано и уно это 2 и 3 пины, и при объявлении прерывания она называются соответственно 0 и 1 (0 это второй, 1 это третий)

Screenshot_3-1024x568.png

  • 3 цифровой пин используется как источник питания (+5В) для датчика Холла. Для этого в setup() прописано подать сигнал высокого уровня на 3 пин.
  • 2 пин принимает прерывания. Для нано и уно это 2 и 3 пины, и при объявлении прерывания она называются соответственно 0 и 1 (0 это второй, 1 это третий)
  • Библиотека разархивируется в папку

  • Поковырявшись в библиотеке, можно найти управление яркостью дисплея

Screenshot_2-1024x571.png

  • 3 цифровой пин используется как источник питания (+5В) для датчика Холла. Для этого в setup() прописано подать сигнал высокого уровня на 3 пин.
  • 2 пин принимает прерывания. Для нано и уно это 2 и 3 пины, и при объявлении прерывания она называются соответственно 0 и 1 (0 это второй, 1 это третий)
  • Функция map – преобразует диапазон частот вращения (в примере от 0 до 1500) в диапазон угла поворота сервомашинки (в примере от 0 до 180 – максимально возможный для сервы)

Screenshot_4-1024x566.png

  • 3 цифровой пин используется как источник питания (+5В) для датчика Холла. Для этого в setup() прописано подать сигнал высокого уровня на 3 пин.
  • 2 пин принимает прерывания. Для нано и уно это 2 и 3 пины, и при объявлении прерывания она называются соответственно 0 и 1 (0 это второй, 1 это третий)

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

Нам понадобится:

  • Arduino х 1шт.
  • Trema-модуль Аналоговый датчик линии х 1шт.
  • Trema-модуль Четырехразрядный LED индикатор х 1шт.
  • Trema Shield х 1шт.

Для реализации проекта нам необходимо установить библиотеку:

  • Библиотека iarduino_4LED (для работы с четырёхразрядным LED индикатором).

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE.

Видео:

Схема подключения:

LED индикатор подключается к любым двум выводам Arduino (как цифровым, так и аналоговым), номера указываются в скетче. Датчик линии подключается к любому аналоговому входу, номер указывается в скетче.

В данном уроке, LED индикатор подключён к цифровым выводам 2 и 3, а датчик линии подключён к аналоговому входу A0.

Алгоритм работы:

  • Вывод информации на LED индикатор осуществляется только в момент перехода датчика линии со светлого на тёмное поле.
  • Первой строкой функции loop, проверяем не находится ли датчик линии на тёмном поле, если это так, то …
  • Выводим количество оборотов в минуту на LED индикатор (если не зафиксировано переполнение millis) и сохраняем время перехода
  • Выполняем цикл while до тех пор, пока датчик линии не покинет тёмное поле. Благодаря чему предыдущая операция выполняется только 1 раз, за всё время нахождения датчика на тёмном поле.
  • Если датчик находится на тёмном или светлом поле, дольше 6 секунд, то выводим надпись «STOP» (эти строки можно убрать, если количество оборотов Вашего устройства ниже 10 в минуту).

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

скачать

Ссылки:

  • Код программы
  • Библиотека iarduino_4LED.
  • Wiki — Установка библиотек в Arduino IDE.
  • Wiki — Четырёхразрядный индикатор (Trema-модуль).
  • Wiki — Датчик линии, аналоговый.
  • Wiki — Trema Shield.

Тахометр представляет собой счетчик числа оборотов в минуту (RPM counter). Существует два типа тахометров: механические и цифровые.

arduino-based-tachometer.jpg

Общие принципы работы проектируемого тахометра

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

После этих 5 секунд плата Arduino рассчитывает число оборотов в минуту по следующей формуле.

RPM= Count x 12 для одиночного вращающегося объекта.

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

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

block-diagram.png

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

Работа схемы

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

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

Выход модуля инфракрасного датчика напрямую подключен ко контакту 18 (A4) Arduino. Vcc и GND подсоединены к контактам Vcc и GND arduino. ЖК дсиплей подключен к плате Arduino в 4-битном режиме. Его управляющие контакты RS, RW и En напрямую подсоединены к контактам 2, GND и 3 Arduino. Контакты данных D4-D7 подключены к контактам 4, 5, 6 и 7 Arduino. В схеме также присутствует кнопка, которую необходимо нажать для подсчета числа оборотов. Наш тахометр на основе платы Arduino подсчитывает число оборотов в течение 5 секунд а потом по вышеприведенной формуле осуществляет пересчет этого значения в число оборотов в минуту. Кнопка подключена к контакту 10 Arduino.

Исходный код программы

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

counting-rpm.png

Далее представлен полный текст программы.

#include // подключение библиотеки для работы с ЖК дисплеем LiquidCrystal lcd(3, 2, 4, 5, 6, 7); // контакты, к которым подключен ЖК дисплей #define sensor 18 // контакт, к которому подключен модуль инфракрасного датчика #define start 10 // контакт, к которому подключена кнопка int delay1() { //unsigned int long k; int i,j; unsigned int count=0; for(i=0;i<1000;i++) {j=0;j<1227;j++) { if(dRead(sensor)) { count++; while(digitalRead(sensor)); } } } return count; } void setup() { pinMode(sensor, INPUT); pinMode(start, INPUT); pinMode(13, OUTPUT); lcd.begin(16, 2); lcd.print("Techometer"); lcd.setCursor(0,1); lcd.print("Circuit Digest"); delay(2000); digitalWrite(start, HIGH); } void loop() { unsigned int time=0,RPM=0; lcd.clear(); lcd.print(" Please Press "); lcd.setCursor(0,1); lcd.print("Button to Start "); while(digitalRead(start)); lcd.clear(); lcd.print("Reading RPM....."); time=delay1(); lcd.clear(); lcd.print("Please Wait....."); RPM=(time*12)/3; delay(2000); lcd.clear(); lcd.print("RPM="); lcd.print(RPM); delay(5000); }

Видео, демонстрирующее работу схемы

421 просмотровИспользуемые источники:

  • https://alexgyver.ru/source_tahometer/
  • https://lesson.iarduino.ru/page/urok-29-tahometr-opredelyaem-skorost-vrascheniya-pri-pomoschi-datchika-linii/
  • https://microkontroller.ru/arduino-projects/tahometr-na-arduino/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации