Projekt steht zum kostenlosen Download zur Verfügung!
Arduino IR LCD RPM

Infrarot-Drehzahlmesser auf Arduino-Plattform


  • Der Drehzahlmesser auf der Arduino-Plattform verwendet einen Infrarot-Hindernissensor, der ein Hindernis in einem von einem Potentiometer festgelegten Abstand erfassen kann.
  •       
  • Eine sekundäre Verwendung eines ähnlichen Sensors ist im Grunde ein Zähler, der auf die Riemenscheibendrehzahl von der Kurbelwelle reagieren kann.
  •       
  • Eine reflektierende Oberfläche (in der Größenordnung von Millimetern, maximal 1 Zentimeter) befindet sich auf der Scheibe - Band, Aluminiumfolie, die Infrarotlicht von der Sendediode in die Empfangsdiode reflektieren kann.
  •       
  • Der Sensor reagiert nicht auf die Entfernung als solche. Es reagiert nur auf die Reflexion von Licht von der reflektierenden Oberfläche.
  •       
  • Das Ergebnis ist ein relativ zuverlässiger Drehzahlmesser, der das Ergebnis auf einem Zeichen-LCD-Display mit einem I2C-Konverter darstellt.
  •       
  • Kann verwendet werden, um Riemenscheiben (Erntemaschinen, Traktoren), aber auch für Fahrräder, Autoräder (kann auch auf die Bewegungsgeschwindigkeit bei einem bekannten Radumfang umgerechnet werden) aufzunehmen.
  •       

    Projekthardware:

  • Arduino Uno R3
  • IR Hindernissensor
  • LCD 20x4 oder 16x2
  • I2C Konverter für LCD
  • Ergebnis

    Schema

    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);
    }