Raspberry PI – GPIO Ein PWM Lüfter Manuel

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()

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen