Erklärung zum Python-Skript zur Lüftersteuerung via GPIO auf dem Raspberry Pi
Dieses Python-Skript dient der automatischen Steuerung eines Lüfters, der an einem GPIO-Pin des Raspberry Pi angeschlossen ist.
Je nach Temperatur der CPU wird der Lüfter entweder ausgeschaltet, mit halber oder voller Geschwindigkeit betrieben.
1. Bibliotheken:RPi.GPIO: Ermöglicht die Steuerung von GPIO-Pins auf dem Raspberry Pi.time: Für zeitgesteuerte Abläufe.
2. Einstellungen:FAN_PIN = 14: Der GPIO-Pin 14 wird für den Lüfter verwendet.PWM_FREQ = 25: Die PWM-Frequenz beträgt 25 Hz (geeignet für einfache Lüftersteuerung).
3. Initialisierung:
GPIO-Modus wird auf BCM gesetzt (Broadcom-SoC-Nummern).
Der Lüfter-Pin wird als Ausgang gesetzt.
PWM wird auf dem Lüfterpin gestartet mit 0 % (Lüfter aus).
4. CPU-Temperatur auslesen:
Die Funktion get_cpu_temp() liest die aktuelle CPU-Temperatur direkt aus dem Systemfile:/sys/class/thermal/thermal_zone0/temp
Die Temperatur wird in Milligrad Celsius ausgelesen und durch 1000 geteilt, um °C zu erhalten.
5. Hauptprogrammschleife:
In einer Endlosschleife wird alle 5 Sekunden die Temperatur geprüft.
Abhängig von der Temperatur wird die Lüftergeschwindigkeit angepasst: < 40 °C → Lüfter aus (0 %)
40–49 °C → 50 % Leistung
≥ 50 °C → 100 % Leistung (voll an)
6. Beenden:
Bei KeyboardInterrupt (z. B. durch Strg+C im Terminal) wird das Programm sauber beendet.
Die PWM wird gestoppt und alle GPIO-Pins werden mit GPIO.cleanup() zurückgesetzt.
Zweck:
Dieses Skript eignet sich für Raspberry-Pi-Projekte, bei denen die CPU-Kühlung automatisch geregelt werden soll. Es verlängert die Lebensdauer von Lüftern und sorgt für leisen Betrieb bei niedriger Last.
pwm_fan.py
# -*- coding: utf-8 -*-
#
# Lüftersteuerung für Raspberry Pi
# Copyright (C) 2023 Andre Zimmermann
#
# Dieses Programm ist freie Software: Sie können es unter den Bedingungen
# der GNU General Public License, wie von der Free Software Foundation veröffentlicht,
# weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder
# (nach Ihrer Wahl) jeder späteren Version.
#
# Dieses Programm wird in der Hoffnung bereitgestellt, dass es nützlich ist,
# aber OHNE JEDE GEWÄHRLEISTUNG – sogar ohne die implizite Gewährleistung
# der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
# Siehe die GNU General Public License für weitere Details.
#
# Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben.
# Falls nicht, siehe <https://www.gnu.org/licenses/>.
import RPi.GPIO as GPIO
import time
# Einstellungen
FAN_PIN = 14 # GPIO-Pin, an dem der L�fter angeschlossen ist
PWM_FREQ = 25 # PWM-Frequenz
# GPIO initialisieren
GPIO.setmode(GPIO.BCM)
GPIO.setup(FAN_PIN, GPIO.OUT)
# PWM initialisieren
fan = GPIO.PWM(FAN_PIN, PWM_FREQ)
fan.start(0) # L�fter aus
def get_cpu_temp():
# CPU-Temperatur auslesen
temp = None
with open("/sys/class/thermal/thermal_zone0/temp", "r") as f:
temp = f.readline()
return float(temp) / 1000
try:
while True:
cpu_temp = get_cpu_temp()
if cpu_temp < 40:
fan.ChangeDutyCycle(0) # L�fter aus
elif cpu_temp < 50:
fan.ChangeDutyCycle(50) # L�fter auf halber Geschwindigkeit
else:
fan.ChangeDutyCycle(100) # L�fter auf voller Geschwindigkeit
time.sleep(5) # Warte 5 Sekunden, bevor erneut gepr�ft wird
except KeyboardInterrupt:
pass
finally:
fan.stop()
GPIO.cleanup()
