Projekt : Raspberry Pi 4B - die Suche nach geeigneter Kühlung (Teil 1)
Projekt : Raspberry Pi 4B - die Suche nach geeigneter Kühlung (Teil 1)
Der Raspberry 4B ist ein "heisses Teil". Im Zusammenhang mit dem Ubuntu-Mate Projekt habe auch ich
festgestellt, dass eine aktive Kühlung unumgänglich ist. Die angebotenen Kühlkörper oder sogar ein Alugehäuse
(siehe oben Bild 2 und 3) reichen nicht aus.
Um das selbst zu überprüfen lesen wir zunächst einmal die CPU-Temperatur aus. Normalerweise geht das in Raspbian mit dem Tool 'vcgencmd'.
Im Terminal gibt man z.B. folgende Zeile ein:
1
|
while endless=0; do echo `date +%T` Uhr: `vcgencmd measure_temp`; sleep 15; done
|
1
|
nano ~/temp_01.py
|
#!/usr/bin/env python
# Temperaturwert ist als Zeichenkette in der Datei tempData
# gespeichert und wird mit einer Nachkommastelle als
# Zeichenkette angezeigt
import time
import os
tempData = "/sys/class/thermal/thermal_zone0/temp"
while True:
os.system('clear')
print("")
print("Aktuelle CPU-Temperatur im 15s Intervall:")
print("")
print("********************************")
print("")
print(time.strftime("%d.%m.%Y %H:%M:%S"+ " Uhr: "))
f = open(tempData, "r")
a = f.readline(2)
b = f.readline(1)
f.close
temp = a + "." + b + " Grad Celsius"
print temp
print("")
print("********************************")
time.sleep (15)
|
1
|
python temp_01.py
|
1
|
wget https://dgebhardt.de/raspi-projects/scripte/temp_01.py
|
Kommen wir nun zur Lüftersteuerung.
Abschliessendes Ziel ist es, dass der Lüfter bei einer festgelegten CPU-Temperatur startet, dann die CPU herunter kühlt und danach
automatisch abschaltet.
Vorbemerkung
Meine Tests haben gezeigt, dass der Kühleffekt bei allen Varianten am effektivsten ist, wenn die Luft in Richtung der Platine geblasen wird.
Ein Absaugen der erwärmten Luft bei offenem Gehäuse findet kaum statt. Da die Lüftermotoren sich aufgrund ihrer Konstruktion nur bei 'richtiger'
Polarität drehen, kann man die Drehrichtung nicht ändern. Deshalb prüft man einfach, wie herum das Lüftergehäuse aufzusetzen
ist.
Variante 1
Im einfachsten Fall ( ist noch keine Steuerung) verwendet man für ca. 3 Euro einen 5V-Lüfter und verbindet ihn mit Pin 4 (+5V) und Pin 6 (Masse)
der 40-poligen GPIO-Leiste des Raspberry (siehe Bilder 1 und 2 unten).
Der Lüfter läuft ständig, solange der Raspberry mit Spannung versorgt wird. (Ich würde den Lüfteranschluss nicht im laufenden Betrieb anstecken
oder entfernen, um dem Raspberry keine Lastspitzen zuzumuten). Parallel zum Lüfter lassen Sie das Pythonscript von oben laufen
und können so den Temperaturverlauf am Monitor verfolgen.
Variante 2
Lüftersteuerung Raspberry Pi Kit von CodingWorld. Grundsätzlich ist zu sagen, dass das Kit
für knapp 20 Euro recht teuer ist. Auch ist es in erster Linie gedacht, entsprechende Experimente durchzuführen. So wird im Anleitungheft
z.B. der Anschluss von LEDs an die GPIO sehr gut erläutert und ist deshalb für Neueinsteiger gut geeignet. Was hingegen gänzlich fehlt, ist
eine Anleitung zum Aufbau der kompletten Schaltung. Es gibt zwar zwei Fotos, die das fertige Bauteil zeigen, aber keine Bauanleitung.
Von Nachteil ist auch, dass die Grundplatte aus dem 3-D Drucker kommt und keine Leiterplatte ist, auf der die Bauelemente verlötet werden können.
So ist eine 'Freiverdrahtung' erforderlich, die etwas billig wirkt. Immerhin, es funktioniert alles. Ich habe den 12 Volt Lüfter (sollte laut Teileliste eigentlich
5 Volt sein) an die 5 Volt des Raspberry angeschlossen, wodurch sich die Drehzahl stark verringert. Dadurch läuft der Lüfter aber sehr leise.
Die Kühlung funktioniert trotzdem noch ausreichend. Es wird nun das Pythonscript ergänzt, damit der Lüftermotor und die LEDs
gesteuert werden.
1
2
cp ~/temp_01.py ~/fancontrol.py
nano ~/fancontrol.py
Die rot dargestellten Zeilen sind hinzu gekommen. Einige Zeilen, die nicht mehr gebraucht werden sind auskommentiert.
#!/usr/bin/env python
# Temperaturwert ist als Zeichenkette in der Datei tempData gespeichert,
# er wird in eine ganze Zahl nach math. Rundungsregel umgewandelt
# und ganzzahlig ausgegeben
import RPi.GPIO as GPIO
import time
import os
tempData = "/sys/class/thermal/thermal_zone0/temp"
# GPIO's festlegen; GPIO 23: Motor, GPIO: 2,3,4 fuer LEDs
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(2, GPIO.OUT)
GPIO.setup(3, GPIO.OUT)
GPIO.setup(4, GPIO.OUT)
GPIO.output(23, GPIO.LOW)
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.LOW)
GPIO.output(4, GPIO.LOW)
while True:
os.system('clear')
print("")
print("Aktuelle CPU-Temperatur im 15s Intervall:")
print("")
print("********************************")
print("")
print(time.strftime("%d.%m.%Y %H:%M:%S"+ " Uhr: "))
f = open(tempData, "r")
# a = f.readline(2)
# b = f.readline(1)
temp = f.readline(3)
f.close
# temp = a + "." + b + " Grad Celsius"
# print temp
temp = int(temp)
temp = (temp + 5) / 10
print temp , " Grad Celsius"
print("")
print("********************************")
# *******
# Luefter steuern an GPIO 23
# *******
if temp <= 40:
GPIO.output(23, GPIO.LOW)
GPIO.output(2, GPIO.HIGH)
GPIO.output(3, GPIO.LOW)
GPIO.output(4, GPIO.LOW)
if temp >= 60:
GPIO.output(23, GPIO.HIGH)
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.LOW)
GPIO.output(4, GPIO.HIGH)
if temp > 40 and temp < 60 :
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.HIGH)
GPIO.output(4, GPIO.LOW)
time.sleep (15)
Die Änderungen wieder mit STRG + O speichern und mit STRG + X schliessen.
Beachten Sie die Einrückungen, die bei der Python Syntax erforderlich sind.
Sie können das komplette Script wieder mit wget
auf ihren Raspberry herunterladen. Geben Sie dazu folgende Zeile in der Konsole ein:
1
wget https://dgebhardt.de/raspi-projects/scripte/fancontrol.py
Beschreibung der Funktionsweise:
- Temp < 40 Grad: Lüfter aus, grüne LED leuchtet.
- Zwischen 40 und 60 Grad: Lüfter zunächst noch aus, gelbe LED leuchtet.
- Temp > 60 Grad: Lüfter an, rote LED leuchtet.
- Temp < 60 und > 40 Grad: Lüfter an, gelbe LED leuchtet
- Temp < 40 Grad: Lüfter aus, grüne LED leuchtet.
Der Vorgang wiederholt sich.
Die Temperaturwerte zum Ein- und Ausschalten können beliebig im Script angepasst werden. Im Test haben
sich die angegeben Werte sehr gut bewährt. Bei Videowiedergabe mit dem VLC-Player z.B. stiegt die CPU-Temperatur
ohne Lüfter innerhalb von 20s auf 75 bis 81 Grad Celsius. Der Lüfter schaffte es mühelos, die Temperatur auf ca. 57
Grad zu halten. Nach Videoende sank dann die Temperatur sehr schnell wieder auf ca. 40 Grad ab.
In einem 2. Teil werden weitere Varianten vorgestellt. Unter anderem legen wir einen Systemd-Service zur
automatischen Ausführung beim Start an und testen das 'Melopero Fan HAT for Raspberry Pi 4' für ca. 15 Euro.
Hier geht es weiter zum Teil 2
Viel Spass und Erfolg beim Ausprobieren.
Variante 1
Im einfachsten Fall ( ist noch keine Steuerung) verwendet man für ca. 3 Euro einen 5V-Lüfter und verbindet ihn mit Pin 4 (+5V) und Pin 6 (Masse)
der 40-poligen GPIO-Leiste des Raspberry (siehe Bilder 1 und 2 unten).
Der Lüfter läuft ständig, solange der Raspberry mit Spannung versorgt wird. (Ich würde den Lüfteranschluss nicht im laufenden Betrieb anstecken
oder entfernen, um dem Raspberry keine Lastspitzen zuzumuten). Parallel zum Lüfter lassen Sie das Pythonscript von oben laufen
und können so den Temperaturverlauf am Monitor verfolgen.
Variante 2
Lüftersteuerung Raspberry Pi Kit von CodingWorld. Grundsätzlich ist zu sagen, dass das Kit
für knapp 20 Euro recht teuer ist. Auch ist es in erster Linie gedacht, entsprechende Experimente durchzuführen. So wird im Anleitungheft
z.B. der Anschluss von LEDs an die GPIO sehr gut erläutert und ist deshalb für Neueinsteiger gut geeignet. Was hingegen gänzlich fehlt, ist
eine Anleitung zum Aufbau der kompletten Schaltung. Es gibt zwar zwei Fotos, die das fertige Bauteil zeigen, aber keine Bauanleitung.
Von Nachteil ist auch, dass die Grundplatte aus dem 3-D Drucker kommt und keine Leiterplatte ist, auf der die Bauelemente verlötet werden können.
So ist eine 'Freiverdrahtung' erforderlich, die etwas billig wirkt. Immerhin, es funktioniert alles. Ich habe den 12 Volt Lüfter (sollte laut Teileliste eigentlich
5 Volt sein) an die 5 Volt des Raspberry angeschlossen, wodurch sich die Drehzahl stark verringert. Dadurch läuft der Lüfter aber sehr leise.
Die Kühlung funktioniert trotzdem noch ausreichend. Es wird nun das Pythonscript ergänzt, damit der Lüftermotor und die LEDs
gesteuert werden.
1
2
cp ~/temp_01.py ~/fancontrol.py
nano ~/fancontrol.py
Die rot dargestellten Zeilen sind hinzu gekommen. Einige Zeilen, die nicht mehr gebraucht werden sind auskommentiert.
#!/usr/bin/env python
# Temperaturwert ist als Zeichenkette in der Datei tempData gespeichert,
# er wird in eine ganze Zahl nach math. Rundungsregel umgewandelt
# und ganzzahlig ausgegeben
import RPi.GPIO as GPIO
import time
import os
tempData = "/sys/class/thermal/thermal_zone0/temp"
# GPIO's festlegen; GPIO 23: Motor, GPIO: 2,3,4 fuer LEDs
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(2, GPIO.OUT)
GPIO.setup(3, GPIO.OUT)
GPIO.setup(4, GPIO.OUT)
GPIO.output(23, GPIO.LOW)
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.LOW)
GPIO.output(4, GPIO.LOW)
while True:
os.system('clear')
print("")
print("Aktuelle CPU-Temperatur im 15s Intervall:")
print("")
print("********************************")
print("")
print(time.strftime("%d.%m.%Y %H:%M:%S"+ " Uhr: "))
f = open(tempData, "r")
# a = f.readline(2)
# b = f.readline(1)
temp = f.readline(3)
f.close
# temp = a + "." + b + " Grad Celsius"
# print temp
temp = int(temp)
temp = (temp + 5) / 10
print temp , " Grad Celsius"
print("")
print("********************************")
# *******
# Luefter steuern an GPIO 23
# *******
if temp <= 40:
GPIO.output(23, GPIO.LOW)
GPIO.output(2, GPIO.HIGH)
GPIO.output(3, GPIO.LOW)
GPIO.output(4, GPIO.LOW)
if temp >= 60:
GPIO.output(23, GPIO.HIGH)
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.LOW)
GPIO.output(4, GPIO.HIGH)
if temp > 40 and temp < 60 :
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.HIGH)
GPIO.output(4, GPIO.LOW)
time.sleep (15)
Die Änderungen wieder mit STRG + O speichern und mit STRG + X schliessen.
Beachten Sie die Einrückungen, die bei der Python Syntax erforderlich sind.
Sie können das komplette Script wieder mit wget
auf ihren Raspberry herunterladen. Geben Sie dazu folgende Zeile in der Konsole ein:
1
wget https://dgebhardt.de/raspi-projects/scripte/fancontrol.py
Beschreibung der Funktionsweise:
- Temp < 40 Grad: Lüfter aus, grüne LED leuchtet.
- Zwischen 40 und 60 Grad: Lüfter zunächst noch aus, gelbe LED leuchtet.
- Temp > 60 Grad: Lüfter an, rote LED leuchtet.
- Temp < 60 und > 40 Grad: Lüfter an, gelbe LED leuchtet
- Temp < 40 Grad: Lüfter aus, grüne LED leuchtet.
Der Vorgang wiederholt sich.
Die Temperaturwerte zum Ein- und Ausschalten können beliebig im Script angepasst werden. Im Test haben
sich die angegeben Werte sehr gut bewährt. Bei Videowiedergabe mit dem VLC-Player z.B. stiegt die CPU-Temperatur
ohne Lüfter innerhalb von 20s auf 75 bis 81 Grad Celsius. Der Lüfter schaffte es mühelos, die Temperatur auf ca. 57
Grad zu halten. Nach Videoende sank dann die Temperatur sehr schnell wieder auf ca. 40 Grad ab.
In einem 2. Teil werden weitere Varianten vorgestellt. Unter anderem legen wir einen Systemd-Service zur
automatischen Ausführung beim Start an und testen das 'Melopero Fan HAT for Raspberry Pi 4' für ca. 15 Euro.
Hier geht es weiter zum Teil 2
Viel Spass und Erfolg beim Ausprobieren.
für knapp 20 Euro recht teuer ist. Auch ist es in erster Linie gedacht, entsprechende Experimente durchzuführen. So wird im Anleitungheft z.B. der Anschluss von LEDs an die GPIO sehr gut erläutert und ist deshalb für Neueinsteiger gut geeignet. Was hingegen gänzlich fehlt, ist eine Anleitung zum Aufbau der kompletten Schaltung. Es gibt zwar zwei Fotos, die das fertige Bauteil zeigen, aber keine Bauanleitung. Von Nachteil ist auch, dass die Grundplatte aus dem 3-D Drucker kommt und keine Leiterplatte ist, auf der die Bauelemente verlötet werden können. So ist eine 'Freiverdrahtung' erforderlich, die etwas billig wirkt. Immerhin, es funktioniert alles. Ich habe den 12 Volt Lüfter (sollte laut Teileliste eigentlich 5 Volt sein) an die 5 Volt des Raspberry angeschlossen, wodurch sich die Drehzahl stark verringert. Dadurch läuft der Lüfter aber sehr leise. Die Kühlung funktioniert trotzdem noch ausreichend. Es wird nun das Pythonscript ergänzt, damit der Lüftermotor und die LEDs gesteuert werden.
1
2
|
cp ~/temp_01.py ~/fancontrol.py
nano ~/fancontrol.py
|
#!/usr/bin/env python
# Temperaturwert ist als Zeichenkette in der Datei tempData gespeichert,
# er wird in eine ganze Zahl nach math. Rundungsregel umgewandelt
# und ganzzahlig ausgegeben
import RPi.GPIO as GPIO
import time
import os
tempData = "/sys/class/thermal/thermal_zone0/temp"
# GPIO's festlegen; GPIO 23: Motor, GPIO: 2,3,4 fuer LEDs
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(2, GPIO.OUT)
GPIO.setup(3, GPIO.OUT)
GPIO.setup(4, GPIO.OUT)
GPIO.output(23, GPIO.LOW)
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.LOW)
GPIO.output(4, GPIO.LOW)
while True:
os.system('clear')
print("")
print("Aktuelle CPU-Temperatur im 15s Intervall:")
print("")
print("********************************")
print("")
print(time.strftime("%d.%m.%Y %H:%M:%S"+ " Uhr: "))
f = open(tempData, "r")
# a = f.readline(2)
# b = f.readline(1)
temp = f.readline(3)
f.close
# temp = a + "." + b + " Grad Celsius"
# print temp
temp = int(temp)
temp = (temp + 5) / 10
print temp , " Grad Celsius"
print("")
print("********************************")
# *******
# Luefter steuern an GPIO 23
# *******
if temp <= 40:
GPIO.output(23, GPIO.LOW)
GPIO.output(2, GPIO.HIGH)
GPIO.output(3, GPIO.LOW)
GPIO.output(4, GPIO.LOW)
if temp >= 60:
GPIO.output(23, GPIO.HIGH)
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.LOW)
GPIO.output(4, GPIO.HIGH)
if temp > 40 and temp < 60 :
GPIO.output(2, GPIO.LOW)
GPIO.output(3, GPIO.HIGH)
GPIO.output(4, GPIO.LOW)
time.sleep (15)
|
1
|
wget https://dgebhardt.de/raspi-projects/scripte/fancontrol.py
|
- Temp < 40 Grad: Lüfter aus, grüne LED leuchtet.
- Zwischen 40 und 60 Grad: Lüfter zunächst noch aus, gelbe LED leuchtet.
- Temp > 60 Grad: Lüfter an, rote LED leuchtet.
- Temp < 60 und > 40 Grad: Lüfter an, gelbe LED leuchtet
- Temp < 40 Grad: Lüfter aus, grüne LED leuchtet.
Der Vorgang wiederholt sich.
Die Temperaturwerte zum Ein- und Ausschalten können beliebig im Script angepasst werden. Im Test haben sich die angegeben Werte sehr gut bewährt. Bei Videowiedergabe mit dem VLC-Player z.B. stiegt die CPU-Temperatur ohne Lüfter innerhalb von 20s auf 75 bis 81 Grad Celsius. Der Lüfter schaffte es mühelos, die Temperatur auf ca. 57 Grad zu halten. Nach Videoende sank dann die Temperatur sehr schnell wieder auf ca. 40 Grad ab.
In einem 2. Teil werden weitere Varianten vorgestellt. Unter anderem legen wir einen Systemd-Service zur automatischen Ausführung beim Start an und testen das 'Melopero Fan HAT for Raspberry Pi 4' für ca. 15 Euro.
Viel Spass und Erfolg beim Ausprobieren.