From 088f2489447b67bdb33cadfca9c0b7f644cc1c78 Mon Sep 17 00:00:00 2001 From: Thord Johansson Date: Sun, 30 Apr 2023 14:00:54 +0200 Subject: [PATCH] Added fan control script used for Geekworm XC-1 derivatives e.g. NASPi/Gemini, should be usable with any PWM/GPIO controlled fan --- fanctl.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 fanctl.py diff --git a/fanctl.py b/fanctl.py new file mode 100755 index 0000000..d9bd33c --- /dev/null +++ b/fanctl.py @@ -0,0 +1,42 @@ +#!/usr/bin/python3 + +import RPi.GPIO as IO +import time +import subprocess + +servo = 18 + +IO.setwarnings(False) +IO.setmode (IO.BCM) +IO.setup(servo,IO.OUT) +fan = IO.PWM(servo,2000) +fan.start(0) + +def get_temp(): + output = subprocess.run(['/opt/vc/bin/vcgencmd', 'measure_temp'], capture_output=True) + temp_str = output.stdout.decode() + try: + return float(temp_str.split('=')[1].split('\'')[0]) + except (IndexError, ValueError): + raise RuntimeError('Could not get temperature') + +def set_speed(fan, speed): + fan.ChangeDutyCycle(speed) + +while 1: + temp = get_temp() # Get the current CPU temperature + if temp > 70: # Check temperature threshhold, in degrees celcius + set_speed(fan, 100) # Set fan duty based on temperature, 100 is max speed and 0 is min speed or off. + elif temp > 60: + set_speed(fan, 85) + elif temp > 50: + set_speed(fan, 60) + elif temp > 40: + set_speed(fan, 50) + elif temp > 32: + set_speed(fan, 45) + elif temp > 25: + set_speed(fan, 40) + else: + set_speed(fan, 0) + time.sleep(5) # Sleep for 5 seconds