Точность тахометра (частотомера)

Dark113
Offline
Зарегистрирован: 08.11.2017

Здравствуйте, форумчане!Всвязи с наличием большого желания и всего необходимого было принято решение сконструировать тахометр (частотометр).

   Сама идея заключается в считывании импульсов с оптопары дальнейшем преобразованием в числовой вид и выведением на светодиодную шкалу.

Начало было положено!Нашёл скетч тахометра (частотомера) с выводом даных в Serial monitor (самый простейший вариант), но имеются сомнения в точности измерений.По этому хочу обратиться за помощью!Возможно есть варианты более-менее точного измерения без дорогостоющего оборудования?Прошу подсказать, на сколько точны сведения!

Вот сам скетч:

const int inPin = 2;

void setup() {
Serial.begin(9600);
pinMode(inPin, INPUT);
digitalWrite(inPin, HIGH);
}
void loop() {
int rpm=get_rpm();
Serial.print("ob/min: ");
Serial.println(rpm);
}
int get_rpm()
{
int acct=0;
boolean IR=LOW;
unsigned long Time=0;
unsigned long sTime=millis();
while (Time<=1000)
{
if (digitalRead(inPin)==HIGH)
{IR=HIGH;}
if (digitalRead(inPin)==LOW && IR==HIGH)
{
acct++;
IR=LOW;
}
Time=millis()-sTime;
}
int acct2 = int(1000./float(10))*acct;
return acct2;
}

 P.s. В тестировании применял диск с одним вырезом!!!!Очень хотелось бы, чтобы точность была около +-100 об/мин!

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Всё плохо. Так не измеряется частота. Смотрите, как минимум, описание функции attachInterrupt, и повесьте обработчик на пин с внешним прерыванием (2 или 3) - будет считать как надо, а не как бог на душу положит. Примеры, кстати, есть, их просто куча.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Возьмите готовое решение и не мучайтесь - https://www.pjrc.com/teensy/td_libs_FreqCount.html