Jade Dungeon

Raspberry Pi 根据CPU测试调节风扇

设计方案

选用了三极管方案,在接线方式中选择了自制杜邦线连接三极管和风扇, 这样的好处是线材的长度可以随自己需要裁剪,而且可以轻松塞进树莓派的外壳中。 全程无焊接,以后不用也可方便拆卸线材、杜邦头、三极管元件等用作其他用途。

准备材料

以下材料均可某宝购买,为了省事其中杜邦头和杜邦胶壳是买的套件, 一盒里边有公母端子各200个,以及各种类型的胶壳。

  • 树莓派散热风扇
  • 尖嘴钳:用来剥线和压线
  • 导线
  • 杜邦端子:母端子6个,公端子2个
  • 杜邦胶壳:1P1个,2P2个,3P一个(非必须)
  • 三极管S8550

连接线路

example

example

控制程序

安装raspberry-gpio:

https://jaist.dl.sourceforge.net/project/raspberry-gpio-python/RPi.GPIO-0.6.5.tar.gz

安装python-devel:

yum install -y python-devel

驱动代码:

#!/usr/bin/python2
import sys
import time
try:
    import RPi.GPIO as GPIO
except RuntimeError:
    print("Error importing RPi.GPIO! Maybe use '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 = 14
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)

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

        time.sleep(15.0)
        #print time.ctime(), temp, is_close


if __name__ == '__main__':
    main()

注意:因为这里使用的三极管为PNP型三极管,基极施加低电平时才导通电路, 如果是用的NPN型三极管则与之相反。

本人的启动脚本:

nohup python -u /usr/local/bin/tempctl.py >/usr/local/bin/tempctl.log 2>&1 &

如有需要可自己注册为服务并设置开机自启,这里不再赘述。