Få gratis leverans på alla beställningar över £ 20!

Arduino RPM Counter Använda en optisk sensor

Arduino RPM Counter Använda en optisk sensor

Att bygga en RPM-kontrakt (revolutioner per minut) är ett klassiskt och användbart Arduino-projekt. Denna guide går dig genom att skapa en optisk tachometer Med en IR LED, en IR-fototransistor och en 16×2 LCD-skärm. Resultatet är en enkel, korrekt RPM-räknare som passar för motorer, fans eller propellrar.


Projektöversikt

Denna Arduino RPM-räknare fungerar genom att avbryta en infraröd stråle med ett roterande objekt (som en propeller). Varje avbrott upptäcks av Arduino, räknas och omvandlas till ett RPM-värde som visas på en LCD-skärm.

Viktiga funktioner:

  • Realtid RPM mätning

  • Optisk (icke-kontakt) känsla

  • LCD-utgång för enkel läsning

  • Enkla och billiga komponenter


Delar List

Du behöver följande komponenter:

  • 1 × Arduino styrelse

  • 1 × 16 × 2 LCD display (HD44780 kompatibel)

  • 1 × 10kΩ potentiometer (LCD kontrast kontroll)

  • 1 × 10kΩ motstånd

  • 1 × IR LED

  • 1 × IR fototransistor

  • Jumper trådar


Trådinstruktioner

Följ dessa steg noggrant för att montera kretsen. Varje underavsnitt förklarar exakt var varje tråd ska gå för att undvika förvirring.

  1. Power Distribution

    • Ansluta Arduino 5V pin Till Breadboard positiv järnväg.

    • Ansluta Arduino GND pin Till Breadboard mark järnväg.

    • Se till att alla komponenter (LCD, potentiometer, IR LED och fototransistor) delar denna gemensamma grund.

  2. LCD- och Potentiometeranslutningar (16×2 Parallel LCD)

    • LCD Pin 1 (VSS) Ground

    • LCD Pin 2 (VDD) 5V

    • LCD Pin 3 (VO) Mellanhöjden av 10k Potentiometer

      • Potentiometer sidostift → 5V och Ground (används för att justera LCD kontrast)

    • LCD Pin 4 (RS) Arduino digital pinne 7 7 7 7 7

    • LCD Pin 5 (RW) Ground (LCD inställd på att skriva läge)

    • LCD Pin 6 (E) Arduino digital pinne 8 8 8 8 8 8 8 8

    • LCD Pin 11 (D4) Arduino digital pinne 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9

    • LCD Pin 12 (D5) Arduino digital pinne 10 10 10 10 10

    • LCD Pin 13 (D6) Arduino digital pinne 11 11 11

    • LCD Pin 14 (D7) Arduino digital pinne 12 12 12

    • LCD Backlight

      • Pin 15 (A) → 5V genom motstånd

      • Pin 16 (K) Ground

  3. IR LED (Transmittor)

    • Anode (längre bly) Arduino Digital pin 13

    • Cathode (shorter lead) Ground

    • IR LED förblir ON kontinuerligt för att avge en infraröd stråle mot fototransistorn.

  4. IR Phototransistor (mottagare)

    • Collector (shorter lead) Arduino digital pin 2

    • Emitter (längre bly) Ground

    • Placera fototransistorn direkt mot IR LED så strålen avbryts av det roterande objektet.

  5. Slutliga kontroller

    • Se till att alla markanslutningar är vanliga.

    • Dubbelkolla stiftnummer innan du driver kretsen.

    • Justera potentiometern tills texten är tydligt synlig på LCD.

Tips: Digital pin 2 används eftersom den stöder hårdvara avbrytertillåter Arduino att räkna balkavbrott exakt och beräkna RPM tillförlitligt.


Arduino-kod

Ladda upp följande skiss till ditt Arduino-kort:

/*
 * Optical Tachometer
 *
 * Uses an IR LED and IR phototransistor to implement an optical tachometer.
 * The IR LED is connected to pin 13 and runs continuously.
 * Digital pin 2 (interrupt 0) is connected to the IR detector.
 */

#include 

int ledPin = 13;                // IR LED connected to digital pin 13
volatile byte rpmcount;
unsigned int rpm;
unsigned long timeold;

// Initialize the LCD with the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void rpm_fun() {
  // This interrupt runs every time the IR beam is cut
  rpmcount++;
}

void setup() {
  lcd.begin(16, 2);             // Initialize the LCD

  // Attach interrupt to digital pin 2 (interrupt 0)
  attachInterrupt(0, rpm_fun, FALLING);

  // Turn on IR LED
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);

  rpmcount = 0;
  rpm = 0;
  timeold = 0;
}

void loop() {
  // Update RPM every second
  delay(1000);

  // Temporarily stop interrupts during calculation
  detachInterrupt(0);

  rpm = 30 * 1000 / (millis() - timeold) * rpmcount;
  timeold = millis();
  rpmcount = 0;

  // Display RPM on LCD
  lcd.clear();
  lcd.print("RPM=");
  lcd.print(rpm);

  // Re-enable interrupt
  attachInterrupt(0, rpm_fun, FALLING);
}

Förstå RPM-beräkningen

Detta projekt förutsätter två avbrott per revolutionTill exempel när du använder en motor med en tvåbladig propeller.

Därför använder RPM-beräkningen denna formel:

rpm = 30 * 1000 / (millis() - timeold) * rpmcount;

Justera för din inställning

  • Ett avbrott per revolution:
    Ersätt 30 med 60

  • Fler blad eller markeringar:
    Dela 60 med antalet avbrott per full rotation och uppdatera formeln därefter.

Denna flexibilitet gör att du kan anpassa projektet till olika motorer och roterande objekt.


Final Notes

  • Se till att IR LED och fototransistor är korrekt anpassade för tillförlitliga avläsningar.

  • Använd reflekterande band eller en slitsad disk för mer konsekvent balkavbrott.

  • Detta projekt kan utökas genom att logga in RPM-data eller lägga till serieproduktion.


Redo att bygga?

Denna Arduino RPM-räknare är en bra grund för motorstyrningsprojekt, robotik och mekanisk diagnostik. Montera komponenterna, ladda upp koden och börja mäta RPM med förtroende.

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.

Lämna en kommentar