树莓派 温度控制散热风扇

树莓派9层外壳自带一个散热风扇,风扇是2针的,不能控制,插上电源后就一直全速运转,晚上噪音很大。而且,一直运行,风扇寿命也会降低。

考虑加一个电机驱动模块,使用pwm控制风扇电压。cpu温度如果低于一定程度,风扇可以直接停转。自带风扇标记说明5v电压下只有0.16A电流,在淘宝找到一个体积小,价格低的驱动模块DRV8833,淘宝育松电子电只卖2块一个,这家店物美价廉,商品很全。我买了一个电烙铁,排针,焊锡丝,一个备用树莓派散热风扇,2个舵机,一个二轴舵机云台,一个AD模块,几个LED模组,摇杆模组,总共只要50块。DRV8833 这是一个双路H桥,稳定工作电流可达1A,驱动散热风扇绰绰有余了。

模块默认排针是未焊接上的,需要准备一个电烙铁。我们不需要正反转,所以把IN3短接,这样IN4高电平时,out4输出5V电源,OUT3接地,风扇转动。丝印eep是休眠引脚(丝印标错了,正确的是应该是ULT标记,按商品页面说明,调了半天),高电平时模块唤醒,我们的模块一直是工作状态,所以可以通过短接J2 是休眠引脚永远置高,节省一个引脚。焊接好后,风扇红线接OUT4,黑线接OUT3,反了是不转的。VCC接树莓派5V电源针,GND接树莓派GND针。 IN4接树莓派板载12针。

树莓派 温度控制散热风扇_第1张图片
配置文件 tempConfig.ini

[config]
mintemp = 65
minDuty = 50
maxtemp = 80

温度小于65摄氏度时,12脚输出pwm占空比为0.风扇停转,大于65时,pwm占空比不为零,最小占空比是50%,到80度时占空比为100%,风扇全速运行。注意的是pwm只能调节电压,电压和转速不是线性相关的,所以,要测试保证设置最小占空比时能够驱动风扇转动。太低的占空比,风扇不转,只会造成发热。

#!/usr/bin/env python3
import configparser
import RPi.GPIO as GPIO
from time import sleep
#风扇控制引脚
fanPin = 12
#配置文件路径
configPath='/home/pi/program/python/tempConfig.ini'
Fan = None
#读取配置文件
def config(m):
    cf = configparser.ConfigParser()
    cf.read(configPath)

    m['mintemp'] = float(cf.get('config','mintemp'))
    m['minduty'] = float(cf.get('config','minduty'))

    m['maxtemp'] = float(cf.get('config','maxtemp'))


def init():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(fanPin,GPIO.OUT)
    global Fan
    Fan=GPIO.PWM(fanPin,1000)
def temp():
    f = open('/sys/class/thermal/thermal_zone0/temp')
    if(not f is None):
        tempv = float(f.read())
        return (tempv/1000)
    else:
        return None

if __name__ == "__main__":
    print('hello, world')
    init()
    #global Fan
    Fan.start(50)
    Fan.ChangeFrequency(80)
    #print(temp())

    m = {}
    config(m)
    while(True):
        sleep(0.5)
        tempV = temp()
        #最小温度 对应最小占空比,最大温度对应100%占空比,占空比变化量线性相关温度变化量
        if(tempV>m['mintemp']):
            Fan.ChangeDutyCycle(int(m['minduty']+(tempV-m['mintemp'])/(m['maxtemp']-m['mintemp'])*(100-m['minduty'])))
		#小于最低温度 风扇停转
        else:
            Fan.ChangeDutyCycle(0)

设置后台服务 ,在lib/systemd/system/文件夹下sudo vim tempRegulation.service创建tempRegulation.service 文件
文件内容

[Unit]
Description=tempRegulation Fan control server

[Service]
#python脚本绝对路径全名称
ExecStart=/home/pi/program/python/tempRegulation.py

KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=simple

[Install]
WantedBy=multi-user.target

命令行输入 systemctl start tempRegulation.service
启动后台服务
systemctl status tempRegulation.service查看服务状态,正常情况输出
树莓派 温度控制散热风扇_第2张图片
建立个死循环脚本
while.py

	while True:
		i=0
		i+=1

启动几个进程python while.py,CPU温度升高,大于最小设置温度时风扇开始转动。功能实现。

你可能感兴趣的:(树莓派,python)