Тахометр
- Войдите на сайт для отправки комментариев
Чт, 04/08/2016 - 11:37
Всем привет! Есть металический шкив, в нем есть 6 отверстий. Крутится он с макс скоростью 2000 об/м. Вопрос если взять индуктивный датчик приближения LJ12A3-4-ZBX, с него на оптрон, Arduino nano повесить на прерывания контакт с оптрона, добавить LCD 16x2, получится выводить обороты и с какой погрешностью?
Посчитайте: сколько импульсов на оборот дает датчик.
Че там считать? 200 герц -- частота следования импульсов.
просто с какой точностью получится это? 2%?
Я не знаю параметров датчика, но если он не имеет больших погрешности и времени срабатывания, то точность будет зависеть главным образом от того, как вы считать будете.
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F,16,2); unsigned long Tahometr_impulse_count; float RPM; unsigned long Check_time ; void setup() { Serial.begin(9600); attachInterrupt(0, TahometrImpulse_on, FALLING); LCDinit(); } void LCDinit() { lcd.init(); // Инициализируем экран lcd.backlight(); //включаем подсветку lcd.setCursor(0,0); lcd.print("RPM: ");//выводим строку 1 } void loop() { delay(1000); Calc_RPM(); lcd.setCursor(5,0); lcd.print(ToString(RPM)); } //********************************************************************** void Calc_RPM(){ detachInterrupt(0); // запретили считать, на всякий случай, шоб не рыпался int Taho_ChekTime = millis()-Check_time; // время между снятиями показаний счетчика if (Taho_ChekTime > 0) { // проверка на переполнение "милиса" ну вдруг больше 50 дней )) if (Tahometr_impulse_count ==6) // и наличия насчитанных импульсов (на нолик делить не желательно.. будут запредельные значения в RPM) { RPM=(((float)Tahometr_impulse_count/)/((float)Taho_ChekTime/1000))*30; //подсчитываем среднее время периода, переводим в частоту, и приводим к об/минам уже деленым на 2 } else { RPM=0; // если нет импульсов за время измерений то RPM=0 } } Tahometr_impulse_count = 0; //сбросили счетчик. Check_time = millis(); // новое время attachInterrupt(0, TahometrImpulse_on, FALLING); // разрешили считать } //********************************************************************** void TahometrImpulse_on() { Tahometr_impulse_count++; } String ToString(int i) { String s = String(i, DEC); while (s.length()<6) s=s+" "; return s; }ловить импульсы лучше при переходе 0-1? и считать их 6 штук - это будет один оборот, правильно?