树莓派 根据 CPU 温度控制风扇起停

树莓派是什么?

是一个mini版的PC,麻雀虽小,五脏俱全,信用卡大小一般的版子,网口,USB口,基本功能一个都不少。而价格只要200块钱左右。

为什么要散热

树莓派可以24小时开着,耗电非常少。然而还是会发热的,70度以上就会触发它过热关机了,尤其是夏天快到了,很容易就把树莓派给烧了。
记得有一个夏天,我把树莓派放在屋里,上面运行了一个git服务器,等我晚上回来的时候,一股烧焦的味道就飘了过来。从那以后树莓派的散热我一定会优先考虑。

方法1: 散热片

散热片,淘宝上的价格通常在5元以下,散热片基本可以解决绝大部分的散热问题。通常购买树莓派的时候,店主也会赠送。

方法2: 散热风扇(三极管方案)

考虑到更恶劣的情况下,还需要再加一个风扇。风扇通常有两种,直径2cm和直径4cm的。实际使用时发现2cm的风量实在是太小,最后直接换了4cm的大口径风扇。
风扇开着有点吵,而且开的时间太久了的话,风扇还容易坏掉。所以研究了一下,弄出来一个根据CPU温度自动控制风扇起停的方案。

树莓派的GPIO口输出电流很低,无法带动风扇,所以还需要一个三极管来放大电流。
我用的型号是S9012PNP,价格差不多是3分钱一个。

原理图大概这个样子

三极管的E接正极(右上角第二个),B接GPIO口(建议用21号口,最右下方,比较好找),C接风扇的负极(右上角第三个)。B口建议再加上一个1K的电阻,防止三极管过热。

温度传感器是CPU内置的,通过读取系统的
/sys/class/thermal/thermal_zone0/temp文件就可以获取到温度。用Python代码就是

def cpu_temp():
with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f:
return float(f.read())/1000

而GPIO口的电压高低可以通过python的RPi.GPIO库来控制。比如想设置IO-21号口为高电平,代码是

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT)
GPIO.output(21, GPIO.HIGH)

整合起来的代码如下

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 = 18
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)

# close air fan first
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)
is_close = True
while True:
temp = cpu_temp()
if is_close:
if temp > 45.0:
print time.ctime(), temp, 'open air fan'
GPIO.output(channel, GPIO.HIGH)
is_close = False
else:
if temp < 38.0:
print time.ctime(), temp, 'close air fan'
GPIO.output(channel, GPIO.LOW)
is_close = True

time.sleep(2.0)
print time.ctime(), temp


if __name__ == '__main__':
main()

代码中使用了双区间,从而避免了温度变化时,风扇状态的频繁变化。
实际的布线图,则是多加了一个二极灯(主要是为了方便看),面包版直接贴到外壳的侧面。

方法3:风扇(继电器)

最近发现用继电器也很方便,简单了画了一个连线图

继电器实在淘宝上买的,才5块钱,挺便宜的,当时买的时候还包邮。附上购买链接,仅供参考

最后的效果图

大功告成。

当风扇转的时候,二极灯也跟着亮起来。
之后真的就可以整夜整夜的开着树莓派,而不用担心过热的问题了。每当树莓派CPU高速运转的时候,风扇就会转起来,其他时候,风扇就会安静下来。用手感觉一下CPU的温度,凉凉的,非常好。