blob: d99824a455b44d4616e70a70cc33497cd8f1daad (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#!/usr/bin/env python3
##
# rpi-temp-control
#
#
#
# Matt Kohls
import subprocess
from gpiozero import Motor
from pid import PID
from time import sleep
# Defaults
TEMP_TARGET = float(47.0)
FAN_PIN = 17 # Pin the fan control is tied to
DUMMY_PIN = 18 # Any unused pin. Used to setup Motor from gpiozero
MIN_FAN_SPEED = 80 / 100
## Grabs Temperature of GPU/CPU
#
# @return temperature of GPU/CPU
def grab_temp():
try:
file = open("/sys/class/thermal/thermal_zone0/temp", "r")
val = int(file.readline()) / 1000
file.close()
return val
except:
print("Error reading from thermal zone")
return 0
# Initial loop setup
ploop = PID(1, 1, .02, Integrator_max=100, Integrator_min=0, Set_Point=TEMP_TARGET)
cycle = 1
fan = Motor(FAN_PIN, DUMMY_PIN)
fan.forward(cycle)
last_duty_cycle = 0
last_temp = 0
while True:
sleep(1)
temp = grab_temp()
print(temp)
cycle_change = (ploop.update(temp)) * -1
cycle = (100 + int(cycle_change)) / 100 # Since fan.forward() wants a number between 0 and 1
if cycle <= .2:
cycle = 0
elif cycle > 1:
cycle = 1
elif cycle < MIN_FAN_SPEED:
cycle = MIN_FAN_SPEED
if cycle == 0:
fan.stop()
elif last_duty_cycle != cycle:
fan.forward(cycle)
last_duty_cycle = cycle
|