подсчет количества оборотов с помощью щелевого оптического датчика

zau-sasha
Offline
Зарегистрирован: 25.02.2017

добрый день!

Програмированием занялся недавно, написал код для подчета оборотов вала на ардуино, обороты сичтаю с помощью щелевого оптического датчика.

Только возникла проблема, если при остановки вала когда ответрстие на диске попадет на щелевой датчик, ардуино начинает считатать с большой скоростью.

Помогите с кодом, что не так?

 

# define PIN 3 //вход с датчика
#include <LCD5110_Basic.h>

LCD5110 myGLCD(8, 9, 10, 11, 12);

extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern unsigned char BigNumbers[];

int schet = 0; // переменая для счетчика

void setup()
{

  pinMode(PIN, INPUT);
  digitalWrite(PIN, HIGH);
  //Инициализируем дисплей
  myGLCD.InitLCD();

}
void loop()
{
  bool hoot = ! digitalRead(PIN);
  delay(10);
  if (hoot)
  {
    schet++;

  }
  //выводим колличество 
  myGLCD.setFont(BigNumbers);
  myGLCD.printNumI (schet, CENTER, 8);
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ваш код не имеет вообще никаколго отношения к подсчету количества оборотов.

Для подсчета оборотов необходмо считать количество переходов сигнала из "0" в "1" (или наоборот), а не то, сколько раз Ваша программа читает с датчика единицу. Да еще и считывание производится с неизвестным периодом, т.к. в его длительность вносит вклад время отображения на дисплее.

zau-sasha
Offline
Зарегистрирован: 25.02.2017

тоесть мне нужно считать сколько переходов с 1 на 0 и 0 на 1

у меня одно отвестие в диске с которого он считывает, получается 2 перехода за один круг. верно?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вам нужно считать либо один переход, либо другой. Оба - совершенно излишне.

Если в диске 1 отверстие, будет один переход. Количество переходов в единицу времени - и есть скорость вращения.

Если бы отверстий было бы больше, результат нужно было бы делить на количество отверстий.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Правильней наверное зацепть датчик на прерывание, для нано пин D2 и по прерыванию увеличивать счётчик?