根据树莓派CPU温度自动控制风扇转停
in 日常技巧 with 10 comments

根据树莓派CPU温度自动控制风扇转停

in 日常技巧 with 10 comments

购买树莓派也有一段时日了,当然了,几乎也是处于吃灰状态。

给树莓派安装过风扇的人都知道,如果给风扇接入5V的GPIO下,风扇的声音大到像是在拆家。
所以我机智的接入了3.5V稍微柔和了那么一点,去年跑了一整个夏天。

当时有一个想法是:我们可以通过 cat /sys/class/thermal/thermal_zone0/temp获得CPU的实时温度,那么判断这个值的大小,大于设定值让风扇工作,等待CPU的温度降下来到一个设定的温度就让风扇停止工作。

但是想法总是一闪而过也没有具体去做操作。

后来也看到了树莓派实现温度监控并控制风扇散热,但当时也没时间去做。

随着时间又来到了四月,树莓派的CPU温度逐渐又攀高了。
又看了一篇文树莓派配置自动风扇才想起来这个坑还没有填,所以今年让风扇也休息一下吧。

准备材料

以下列出材料类目,打出的价格都是含邮费的(包邮呀)

实际上用不完这些材料的,但,人家卖家就这样卖,而且还巨便宜,还能怎么办?

20180416172421.jpg

连线参考图片

这里先搬几张图片吧。

rpi-pins-40-0.png

20170713170656938-0.jpg

a16f0b7d9ee46c474d55ff4eb6011915.png

c4163ecc42465394e96d85734a7cd52a.jpg

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

实际连线

20180416183826.jpg

20180416183834.jpg

踩到的一些坑

代码

代码从TesterHome抄的,我加了一些注释~

#!/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~

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

--EOF--

Responses
  1. 想去折腾PWM温控,无限拖延告终 ...

    Reply
    1. Kay
      @老谢

      我感觉还是这个比较省钱吧,不过,确实,太占地方且不美观!⌇●﹏●⌇

      Reply
  2. 树莓派已出……没有时间弄了……

    Reply
    1. Kay
      @Dyxang

      大忙人最近在忙什么

      Reply
      1. Dyxang
        @Kay

        3b+我们这快能买到了吧

        Reply
        1. Kay
          @Dyxang

          事实上淘宝已经有的卖了吧?你要入3b+么? 据说性能提升很大,但是官方都不提供64位系统,CPU就这样浪费了。。。。

          Reply
          1. Dyxang
            @Kay

             ̄﹃ ̄没精力折腾了,不买

            Reply
      2. Dyxang
        @Kay

        忙学业😶

        Reply
  3. 看起来不贵,上车 不过。。我完全不懂啊

    Reply
    1. Kay
      @狂放

      可以慢慢摸索,乐趣就在不停地折腾🤣

      Reply