Проект доступен для бесплатного скачивания!
Arduino IR LCD RPM

Инфракрасный тахометр на платформе Arduino


  • Тахометр на платформе Arduino использует инфракрасный датчик препятствий, который может обнаружить препятствие на расстоянии, установленном потенциометром.
  •       
  • Вторичное использование аналогичного датчика - это счетчик, который может реагировать на скорость шкива коленчатого вала.
  •       
  • На шкиве размещается отражающая поверхность (порядка миллиметров, максимум 1 сантиметр) - лист, лента, алюминиевая фольга, которые могут отражать инфракрасный свет от излучающего диода в приемный диод.
  •       
  • Датчик не реагирует на расстояние как таковое. Он реагирует только на отражение света от отражающей поверхности.
  •       
  • Результат - относительно надежный тахометр, который представляет результат на символьном ЖК-дисплее с преобразователем I2C.
  •       
  • Может использоваться для записи шкивов (комбайнов, тракторов), а также для велосипедов, автомобильных колес (также может быть пересчитан на скорость движения при известной окружности колеса).
  •       

    Аппаратное обеспечение проекта:

  • Arduino Uno R3
  • IR датчик препятствий
  • LCD 20x4 или 16x2
  • I2C конвертер для LCD
  • результат

    схема

    Program

    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x3F, 20, 4);     //alebo 0x27 --> I2C adresy sa mozu roznit
    float value = 0;
    float rev = 0;
    int rpm;
    int oldtime = 0;
    int time;
    
    void isr() {
      rev++;
    }
    
    void setup() {
      lcd.begin();
      lcd.backlight();
      lcd.setCursor(0, 0);
      lcd.print("-----ZETOR 4011-----");
      attachInterrupt(digitalPinToInterrupt (2), isr, RISING); //interrupt pin
    }
    
    void loop() {
      delay(1000);
      detachInterrupt(digitalPinToInterrupt(2));      
      time = millis() - oldtime;    //rozdiel casov
      rpm = (rev / time) * 60000;   //vyrataj otacky/min
      oldtime = millis();           //uloz aktualny cas
      rev = 0;
      lcd.setCursor(0, 1);
      lcd.print(rpm);
      lcd.print(" ot/min");
      attachInterrupt(digitalPinToInterrupt (2), isr, RISING);
    }