In diesem Tutorial lernst du, wie du das Geschwindigkeits- oder Tachometersignal eines 3- oder 4-adrigen Lüfters mit einem Arduino misst.
Lüfter sind ein wesentlicher Bestandteil vieler elektronischer Geräte und sorgen für Kühlung und Belüftung, um Überhitzung zu vermeiden. Die Überwachung der Lüftergeschwindigkeit ist entscheidend, um optimale Leistung zu gewährleisten und mögliche Ausfälle zu verhindern.
Benötigte Teile
Hier die Liste der benötigten Teile. Ich habe LEDs hinzugefügt, falls du eine Warn-LED blinken lassen möchtest, wenn die Lüftergeschwindigkeit unter einen bestimmten Schwellenwert fällt.

Arduino Uno

Dupont-Kabelsatz

Breadboard

USB-Kabel für Arduino UNO

Widerstands- & LED-Kit
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Arten von Lüftern
Es gibt viele verschiedene Arten von Lüftern. Im Folgenden konzentrieren wir uns auf die Lüfter, die üblicherweise zur Kühlung in Computern, 3D-Druckern, kleinen Verdunstungskühlern und ähnlichem verwendet werden. Die meisten dieser Lüfter sind brushless DC Lüfter mit 2, 3 oder 4 Drähten, die mit 12V betrieben werden.
2-adriger DC-Lüfter
2-adrige DC-Lüfter sind die einfachste Art von DC-Lüftern. Sie haben zwei Drähte: einen roten Draht für die Stromversorgung (VCC) und einen schwarzen Draht für Masse (GND). Unten ist ein Bild eines typischen 2-adrigen Lüfters.

Diese Lüfter laufen mit fester Geschwindigkeit, die jedoch über Pulse Width Modulation (PWM) geändert werden kann. Siehe unser Tutorial zu How To Control Fan using Arduino. 2-adrige Lüfter liefern kein direkt auslesbares Geschwindigkeitssignal. Du kannst jedoch mit einem Magneten und einem Hall-Sensor dein eigenes Signal erzeugen: Build Arduino Tachometer Using A3144 Hall Effect Sensor
3-adriger DC-Lüfter
3-adrige DC-Lüfter haben die üblichen zwei Drähte für Stromversorgung und Masse (rot und schwarz) sowie einen zusätzlichen Draht (typischerweise gelb), der als Tachometersignal (TACH) bezeichnet wird. Dieser Draht liefert ein Pulssignal, das die Drehzahl des Lüfters anzeigt. Durch das Auslesen dieses Signals kannst du die Lüftergeschwindigkeit oder Umdrehungen pro Minute (RPM) überwachen.

Das Tachometersignal wird von einem Hall-Effekt-Sensor oder einem optischen Sensor erzeugt, der das Vorbeigehen bestimmter Markierungen oder Magnete am Rotor oder Motor des Lüfters erkennt. Die Ausgabe ist ein Puls, dessen Frequenz (und Pulsdauer) der Lüftergeschwindigkeit entspricht.
Die meisten Computerlüfter sind 3-adrig, werden aber auch in vielen anderen Geräten verwendet. Unten ein Bild eines kleinen 3-adrigen 12V DC-Lüfters für einen 3D-Drucker:

4-adriger DC-Lüfter
4-adrige Lüfter sind die fortschrittlichste Art von Lüftern und bieten zusätzliche Funktionen. Sie haben vier Drähte: einen für die Stromversorgung (meist rot), einen für Masse (meist schwarz), einen für das Geschwindigkeitssignal (meist gelb) und einen für die Geschwindigkeitsregelung (meist blau).
Die Lüftergeschwindigkeit wird durch Senden eines PWM (Pulse Width Modulation) Signals über den Geschwindigkeitsregelungsdraht gesteuert, der mit einem MOSFET verbunden ist, der den Motor steuert. Siehe das folgende Schaltbild.

Unten ein Bild eines typischen 12V 4-adrigen DC-Lüfters, der als Computerlüfter verwendet wird:

Du kannst die Geschwindigkeit eines 2- oder 3-adrigen Lüfters auf die gleiche Weise steuern, indem du die Steuerungsschaltung selbst baust. Sieh dir unser Tutorial zu How To Control Fan using Arduino für mehr Details an.
Zusammenfassend laufen 2- und 3-adrige Lüfter typischerweise mit konstanter Geschwindigkeit. 3-adrige Lüfter liefern ein Tachometersignal zur Überwachung der Lüftergeschwindigkeit. 4-adrige Lüfter laufen meist mit variabler Geschwindigkeit, die über ein PWM-Signal am vierten Draht gesteuert wird, erlauben aber auch die Überwachung der Lüftergeschwindigkeit über den dritten Draht.
Verstehen des Lüftergeschwindigkeitssignals
Wie oben erwähnt, befindet sich in einem 3- oder 4-adrigen Lüfter typischerweise ein Hall Effect Sensor, der das Vorbeigehen von zwei Magneten am rotierenden Teil des Lüfters erkennt, um die Lüftergeschwindigkeit zu messen. Zwei Magnete werden meist verwendet, um eine ungleichmäßige Massenverteilung der rotierenden Teile zu vermeiden, die Vibrationen verursachen würde. Siehe das Bild unten.

Das Geschwindigkeitssignal kann mit einem Pull-up-Widerstand gemessen werden, indem man ein Oszilloskop wie im obigen Schaltbild anschließt. Hier ein Foto meines Oszilloskops, das das Tachometersignal eines kleinen Lüfters anzeigt.

Wie du sehen kannst, ist das Tachometer- oder Geschwindigkeitssignal ein Rechteckpuls mit 50% Tastverhältnis und einer Frequenz, die der Drehzahl des Lüfters entspricht. Je schneller der Lüfter dreht, desto kürzer wird die Pulsdauer und umgekehrt.
Wenn du genau hinsiehst, wirst du feststellen, dass die Spitzenspannung des Pulses etwa 5V beträgt, obwohl der Lüfter ein 12V-Lüfter ist. Das liegt daran, dass ich eine etwas andere Schaltung verwende, die wir im nächsten Abschnitt detailliert besprechen.
Anschluss des Geschwindigkeitssignals an einen Arduino
In diesem Abschnitt zeige ich dir, wie du das Geschwindigkeitssignal (Tachometersignal) eines 3- oder 4-adrigen Lüfters an einen Arduino anschließt, um die Lüftergeschwindigkeit zu messen.
Du kannst den gelben Draht eines 3- oder 4-adrigen Lüfters nicht einfach an einen digitalen Eingang des Arduino anschließen, um die Lüftergeschwindigkeit auszulesen. Das funktioniert nicht! Du benötigst einen pull-up resistor. Das folgende Schaltbild zeigt dir, wie das gemacht wird.

Schließe einen Widerstand von 1KΩ oder 10KΩ zwischen dem +5V-Pin und Pin 2 deines Arduino an. Im obigen Beispiel verwende ich einen 1KΩ-Widerstand, aber jeder Widerstand zwischen 1KΩ und 10KΩ ist geeignet und wird häufig als Pull-up-Widerstand verwendet. Verbinde dann den gelben Tachometer-Draht des Lüfters ebenfalls mit Pin 2 des Arduino. Außerdem müssen wir den schwarzen Masse-Draht (GND) des Lüfters mit dem GND-Pin des Arduino verbinden. Schließlich verbinde den Lüfter mit der erforderlichen Spannung. Im obigen Beispiel sind das 12V.
Lüfter-Spezifikation
Überprüfe das Etikett deines Lüfters, um herauszufinden, welche Spannung in deinem Fall benötigt wird. Das Bild unten zeigt das Etikett eines meiner Lüfter, der für 12V mit einem Strom von 0,18A = 180mA ausgelegt ist.

Typische Spannungen sind 5V, 6V, 12V und 24V, und die Ströme liegen bei etwa 200 bis 300mA für Computerlüfter. Beachte, dass du einen GPIO-Pin deines Arduino nicht als Stromquelle für einen Lüfter verwenden kannst. Der Lüfter zieht zu viel Strom und beschädigt deinen Arduino! Du kannst den 5V-Pin deines Arduino Uno verwenden, wenn dein Lüfter weniger als 500mA zieht (und ein 5-6V-Lüfter ist).
Schaltung auf dem Breadboard
Du kannst diese Schaltung mit einem 12V-Lüfter und einer 9V-Batterie ausprobieren, falls du kein 12V-Netzteil oder keine Batterie hast. Der Lüfter dreht sich dann nur etwas langsamer. Das Bild unten zeigt die komplette Verdrahtung auf einem Breadboard. Es ist dieselbe Schaltung wie zuvor, nur mit der zusätzlichen Batterie und auf einem Breadboard.

Im nächsten Abschnitt schreiben wir den Code, um die Lüftergeschwindigkeit mit dieser Schaltung zu messen.
Code zum Auslesen des Lüftergeschwindigkeitssignals
Hier lesen wir das Lüftergeschwindigkeitssignal aus, um die RPM (Umdrehungen pro Minute) des Lüfters zu messen. Dies setzt voraus, dass du einen 3- oder 4-adrigen Lüfter hast, der ein Tachometerausgangssignal liefert. Wenn du einen 2-adrigen Lüfter hast, keine Sorge. Du kannst dir ein Tachometersignal selbst erzeugen. Siehe unser Tutorial Build Arduino Tachometer Using A3144 Hall Effect Sensor.
Wie du oben gesehen hast, ist das Geschwindigkeits- oder Tachometersignal ein Rechteckpuls. Wenn wir zählen, wie viele Pulse wir innerhalb einer Minute erhalten, können wir die Anzahl der Umdrehungen des Lüfters pro Minute berechnen. Diese Geschwindigkeitsmessung nennt man RPM (Umdrehungen pro Minute).
Die einfachste Methode, Pulse zu zählen, ist das Erkennen einer steigenden oder fallenden Flanke im Signal. Das Bild unten zeigt einen Rechteckpuls mit markierter fallender Flanke.

Das Zählen fallender Flanken entspricht dem Zählen von Pulsen. Der folgende Code macht das, indem er einen Interrupt am Tachometersignal anlegt, der einen Zähler erhöht, sobald eine fallende Flanke erkannt wird. Schau dir den Code zuerst kurz an, dann besprechen wir die Details.
const int tachoPin = 2;
volatile unsigned long counter = 0;
void countPulses() {
counter ++;
}
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(tachoPin), countPulses, FALLING);
}
void loop() {
delay(1000);
long rpm = counter * 60 / 2;
Serial.print("RPM:");
Serial.println(rpm);
counter = 0;
}
Konstanten und Variablen
Wir beginnen mit den Konstanten und Variablen. Zuerst definieren wir die Konstante tachoPin, die angibt, an welchem Pin das Tachometersignal des Lüfters angeschlossen ist. Wir definieren auch eine Variable counter, um die Anzahl der vom Tachometersignal empfangenen Pulse zu zählen. Sie muss vom Typ „volatile“ sein, da sie innerhalb einer interrupt service routine (ISR) verwendet wird.
const int tachoPin = 2; volatile unsigned long counter = 0;
Funktion zum Zählen der Pulse
In der countPulses()-Funktion erhöhen wir die Variable counter um eins, jedes Mal wenn ein Puls vom Tachometersignal empfangen wird. Diese Funktion wird aufgerufen, sobald eine fallende Flanke am tachoPin mit der attachInterrupt()-Funktion erkannt wird.
void countPulses() {
counter ++;
}
Setup-Funktion
In der setup()-Funktion initialisieren wir die serielle Kommunikation mit einer Baudrate von 9600 über Serial.begin(). So können wir die RPM-Werte im Serial Monitor und Serial Plotter ausgeben. Wir legen außerdem einen Interrupt am tachoPin mit attachInterrupt() an und geben an, dass der Interrupt bei einer FALLING-Flanke ausgelöst werden soll. Sobald eine fallende Flanke am tachoPin erkannt wird, wird die countPulses()-Funktion aufgerufen. Du könntest stattdessen auch die steigende Flanke verwenden, wenn du möchtest.
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(tachoPin), countPulses, FALLING);
}
Loop-Funktion
In der loop()-Funktion warten wir zuerst 1000 ms = 1 Sekunde mit delay(). Während dieser Sekunde läuft die Interrupt-Service-Routine countPulses() im Hintergrund und zählt die fallenden Flanken des Tachometersignals.
Dann berechnen wir die RPM, indem wir die Variable counter mit 60 multiplizieren (um von Pulsen pro Sekunde auf Pulsen pro Minute zu kommen) und durch 2 teilen (da jede Umdrehung des Lüfters 2 Pulse erzeugt). Wir geben den berechneten RPM-Wert mit Serial.print() und Serial.println() im Serial Monitor aus. Schließlich setzen wir die Variable counter auf 0 zurück, um für den nächsten Zeitraum (1 Sekunde) wieder zu zählen.
void loop() {
delay(1000);
long rpm = counter * 60 / 2;
Serial.print("RPM:");
Serial.println(rpm);
counter = 0;
}
Beachte, dass einige Lüfter nur einen Puls pro Umdrehung melden. In diesem Fall musst du die Division durch 2 entfernen, da jeder Puls dann eine Umdrehung des Lüfters bedeutet.
Wenn deine Geschwindigkeitswerte stark schwanken, kannst du die Verzögerungszeit erhöhen. Zum Beispiel liefert eine Verzögerung von 2 Sekunden stabilere Werte, dann musst du den Multiplikator von 60 auf 30 ändern. Wenn du schnellere Geschwindigkeitswerte möchtest, kannst du die Verzögerung auf 500 ms reduzieren, musst dann aber den Multiplikator von 60 auf 120 ändern.
Beispielausgabe
Wenn ich diesen Code mit meinem Lüfter ausführe und mit dem Finger die Drehzahl vorübergehend durch Drücken auf die Mittelachse verlangsamen, sehe ich folgende Ausgabe im Serial Plotter:

Und da hast du es! Jetzt weißt du, wie du die Geschwindigkeit eines 3- oder 4-adrigen Lüfters mit seinem Tachometersignal und einem Arduino messen kannst.
Fazit
In diesem Blogbeitrag haben wir gelernt, wie man Lüftergeschwindigkeits- (Tachometer-) Signale mit Arduino ausliest. Wir haben mit den verschiedenen Lüftertypen begonnen, darunter 2-, 3- und 4-adrige Lüfter.
Dann haben wir uns das Lüftergeschwindigkeitssignal selbst angesehen. Lüftergeschwindigkeitssignale werden typischerweise als Rechteckpulse mit einer Frequenz proportional zur Lüftergeschwindigkeit und gemessen in Umdrehungen pro Minute (RPM) bereitgestellt.
Anschließend haben wir besprochen, wie man den Lüftergeschwindigkeits-Draht mit dem Arduino verbindet. Wir haben eine Schritt-für-Schritt-Anleitung für die notwendigen Verbindungen gegeben.
Schließlich haben wir den Prozess des Schreibens des Codes zum Auslesen des Lüftergeschwindigkeitssignals behandelt. Wir haben erklärt, wie man Interrupts verwendet, um die Pulse vom Lüfter zu erfassen und die Geschwindigkeit basierend auf der Anzahl der innerhalb einer Sekunde empfangenen Pulse zu berechnen.
Wenn du weitere Fragen hast oder eine Klärung zu einem der in diesem Blogbeitrag behandelten Themen benötigst, siehe bitte den Abschnitt Häufig gestellte Fragen unten.
Häufig gestellte Fragen
Hier sind einige häufig gestellte Fragen zum Auslesen von Lüftergeschwindigkeitssignalen mit Arduino:
F: Von welchen Lüftertypen kann ich das Geschwindigkeitssignal auslesen?
A: Du kannst das Geschwindigkeitssignal von 3- und 4-adrigen Lüftern auslesen. Diese sind gängige Lüftertypen, die in verschiedenen elektronischen Geräten und Computersystemen verwendet werden.
F: Wie erkenne ich den Geschwindigkeitssignaldraht an einem Lüfter?
A: Der Geschwindigkeitssignaldraht ist meist mit „TACH“ oder „SIGNAL“ am Lüfter gekennzeichnet. Er ist typischerweise gelb, während die Strom- und Masseleitungen rot und schwarz sind. Bei einem 4-adrigen Lüfter gibt es meist einen zusätzlichen blauen Draht für die Geschwindigkeitsregelung.
F: Wie kann ich warnen, wenn die Lüftergeschwindigkeit zu niedrig ist?
Hier ist ein Codebeispiel, das die eingebaute LED einschaltet, wenn die Lüftergeschwindigkeit unter 500 RPM fällt:
const int tachoPin = 2;
volatile unsigned long counter = 0;
void countPulses() {
counter ++;
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(tachoPin), countPulses, FALLING);
}
void loop() {
delay(1000);
long rpm = counter * 60 / 2;
counter = 0;
int warn = rpm < 500 ? HIGH : LOW;
digitalWrite(LED_BUILTIN, warn);
}
F: Kann ich mehrere Lüfter an den Arduino anschließen, um deren Geschwindigkeitssignale auszulesen?
A: Ja, du kannst mehrere Lüfter an den Arduino anschließen, indem du für jeden Lüftergeschwindigkeitssignaldraht separate digitale Eingänge verwendest. Passe deinen Code entsprechend an, um die Geschwindigkeitssignale von mehreren Pins auszulesen.
F: Wie hoch ist die Spannung des Lüftergeschwindigkeitssignals?
A: Die Spannung des Lüftergeschwindigkeitssignals wird durch die Spannung bestimmt, an die der Pull-up-Widerstand angeschlossen ist. Um ein Tachometersignal mit einem Arduino auszulesen, solltest du ein 5V-Signal verwenden. Für andere Mikroprozessoren, wie den ESP32, verwendet man ein 3,2V-Signal.
F: Wie berechne ich die Lüftergeschwindigkeit aus dem Geschwindigkeitssignal?
A: Die Lüftergeschwindigkeit wird üblicherweise als eine Serie von Pulsen pro Umdrehung (PPR) oder Umdrehungen pro Minute (RPM) angegeben.
F: Kann ich die Lüftergeschwindigkeit mit Arduino steuern?
A: Das Auslesen des Lüftergeschwindigkeitssignals mit Arduino ermöglicht die Überwachung der Lüftergeschwindigkeit, steuert sie aber nicht direkt. Wenn du die Lüftergeschwindigkeit steuern möchtest, benötigst du zusätzliche Schaltungen, wie einen Motortreiber oder PWM-Controller, abhängig vom Lüftertyp.
Wenn du die Lüftergeschwindigkeit mit einem PWM-Signal steuerst, stört das die Geschwindigkeitsmessung. Du musst das PWM während der Geschwindigkeitsmessung pausieren oder einen 4-adrigen Lüfter verwenden, der einen separaten Geschwindigkeitsregelungsdraht hat.
F: Gibt es Sicherheitsvorkehrungen, die ich beim Arbeiten mit Lüftern und Arduino beachten sollte?
A: Ja, speise den Lüfter nicht über die GPIO-Pins deines Arduino! Verwende eine separate Stromversorgung oder Batterie mit geeigneter Spannung und Stromstärke und stelle sicher, dass die Masseleitungen der Stromversorgung und des Arduino verbunden sind. Verwende die oben gezeigten Schaltungen auch nicht mit einem AC-Lüfter, der mit 110V oder 220V läuft!
Wenn du weitere spezifische Fragen hast, kannst du diese gerne im Kommentarbereich unten stellen.

