ИК датчик YL-63 (FC-53)

Тема в разделе "Arduino & Shields", создана пользователем bender19993, 17 дек 2018.

  1. bender19993

    bender19993 Нерд

    Сделал оптический тахометр, он показывает фигню, два очень больших значения 2803 и 98... и ещё что-то. Програмировал на прерывания, делал меньше провод, не паял а замотал скотчем, работало отлично, но провод вылетел, и больше подобный опыт не повторился((( как проверить датчик?
    Код (C++):
    byte n = 3;      // число лопастей
    float r = 3.5;   // радиус тела В САНТИМЕТРАХ

    #include "LCD_1602_RUS.h"
    LCD_1602_RUS lcd(0x27,16,2);

    float r_speed, rev_time;
    volatile unsigned long lastflash, flash, lastshow;
    unsigned int RPM;
    String spaces = "       ";

    void setup() {
      Serial.begin(9600);                  // открыть порт
      attachInterrupt(0, sens, RISING);    // подключить прерывание на 2 пин при повышении сигнала
      pinMode(13, OUTPUT);                  // 3 пин как выход
      digitalWrite(13, HIGH);               // подать 5 вольт на 3 пин
      lcd.init();                 // инициализация дисплея
      lcd.backlight();            // включить подсветку
      lcd.setCursor(0, 0);        // курсор слева 1 строчка
      lcd.print(L"Обороты ");    // слово Обороты
      lcd.setCursor(0, 1);        // курсор слева 2 строчка
      lcd.print(L"Скорость: ");   // слово Скорость
    }
    void sens() {
      flash = micros() - lastflash;   // вычислить время между двумя оборотами
      lastflash = micros();           // запомнить время последнего оборота
    }

    void loop() {
      if (micros() - lastflash > 1000000) { // если сигнала нет больше секунды
        RPM = 0;                            // считаем, что всё стоит и не крутится
        r_speed = 0;
      } else {
        rev_time = (float) flash / 1000000 * n;             // время одного оборота в секундах, с учётом числа лопастей
        RPM = (float) 60 / rev_time;                        // обороты в минуту
        r_speed = (float) 2 * 3.1415 * r / 100 / rev_time * 3.6;  // скорость точки на радиусе, км/ч
      }
      if (millis() - lastshow > 300) {  // кадждые 300 миллисекунд
        lcd.setCursor(9, 0);  // курсор 9 слева 1 строчка
        lcd.print(RPM);       // выводим RPM
        lcd.print(spaces);    // очищаем цифры с прошлого вывода
        lcd.setCursor(10, 1); // курсор 10 слева 2 строчка
        lcd.print(r_speed);   // выводим скорость
        lcd.print(spaces);    // очищаем цифры с прошлого вывода
        lastshow = millis();  // сброс таймера
      }
    }
     
  2. bender19993

    bender19993 Нерд

    проблема решена, надо было просто подкрутить потенциометр
     
    arkadyf нравится это.