Arduino RPM-teller met behulp van een optische sensor
Het bouwen van een RPM (revoluties per minuut) teller is een klassiek en nuttig Arduino project. Deze gids leidt u door het creëren van een optische tachometer met behulp van een IR LED, een IR fototransistor en een 16×2 LCD display. Het resultaat is een eenvoudige, nauwkeurige RPM-teller geschikt voor motoren, ventilatoren of propellers.
Projectoverzicht
Deze Arduino RPM-teller werkt door een infraroodstraal met een roterend object (zoals een propeller) te onderbreken. Elke onderbreking wordt gedetecteerd door de Arduino, geteld en omgezet in een RPM waarde die wordt weergegeven op een LCD scherm.
Belangrijkste kenmerken:
Real-time RPM-meting
Optische (non-contact) sensor
LCD-uitgang voor gemakkelijk lezen
Eenvoudige en goedkope componenten
Onderdelenlijst
U heeft de volgende componenten nodig:
1 × Arduino-plank
1 × 16×2 LCD-display (HD44780 compatibel)
1 × 10kΩ potentiometer (LCD contrast control)
1 × 10kΩ weerstand
1 × IR LED
1 × IR fototransistor
Jumperdraden
Bedradingsinstructies
Volg deze stappen zorgvuldig om het circuit te monteren. Elke subsectie legt precies uit waar elke draad moet gaan om verwarring te voorkomen.
Energieverdeling
Verbind de Arduino 5V pin naar de breadboard positief spoor.
Verbind de Arduino GND-speld naar de breadboard grondspoor.
Zorg ervoor dat alle componenten (LCD, potentiometer, IR LED en fototransistor) deze gemeenschappelijke grond delen.
LCD- en Potentiometerverbindingen (16×2 parallelle LCD)
LCD-pin 1 (VSS) → Grond
LCD-pin 2 (VDD) → 5V
LCD-pin 3 (VO) → Midden speld van de 10k Ω potentiometer
Potentiometer zijspelden → 5V en grond (gebruikt om LCD contrast aan te passen)
LCD-pin 4 (RS) → Arduino digitale pin 7
LCD-pin 5 (RW) → Grond (LCD ingesteld op schrijfmodus)
LCD-pin 6 (E) → Arduino digitale pin 8
LCD-pin 11 (D4) → Arduino digitale pin 9
LCD-pin 12 (D5) → Arduino digitale pin 10
LCD-pin 13 (D6) → Arduino digitale pin 11
LCD-pin 14 (D7) → Arduino digitale pin 12
LCD Achtergrondverlichting
Pin 15 (A) → 5V door een weerstand
Pin 16 (K) → Grond
IR LED (Transmitter)
anode (langer lood) → Arduino digitale pin 13
Kathode (korter lood) → Grond
De IR LED blijft continu aan om een infraroodstraal naar de fototransistor uit te stralen.
IR Phototransistor (Receiver)
Verzamelaar (korter lood) → Arduino digitale pin 2
Emitter (langere lood) → Grond
Plaats de fototransistor direct naar de IR LED zodat de bundel wordt onderbroken door het roterende object.
Definitieve controles
Zorgen voor alles grondverbindingen zijn gebruikelijk.
Dubbele controle pin nummers voordat de stroomkring.
Pas de potentiometer aan totdat de tekst duidelijk zichtbaar is op het LCD.
Tip: Digitale pin 2 wordt gebruikt omdat het ondersteunt hardware interrupts, waardoor de Arduino de bundelonderbrekingen nauwkeurig kan tellen en RPM betrouwbaar kan berekenen.
Arduino-code
Upload de volgende schets naar uw Arduino bord:
/*
* 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);
}
Inzicht in de RPM-berekening
Dit project gaat uit van twee onderbrekingen per revolutie, zoals bij het gebruik van een motor met een tweebladige schroef.
Daarom gebruikt de RPM berekening deze formule:
rpm = 30 * 1000 / (millis() - timeold) * rpmcount;
Aanpassen voor uw installatie
Eén onderbreking per revolutie:
Vervangen30met60Meer bladen of markeringen:
Verdelen60het aantal onderbrekingen per volledige rotatie en de formule dienovereenkomstig bijwerken.
Met deze flexibiliteit kunt u het project aanpassen aan verschillende motoren en roterende objecten.
Laatste opmerkingen
Zorg ervoor dat de IR LED en fototransistor goed zijn uitgelijnd voor betrouwbare metingen.
Gebruik reflecterende tape of een sleufschijf voor meer consistente straalonderbreking.
Dit project kan worden uitgebreid door RPM-gegevens te loggen of seriële output toe te voegen.
Klaar om te bouwen?
Deze Arduino RPM teller is een geweldige basis voor motorcontrole projecten, robotica en mechanische diagnostiek. Verzamel de componenten, upload de code en meet RPM met vertrouwen.