Für meinen Raspberry PI 4 wollte ich einen Lüfter, da ich manchmal einige hitzige Rechenoperationen durchführe die ganz schön für Temperatur sorgen. Damit der Raspberry PI nicht allzu sehr an Leistung durch Hitze verliert und damit der Lüfter nicht dauerhaft Lärm erzeugt, habe ich eine Lüftersteuerung selbst gebaut.

Meine kleine Temperatursteuerung für den Raspberry PI 4 funktioniert ohne komplizierte Frameworks und andere Programmiersprachen somit kein Installations und Konfigurationsaufwand erforderlich.

Ausstattung / Hardware

Für mein Projekt nutze ich einen Raspberry PI 4 sowie:

Ziel ist es die Temperatur des Raspberry PIs auszulesen und sobald die Temperatur einen konfigurierten Wert übersteigt, dass dann der Lüfter eingeschaltet wird. Ansonsten soll der Lüfter wieder ausgeschaltet werden sobald die Temperatur den Grenzwert unterschreitet.

Das Relais mit dem Raspberry PI verkabeln

Wie in der Dokumentation erkennbar sind folgende GPIO Pins zur Verfügung. Ich nutze die folgenden Pins, wie unten in Schaubild ersichtlich.

Raspberry PI
#2: Anschluss V+ am Relais Normally Openend (NO)
#4: Anschluss V+ am Relais Power-Supply VCC
#6: Anschluss Lüfter Ground (das schwarze Kabel vom Lüfter)
#14: Anschluss Relais Ground GND
#40: Anschluss Relais Signal Line S

Relais
Signal line - S: Das GPIO Kabel vom Raspberry PI #40
Power Supply - VCC: Das Kabel vom Raspberry PI #4
Ground - GND: Das Kabel vom vom Raspberry PI #6
Normally Opened (NO): Kabel von Raspberry PI #2
Middle Pin: Anschluss Lüfter Power (das rote Kabel vom Lüfter)

Software zur Steuerung entwickeln

Um die Temperatur auszulesen, können wir den folgenden systemeigenen Befehl nutzen.

$ vcgencmd measure_temp
temp=29.7'C

Um die GPIO Pins vom Rasperry zu steuern können wir folgende systemeigene Funktion verwenden.

Zuerst müssen wir die gewünschten Pins aktivieren.

# den pin 40 (gpio 21) aktivieren!
echo "21" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio21/direction

Danach können wir den Pin an und ausschalten.

# AN
echo "1" > /sys/class/gpio/gpio21/value
# AUS
echo "0" > /sys/class/gpio/gpio21/value

Damit bei der gewünschten Temperatur der Pin (und den Lüfter) eingeschaltet wird und falls es den Grenzwert unterschreitet wieder ausgeschaltet wird, sieht das vollständige Script wie folgt aus.

#!/bin/bash

# ---------------------------------------------------------------
# Konfiguration

# Maximale Temperatur bevor das Script den Lüfter einschaltet
MAXHEAT=40

# GPIO Pin wo der Schalter liegt
GPIO=21

# ---------------------------------------------------------------


## Testen ob die GPIO schon initialisiert ist.
if [ -f "/sys/class/gpio/gpio$GPIO/value" ]; then
    echo "GPIO already initialized"
else 
    echo "Setting up PIN $GPIO"
    echo "$GPIO" > /sys/class/gpio/export
    echo "out" > "/sys/class/gpio/gpio$GPIO/direction"
    echo "0" > "/sys/class/gpio/gpio$GPIO/value"
fi


## CPU Temperatur vom Rasperry PI auslesen
temp=$(vcgencmd measure_temp | grep -Po '[\d.]+');

## Temperatur von Float nach Int runden, da bash nur mit Int umgehen kann
inttemp=$(printf '%.*f\n' 0 $temp)

## Wenn Temperatur höher ist als MAXHEAT, dann an sonst aus.
if [[ "$inttemp" -gt "$MAXHEAT" ]]; then
	echo "may i cool down. ($temp C°)"
	echo "1" > "/sys/class/gpio/gpio$GPIO/value"
else
	echo "guess everything is fine. ($temp C°)"
	echo "0" > "/sys/class/gpio/gpio$GPIO/value"
fi
Vollständiges Script zur Lüftersteuerung des Raspberry PI

Das Script am besten als Crojob im System einrichten und z.B. jede Minute ausführen. Ich habe mein Script /home/servicedog/heatcontrol.sh erstellt und mit chmod u+x ausführbar gemacht.

# m h  dom mon dow   command
*/2 * * * * /home/servicedog/heatcontrol.sh

Für Ruhe und bei Bedarf ein kühlender Raspberry PI. So bleibt nur noch zusagen: Bleibt so cool wie euer Raspberry PI.

Cheers Jörg