Created
January 2, 2017 21:24
-
-
Save anonymous/ff99881224e6bb0bd52d9ff60f639788 to your computer and use it in GitHub Desktop.
Python Code for Controlling Fan
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# -*- coding: UTF-8 -*- | |
import os | |
from time import sleep | |
import signal | |
import sys | |
import RPi.GPIO as GPIO | |
pin = 40 #GPIO Pin that controls fan | |
maxTemp = 58 #Temp in celcius fan starts spinning faster | |
minTemp = 56 #Min temp before fan starts slowing down | |
dc = 20 #Starting Duty Cycle | |
time = .25 #Polling time | |
step = .25 #Amount to change duty cycle by | |
spin = 39 #GPIO Pin checking for voltage | |
def setup(): #Initial Setup | |
GPIO.setwarnings(False) | |
GPIO.cleanup() | |
GPIO.setmode(GPIO.BOARD) | |
GPIO.setup(pin, GPIO.OUT) | |
GPIO.setup(spin, GPIO.IN) | |
global p | |
global time | |
p=GPIO.PWM(pin, 60) | |
p.start(dc) | |
return() | |
def getTemp(): #Get output of "vcgencmd measure_temp" into a normal number | |
res = os.popen("vcgencmd measure_temp").readline() | |
temp =(res.replace("temp=","").replace("'C\n","")) | |
return temp | |
def setFan(): #Sets Duty Cycle of PWM to control fan speed based on temperature | |
global dc | |
global CPUTemp | |
CPUTemp = float(getTemp()) | |
if CPUTemp>maxTemp: | |
dc = dc + step | |
if CPUTemp<minTemp: | |
dc = dc - step | |
return() | |
def writeInfo(): #Function to write current temp and speed to file for reference | |
global CPUTemp | |
global dc | |
info = open("faninfo", "w") | |
info.write("Temperature is {0}".format(CPUTemp) + "'C. Fan Speed is {0}".format(dc) +"%") | |
info.close() | |
return() | |
def checkPower() #Function to check for DC source power, and power off when it is cut | |
if GPIO.input(spin) = 0 | |
os.system("sudo poweroff") | |
return() | |
try: | |
setup() | |
while True: | |
global p | |
setFan() | |
if dc>=100: | |
dc = 100 | |
if dc <= 0: | |
dc = 0 | |
p.ChangeDutyCycle(dc) | |
writeInfo() | |
#checkPower() | |
sleep(time) | |
except KeyboardInterrupt: | |
GPIO.cleanup() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I've updated this script per the below. Added a few bells and whistles.