购买树莓派也有一段时日了,当然了,几乎也是处于吃灰状态。
给树莓派安装过风扇的人都知道,如果给风扇接入5V的GPIO下,风扇的声音大到像是在拆家。
所以我机智的接入了3.5V稍微柔和了那么一点,去年跑了一整个夏天。
当时有一个想法是:我们可以通过 cat /sys/class/thermal/thermal_zone0/temp
获得CPU的实时温度,那么判断这个值的大小,大于设定值让风扇工作,等待CPU的温度降下来到一个设定的温度就让风扇停止工作。
但是想法总是一闪而过也没有具体去做操作。
后来也看到了树莓派实现温度监控并控制风扇散热,但当时也懒没时间去做。
随着时间又来到了四月,树莓派的CPU温度逐渐又攀高了。
又看了一篇文树莓派配置自动风扇才想起来这个坑还没有填,所以今年让风扇也休息一下吧。
准备材料
以下列出材料类目,打出的价格都是含邮费的(包邮呀)
- 400孔面包板 x 1
- 杜邦线 x 40
- 面包板插线 x 65
- S9014三极管 x 20
实际上用不完这些材料的,但,人家卖家就这样卖,而且还巨便宜,还能怎么办?

连线参考图片
这里先搬几张图片吧。
- 树莓派40pin引脚对照图

- 参考的连线图1

- 参考的连线图2

- S9014三极管结构

三极管的E接正极,B接GPIO口,C接风扇的负极。B口建议再加上一个1K的电阻,防止三极管过热。(我使用的S9014没有使用1K电阻,看下来问题不大,反正挂了我还有19个 XD)
实际连线


踩到的一些坑
- 面包板连接线有几根有问题,导致电路不通,坑死QAQ,一根一根测试连接线。
- 参考别人的python脚本运行有问题,还得感谢echo少年的倾情解答。
代码
代码从TesterHome抄的,我加了一些注释~
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
|
#!/usr/bin/python2
#coding:utf8
import sys
import time
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")
def cpu_temp():
with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f:
return float(f.read())/1000
def main():
channel = 40
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
#GPIO物理引脚BOARD编码
# close air fan first
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)
#初始化风扇状态,实际测试下来,改成以下代码会更好哇?
#GPIO.setup(channel, GPIO.OUT, initial=GPIO.LOW)
is_close = True
while True:
temp = cpu_temp()
if is_close:
if temp > 50.0:
#CPU温度超过50度打开风扇
print time.ctime(), temp, 'open air fan'
GPIO.output(channel, GPIO.HIGH)
is_close = False
else:
if temp < 40.0:
#CPU温度小于40度关闭风扇
print time.ctime(), temp, 'close air fan'
GPIO.output(channel, GPIO.LOW)
is_close = True
time.sleep(30.0)
print time.ctime(), temp
if __name__ == '__main__':
main()
|
将上面的代码复制粘贴保存为fan.py
然后运行脚本就O了python fan.py
当然了,最好的方法当然是用守护程序以及设置为开机自启动脚本了。
推荐使用PM2~
1
2
3
|
pm2 start fan.py -n auto-Fan
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi
pm2 save
|