Added fan control script used for Geekworm XC-1 derivatives e.g. NASPi/Gemini, should be usable with any PWM/GPIO controlled fan
This commit is contained in:
parent
007a298f18
commit
088f248944
1 changed files with 42 additions and 0 deletions
42
fanctl.py
Executable file
42
fanctl.py
Executable file
|
@ -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
|
Loading…
Reference in a new issue