树莓派是什么?

是一个 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 的温度,凉凉的,非常好。


↙↙↙阅读原文可查看相关链接,并与作者交流