Luotianyi

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

| 日常,技巧向 | 617字

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

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

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

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

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

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

准备材料

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

  • 400孔面包板 x 1
  • 杜邦线 x 40
  • 面包板插线 x 65
  • S9014三极管 x 20

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

20180416172421.jpg

连线参考图片

这里先搬几张图片吧。

  • 树莓派40pin引脚对照图

rpi-pins-40-0.png

  • 参考的连线图1

20170713170656938-0.jpg

  • 参考的连线图2

a16f0b7d9ee46c474d55ff4eb6011915.png

  • S9014三极管结构

c4163ecc42465394e96d85734a7cd52a.jpg

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

实际连线

  • 简版

20180416183826.jpg

  • 复杂化版

20180416183834.jpg

踩到的一些坑

  • 面包板连接线有几根有问题,导致电路不通,坑死QAQ,一根一根测试连接线。
  • 参考别人的python脚本运行有问题,还得感谢echo少年的倾情解答。

代码

代码从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-

上一篇: CentOS 7.4安装Oracle 12c

下一篇: 一个好用的ssh工具

Kay

@2018-04-16 19:12:51

树莓派 温度 风扇
文章有 10 条评论
  1. 老谢

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

    1. Kay

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

  2. Dyxang

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

    1. Kay

      大忙人最近在忙什么

      1. Dyxang

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

        Dyxang 回复
        1. Kay

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

          1. Dyxang

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

            Dyxang
      2. Dyxang

        忙学业😶

        Dyxang 回复
  3. 狂放

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

    1. Kay

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

评论的人最可爱~