作者简介:在千万棵枯树下唤醒,遗忘了自由的内心;曾在墓碑上许下的诺言,用的是与生俱来的母语
0x00 思路
马上要到夏天了,给树莓派升级一下,让它可以安然过夏。
在我16年入手raspberry pi 3B的时候,就考虑做这个一个温度控制的装置,来给树莓派散热。最早是想加入一个温度传感器,来检测cpu温度,然后使用一个继电器来连接信号针脚和正极负极针脚。
后来发现一个问题,淘宝上比较流行的温控传感器读数误差在+-0.5C’,而且继电器体积过大。最后通过大量的翻阅网上帖子,使用系统调用来读取cpu的温度,通过三极管来联通各针脚比较理想,事实证明效果很好。
0x01 物理部分
参考这个帖子,包括三极管的采购(三块钱 包邮一大包)和接线。
www.cnblogs.com/WeiG/p/9856194.html
如上图,买三极管硬件共花了2.46元。树莓派亚克力外壳加树莓派风扇大概20元,所以总成本很低。
根据上图接线即可,只是在实际使用中我感觉5v有电流声,而且工作的时候噪音太大,就把5v换成3.3v接口了。
0x02 代码部分
同样参考了网上的代码,修改了部分参数。
原理就是通过读取系统中温度信息,如果达到程序设置的温度阈值1,就启动风扇散热;在风扇转动的过程中不间断进行温度判断,如果达到温度阈值2,就停止转动。
#!/usr/bin/python2
#coding:utf8
#自动风扇控制程序,使用wiringPi的gpio命令来操作GPIO
import commands,time
#控制风扇的GPIO
FAN_GPIO = 15
commands.getoutput('sudo gpio mode '+str(FAN_GPIO)+' OUTPUT')
while True:
# 获取CPU温度
tmpFile = open( '/sys/class/thermal/thermal_zone0/temp' )
cpu_temp_raw = tmpFile.read()
tmpFile.close()
cpu_temp = round(float(cpu_temp_raw)/1000, 1)
print (cpu_temp)
#如果温度大于45`C,就启动风扇
if cpu_temp >= 45 :
commands.getoutput('sudo gpio write '+str(FAN_GPIO)+' 0')
#如果温度小于39`C,就关闭风扇
if cpu_temp <= 39 :
commands.getoutput('sudo gpio write '+str(FAN_GPIO)+' 1')
time.sleep(10)
0x03 测试工作
为了达到阈值温度,使用跑分软件进行测试:
sysbench --num-threads=4 --test=cpu --cpu-max-prime=20000 run
暂时使程序运行起来,使ssh终端即使退出也能运行,测试一晚上,能够根据温度启动和停止小风扇转动。退出终端风扇也能正常运转。
nohup python2 fan-speed_py2.py &
0x04 最后工作
可以让Python随Linux开机自动运行,比如注册成一个服务,每次开机都自动运行。这里为了省事,添加到/etc/rc.local中了
/home/pi/fan-fpeed_py2.py >> /var/log/fan_log/fan_log
同时加固各个引脚和三极管的物理连接,更坚固美观。
0x05 总结
虽然只是一个很简单的动手操作,但是我觉得还是挺有意义的。通过数码技术来改变自己的生活,哪怕只是小小的改变。It‘s so funny.
参考链接:
http://blog.csdn.net/qq_15947947/article/details/79178032
http://www.cnblogs.com/WeiG/p/9856194.html