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


Тахометр представляет собой устройство, которое используется для измерения количества оборотов объекта в заданном интервале времени. Обычно значение выражается в оборотах в минуту или об/мин. Ранее тахометры были чисто механическими устройствами, в которых вращение передавалось в тахометр через механическое соединение (трос или вал), количество оборотов в минуту определялось с помощью зубчатой передачи и отображалось на круговой шкале. После прихода современной электроники тахометры очень сильно изменились. Данная статья описывает бесконтактный цифровой тахометр на базе Arduino. Скорость двигателя также может контролироваться с помощью аналогичной схемы. Количество оборотов в минуту и другая информация отображается на жидкокристаллическом дисплее размером 16×2. Электрическая схема цифрового тахометра на базе Arduino показана ниже.

Электрическая схема


Датчик оборотов в минуту
Инфракрасный фототранзистор и инфракрасный светодиод образуют датчик. Инфракрасный фототранзистор – это тип фототранзистора, который реагирует только на инфракрасные волны. Использование инфракрасного фототранзистора позволяет избежать влияния других интерференций света из окружающей среды. Фототранзистор и инфракрасный светодиод расположены параллельно. Резистор R2 ограничивает ток через инфракрасный диод. Отражательная направляющая лента приклеена на вращающийся объект (вал, диск или вентилятор) на одной линии с датчиком. Я использовал охлаждающий вентилятор с напряжением питания 9В/100мА. Зазор между датчиком и отражательной направляющей лентой должен не превышать 1см. Когда отражательная направляющая лента проходит перед датчиком, инфракрасные волны отражаются назад к фототранзистору. Фототранзистор проводит больше в данный момент и в результате напряжение через R3(68K резистор) стремительно поднимается. Результатом будет сигнал, форма которого показана ниже на эмиттере фототранзистора. Количество оборотов в минуту может быть определено путем вычисления количества восходящих импульсов в заданный интервал времени.


Вычисление количества оборотов в минуту
Arduino используется для вычисления величины оборотов в минуту и отображения этой величины на жидкокристаллическом дисплее. Эмиттер фототранзистора соединен с выводом Interrupt 0 (цифровой вывод 2) Arduino. Прерывание Arduino конфигурируется по инициируемому нарастающему фронту. В результате обрабатывается прерывание для каждого восходящего импульса в форме сигнала эмиттера. Количество полученных прерываний в заданное время вычисляется по приращению переменной, посредством программы обслуживания прерываний. Время, прошедшее в течение вычислительного цикла, определяется с помощью функции millis(). Функция millis() возвращает количество мили секунд, прошедших после включения платы Arduino. Вызов функции millis() до и после вычислительного цикла и вычисление их разницы дает время, прошедшее в течение вычислительного цикла. Величина (количество прерываний/раз в миллисекунду)*60000 определит количество оборотов в минуту (об/мин).

Контроль скорости двигателя
Устройство для контроля скорости двигателя с помощью потенциометра также включено в схему. Транзистор Q1 используется для управления двигателем. Его база подсоединена к ШИМ выводу 9 Arduino через токоограничивающий резистор R1. Движок потенциометра контроля скорости R4 подсоединен к аналоговому выводу A0 Arduino. Напряжение на этом выводе преобразуется в значение между 0 и 1023 посредством функции anlogRead. Затем это значение делится на четыре, чтобы попасть в диапазон от 0 до 255. После этого данное значение записывается в ШИМ вывод 9 с помощью функции anlogWrite. В результате на выводе 9 будет прямоугольная волна, чей коэффициент заполнения пропорционален величине, записанной с помощью функции analogWrite. Например, если величина равна 255, коэффициент заполнения будет 100%, а если величина равна 127, коэффициент заполнения будет около 50%. D1 – это обратный диод, а C1 – это шумоподавляющий конденсатор (декаплер). Количество оборотов в минуту и коэффициент заполнения отображаются на экране жидкокристаллического дисплея с помощью стандартной библиотеки LiquidCrystal. Прочтите вот эту статью: Интерфейсный жидкокристаллический дисплей для Arduino. Полный программный код для цифрового тахометра на базе Arduino показан ниже.

Программный код
#include<LiquidCrystal.h>
LiquidCrystal lcd(12,11,6,5,4,3);
int pwm=9;
int pot=A0;
float value=0;
int percent;
float rev=0;
int rpm;
int oldtime=0;
int time;

void isr() //interrupt service routine
{
rev++;
}

void setup()
{
lcd.begin(16,2);                //initialize LCD
attachInterrupt(0,isr,RISING);  //attaching the interrupt
}

void loop()
{
delay(1000);
detachInterrupt(0);           //detaches the interrupt
time=millis()-oldtime;        //finds the time 
rpm=(rev/time)*60000;         //calculates rpm
oldtime=millis();             //saves the current time
rev=0;
value=analogRead(pot);        //reads the speed control POT
value=value/4;
analogWrite(pwm,value);       //sets the desired speed
percent=(value/255)*100;      //finds the duty cycle %
lcd.clear();
lcd.setCursor(0,0);
lcd.print("___TACHOMETER___");
lcd.setCursor(0,1);
lcd.print(rpm);
lcd.print(" RPM");
lcd.print("   ");
lcd.print(percent);
lcd.print("%");
attachInterrupt(0,isr,RISING);

}

Примечания
• На плату Arduino можно подать напряжение питания 9В через внешнее гнездо питания.
• Напряжение 5В, необходимое для некоторых компонентов схемы, может быть подано от 5В источника на плате Arduino.
• Используемый вентилятор использует напряжение 9В/100мА. Транзистор 2N2222 может выдержать ток только до 800мА. Помните об этом при выборе нагрузки.
• Используемый жидкокристаллический дисплей — JHD162A.
• Потенциометр R5 может использоваться для регулировки контрастности жидкокристаллического дисплея. При его подсоединении на дисплее не будет ничего отображаться. Выполните регулировку R5, пока на дисплее не появится изображение. Оптимальное напряжение на движке потенциометра R5 находится в пределах от 0.4 до 1В.
• Инфракрасный фототранзистор и инфракрасный диод были вынуты из фото прерывающего модуля LTH-1550.
• Боковую поверхность фототранзистора необходимо закрыть с помощью изоленты.
• Положение датчика показано на рисунке ниже.

7 комментариев

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