Данную схему я применял для измерения частоты вращения вала электродвигателя: датчик Холла крепился с тыльной стороны двигателя, а магнит - на крыльчатку, охлаждающую двигатель. При каждом прохождении магнита мимо датчика загорается светодиод, а на экране выскакивает текущее значение частоты вращения вала.
unsigned long lastflash;
int RPM;
void setup() {
Serial.begin(9600); //инициализация работы порта на скорости 9600 бод
attachInterrupt(0,sens,RISING); //прерывание на 2 ('0' - 2 пин, '1' - 3 пин)
}
void sens() {
RPM = 60 / ((float)(micros() - lastflash) / 1000000); //расчет частоты (об/мин)
lastflash = micros(); //запоминание времени последнего оборота
}
void loop() {
//если сигнала нет больше секунды, RPM = 0
if ((micros() - lastflash) > 1000000){
RPM = 0;
}
Serial.println(RPM); //вывод в порт
delay(50); //задержка для стабильности
}
Важный момент: Arduino Nano и Uno обрабатывают прерывания только со 2 и 3 цифровых пинов!
Далее в программе Arduino IDE заходим в раздел Инструменты -> Монитор порта и наблюдаем за выводимыми значениями, если частота не считывается, нужно установить скорость обмена внизу справа на 9600 бод.