Hochgeschwindigkeits-Arduino-Drehzahlmesser (RPM) mit neuartigem Algorithmus
Komponenten und Zubehör
| Bauteil | Menge |
|---|---|
| Arduino UNO | 1 |
| IR-Näherungssensor (wie im Projekt empfohlen) | 1 |
| Jumper-Kabel | 3 |
| Laserdiode 655 nm (Rot) / Laserpointer | 1 |
| DC-Motor (zum Testen) | 1 |
| USB-Kabel (Mini-USB) | 1 |
| 9V-Blockbatterie | 1 |
Benötigte Werkzeuge
- Lötzinn (bleifrei)
- Lötkolben (nur für Motoranschlüsse)
Apps und Online-Dienste
- Arduino IDE
Über dieses Projekt

Dieses Projekt wurde von Grund auf neu entwickelt, um die exakte Drehzahl (RPM) verschiedener Motoren mit einem einzelnen IR-Sensor, einem Arduino und einem essenziellen Schlüsselbestandteil – einem roten Laserpointer zu messen.
Der IR-Sensor detektiert die geringen Infrarot-Anteile des roten Laserlichts. Bei blau/grünen Lasern fällt das Signal fast auf 0. Wenn ein Lüfterblatt den Laserstrahl unterbricht, bricht das Signal zusammen. Durch die Drehung entsteht ein periodisches Signal.
NEU: Single-Shot-Algorithmus für schnellere, adaptive Messungen
Der eigens entwickelte Algorithmus misst in unter 40 ms und liefert präzise Ergebnisse. Das Kernmerkmal: Single Shot Detection – die RPM wird bei jeder Unterbrechung des Laserstrahls berechnet. Da eine Unterbrechung 1/n einer Umdrehung entspricht (n = Blattanzahl), ist das Programm extrem empfindlich für kleinste RPM-Änderungen (bis 2 Nachkommastellen) bei jeder 1/n-ten Umdrehung. Dies liefert höchste Genauigkeit und Ansprechverhalten.

Die Ausgabe erfolgt ca. 2-mal pro Sekunde, RPM-Werte mit zwei Dezimalstellen.
Bitte testen Sie dieses Projekt und teilen Sie Ihre Ergebnisse! Vorschläge für neue Projekte willkommen. Bei Gefallen: Respekt zeigen. Folgen Sie mir: @YASH36
Code
RPM_counter_101 (Arduino)
// Code by YaSh
int sen = A0;
const float wid = 0.012; // Blattbreite in Metern (anpassen!)
const float rad = 0.045; // Erfassungsradius in Metern (anpassen!)
const float konst = 6.2832; // 2 * PI
float time_1, time_2, vel, diff, tnet, rpm;
void setup() {
Serial.begin(9600);
pinMode(sen, INPUT);
Serial.println("\n Motor mind. 3 Sek. vor Messstart starten.\n");
delay(3000);
}
void loop() {
// Warten auf Unterbrechung (Signal fällt unter Schwelle)
if (analogRead(sen) < 950) {
time_1 = millis();
delay(30); // Entprellen / Stabilisierung
}
// Signal wieder da (Blatt vorbeigegangen)
if (analogRead(sen) > 950) {
time_2 = millis();
diff = (time_2 - time_1); // Zeit der Unterbrechung [ms]
vel = wid / diff; // Umfangsgeschwindigkeit [m/ms]
tnet = (konst * rad) / vel; // Umlaufzeit [ms]
rpm = 60000 / tnet; // Umrechnung ms -> min -> RPM
}
Serial.print("\n RPM: ");
Serial.println(rpm);
}
Schaltpläne


Herstellungsprozess
- Automatisiertes Aeroponik-System mit Raspberry Pi und Feuchtigkeitssensor bauen
- Thermofühler (Thermocouple) mit Arduino Portenta H7 über MAX6675 IC integrieren
- Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
- DHT11 Temperatur- & Feuchtesensor mit LED-Anzeige & Piezo-Summer
- K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
- Unopad: Nahtloser Arduino MIDI-Controller für Ableton Live
- Arduino Temperatur- & Feuchtelogger mit DHT11 & Ethernet Shield
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- Einfachen Hindernissensor mit Arduino bauen – IR-LED & Photodiode Tutorial
- Echtzeit-Zelluläre Automaten auf Arduino mit 128x64 OLED-Display