74 lines
1.7 KiB
Python
74 lines
1.7 KiB
Python
|
#import RPIO
|
||
|
import RPi.GPIO as GPIO
|
||
|
import time
|
||
|
from datetime import datetime
|
||
|
from datetime import timedelta
|
||
|
switch = 15
|
||
|
pwm = 14
|
||
|
fan_speed =18
|
||
|
#RPIO.setup(switch, RPIO.OUT)
|
||
|
|
||
|
#RPIO.output(switch, True)
|
||
|
|
||
|
# RPIO.PWM.setup()
|
||
|
#fan = RPIO.PWM.Servo(0, 40, 1)
|
||
|
GPIO.setmode(GPIO.BCM)
|
||
|
GPIO.setup(switch, GPIO.OUT)
|
||
|
GPIO.setup(pwm, GPIO.OUT)
|
||
|
fan = GPIO.PWM(pwm, 25000)
|
||
|
|
||
|
GPIO.setup(fan_speed, GPIO.IN, pull_up_down=GPIO.PUD_UP)
|
||
|
global last_ts
|
||
|
global current_ts
|
||
|
global diff
|
||
|
diff = timedelta()
|
||
|
last_ts = datetime.now()
|
||
|
current_ts = 0
|
||
|
global counter
|
||
|
counter = 0
|
||
|
def speed_callback(channel):
|
||
|
global last_ts
|
||
|
global current_ts
|
||
|
global diff
|
||
|
global counter
|
||
|
current_ts = datetime.now()
|
||
|
if current_ts != 0 and last_ts != 0:
|
||
|
diff = current_ts - last_ts
|
||
|
if diff.seconds < 1:
|
||
|
counter+=1
|
||
|
else:
|
||
|
rpm = (counter/2)*60
|
||
|
print("{} ||| {} ".format(counter, rpm), end="\r")
|
||
|
last_ts = current_ts
|
||
|
counter = 0
|
||
|
# print("{} ".format(rpm), end="\r")
|
||
|
# print("{:d} | \t{:.2f} | \t{} | \t{} | \t{}".format(diff.microseconds, rpm, diff, current_ts, last_ts), end="\r")
|
||
|
|
||
|
|
||
|
GPIO.add_event_detect(fan_speed, GPIO.FALLING, callback=speed_callback)
|
||
|
|
||
|
try:
|
||
|
GPIO.output(switch, True)
|
||
|
step = 10
|
||
|
c = 0
|
||
|
direction = 1
|
||
|
diff=timedelta()
|
||
|
fan.start(c)
|
||
|
while True:
|
||
|
if c == 100:
|
||
|
direction = -1
|
||
|
elif c == 0:
|
||
|
direction = 1
|
||
|
c += step*direction
|
||
|
fan.ChangeDutyCycle(c)
|
||
|
# print("{} ".format(c))
|
||
|
time.sleep(5)
|
||
|
except KeyboardInterrupt:
|
||
|
pass
|
||
|
finally:
|
||
|
fan.stop()
|
||
|
GPIO.output(switch, False)
|
||
|
GPIO.cleanup()
|
||
|
|
||
|
|