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.
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.
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
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.
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.
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ätt30med60Fler blad eller markeringar:
Dela60med 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.