Projekt : Raspberry Pi 4B - die Suche nach geeigneter Kühlung (Teil 3)
Projekt : Raspberry Pi 4B - die Suche nach geeigneter Kühlung (Teil 3)
Variante 3
Wie angekündigt geht es jetzt um das 'Fan HAT for Raspberry Pi 4' von Melopero. Auf den Bildern oben ist bereits zu erkennen, dass
die fertige Platine einfach auf die 40-polige GPIO-Leiste aufgesteck werden muss. Vorher muss man lediglich den zugehörigen Lüfter
mit den 4 Kunststoffschrauben auf der Platine befestigen, den Steckverbinder des Lüfters mit dem Anschluss verbinden und die 4 Abstandshülsen auf der
Raspberry Platine anbringen.
Zur Einrichtung der Software gibt Melopero auf seiner Internetseite (www.melopero.com/fan-hat) auf italienisch eine Variante für Raspbian
an. Danach gibt man folgenden Befehl im Terminal ein:
1
2
sudo pip3 install --no-cache melopero-fan-hat
sudo reboot
Nach dem Neustart ist die Steuerung eingerichtet und beginnt automatisch zu arbeiten. Das ist einfach genial!!! Das Ubuntu-Mate
(unoffucial) unterstützt neuerdings auch 'vcgencmd' zum Temperaturauslesen, so dass hier das gleiche Script zum Einsatz kommen kann.
Allerdings habe ich im Script ein paar kleine Änderungen vorgenommen und den gleichen Systemd.Service eingerichtet wie in Variante 2.
Hier das komplette Python-Script:
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import os
minimum_always_ON=True
minimum_speed=30
target_temp=40
DEBUG=False
current_speed=0
def getCPUtemperature():
global current_speed
res = os.popen('vcgencmd measure_temp').readline()
temp =(res.replace("temp=","").replace("'C\n",""))
if(DEBUG):print("temp is {0}, current speed: {1}".format(temp,current_speed))
return temp
try:
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
myPWM=GPIO.PWM(18,50)
myPWM.start(minimum_speed)
current_speed=minimum_speed
while True:
temp = float(getCPUtemperature())
if(temp<target_temp and not minimum_always_ON):
myPWM.ChangeDutyCycle(0)
current_speed=0
time.sleep(1)
continue
if(temp<target_temp and minimum_always_ON):
myPWM.ChangeDutyCycle(minimum_speed)
current_speed=minimum_speed
time.sleep(1)
continue
if(temp<target_temp and temp<50):
myPWM.ChangeDutyCycle(40)
current_speed=40
time.sleep(1)
continue
if(temp>=50 and temp<60):
myPWM.ChangeDutyCycle(50)
current_speed=50
time.sleep(1)
continue
if(temp>=60 and temp<65):
myPWM.ChangeDutyCycle(60)
current_speed=60
time.sleep(1)
continue
if(temp>=65 and temp<70):
myPWM.ChangeDutyCycle(70)
current_speed=70
time.sleep(1)
continue
if(temp>=70 and temp<74):
myPWM.ChangeDutyCycle(80)
current_speed=80
time.sleep(1)
continue
if(temp>=74 and temp<76):
myPWM.ChangeDutyCycle(90)
current_speed=90
time.sleep(1)
continue
if(temp>=76:
myPWM.ChangeDutyCycle(100)
current_speed=100
time.sleep(1)
continue
except KeyboardInterrupt: # trap a CTRL+C keyboard interrupt
fanOFF()
GPIO.cleanup() # resets all GPIO ports used by this program
Anschliessend mit STRG + O speichern und mit STRG + X schliessen.
Ich gebe hier noch ein paar Erläuterungen zur Funktion an:
- Der Lüfter auf der Melopero-Platine ist über den GPIO 18 mit dem Raspberry verbunden. Dieser kann für Pulsweitenmodulation (PWM) genutzt
werden. Durch die Änderung des Wertes in Klammern bei 'myPWM.ChangeDutyCycle(xxx)', wird die Frequenz der erzeugten Rechteckspannung geändert.
Dadurch wird die Drehzahl des Lüftermotors mit steigender Temperatur erhöht.
- Am Ende des Scriptes wird auf einen Keyboard-Interrupt oder das 'Herunterfahren' mit dem Abschalten der GPIO-Ports reagiert.
- Experimentieren Sie mit den Werten, indem Sie minimum_speed, target_temp und die einzelnen Schritte in den Schleifen ändern.
Mein abschließendes Urteil lautet:
Mich hat die Melopero-Platine voll überzeugt und ich habe sie auf zwei Raspberry 4b 4GB im Einsatz.
Einen davon nutze ich als Ubuntu
Rechner mit dem Mate-Desktop (siehe Projekt) mit einer 128 GB SSD-Platte. Da kann der Raspberry seine 'Leistung' tatsächlich zeigen und ist
gemeinsam mit Melopero ein echt 'cooler' Typ.
Viel Spass und Erfolg beim Ausprobieren.
zurück zum Teil 2
weiter mit Teil 4
1
2
|
sudo pip3 install --no-cache melopero-fan-hat
sudo reboot
|
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import os
minimum_always_ON=True
minimum_speed=30
target_temp=40
DEBUG=False
current_speed=0
def getCPUtemperature():
global current_speed
res = os.popen('vcgencmd measure_temp').readline()
temp =(res.replace("temp=","").replace("'C\n",""))
if(DEBUG):print("temp is {0}, current speed: {1}".format(temp,current_speed))
return temp
try:
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
myPWM=GPIO.PWM(18,50)
myPWM.start(minimum_speed)
current_speed=minimum_speed
while True:
temp = float(getCPUtemperature())
if(temp<target_temp and not minimum_always_ON):
myPWM.ChangeDutyCycle(0)
current_speed=0
time.sleep(1)
continue
if(temp<target_temp and minimum_always_ON):
myPWM.ChangeDutyCycle(minimum_speed)
current_speed=minimum_speed
time.sleep(1)
continue
if(temp<target_temp and temp<50):
myPWM.ChangeDutyCycle(40)
current_speed=40
time.sleep(1)
continue
if(temp>=50 and temp<60):
myPWM.ChangeDutyCycle(50)
current_speed=50
time.sleep(1)
continue
if(temp>=60 and temp<65):
myPWM.ChangeDutyCycle(60)
current_speed=60
time.sleep(1)
continue
if(temp>=65 and temp<70):
myPWM.ChangeDutyCycle(70)
current_speed=70
time.sleep(1)
continue
if(temp>=70 and temp<74):
myPWM.ChangeDutyCycle(80)
current_speed=80
time.sleep(1)
continue
if(temp>=74 and temp<76):
myPWM.ChangeDutyCycle(90)
current_speed=90
time.sleep(1)
continue
if(temp>=76:
myPWM.ChangeDutyCycle(100)
current_speed=100
time.sleep(1)
continue
except KeyboardInterrupt: # trap a CTRL+C keyboard interrupt
fanOFF()
GPIO.cleanup() # resets all GPIO ports used by this program
|
Viel Spass und Erfolg beim Ausprobieren.
zurück zum Teil 2 weiter mit Teil 4