树莓派 温度控制散热风扇

部署运行你感兴趣的模型镜像

树莓派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针。

在这里插入图片描述
配置文件 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查看服务状态,正常情况输出
在这里插入图片描述
建立个死循环脚本
while.py

	while True:
		i=0
		i+=1

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

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

树莓派在运行过程中由于功耗较高,特别是在执行高负载任务时,可能会出现过热的情况。为了解决这个问题,可以采用风扇散热方案来帮助降低CPU和其他关键组件的温度。 一种常见的做法是使用三极管控制风扇的开关[^4]。具体来说,将风扇的正极连接到树莓派的5V电源引脚上,而风扇的负极则连接到一个NPN型三极管(如2N2222或BC547)的发射极(E)。然后,三极管的集电极(C)接地(GND),基极(B)通过一个适当的限流电阻连接到树莓派的一个GPIO引脚上。这样就可以通过软件控制该GPIO引脚的状态来开启或关闭风扇了。 对于更精细的温度管理,可以通过编程实现根据当前系统温度自动调节风扇转速的功能。这通常涉及到读取系统温度传感器的数据,并基于此数据调整PWM信号的占空比以改变风扇的速度。Python语言中可以利用RPi.GPIO库来操作GPIO口输出PWM波形[^1]。下面是一个简单的示例代码片段: ```python import RPi.GPIO as GPIO import time # 设置GPIO模式和初始频率 fan_pin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(fan_pin, GPIO.OUT) pwm = GPIO.PWM(fan_pin, 100) # 频率设为100Hz # 启动PWM pwm.start(0) # 初始占空比为0% try: while True: # 这里可以根据实际需要获取温度值并计算合适的占空比 duty_cycle = 50 # 示例:设定50%占空比 pwm.ChangeDutyCycle(duty_cycle) time.sleep(1) except KeyboardInterrupt: pass # 清理GPIO资源 pwm.stop() GPIO.cleanup() ``` 此外,在物理安装方面,确保风扇能够有效地吹拂到主要发热区域是非常重要的。有时还会配合散热片一起使用以提高散热效率[^5]。如果发现即使加装了散热装置但效果不佳,则可能要考虑优化程序性能减少不必要的计算负载,或者检查是否有其他硬件因素导致额外发热。 最后,为了保证系统的长期稳定性,建议设置合理的自动启动机制让风扇控制脚本随系统开机自启,并且定期监测系统温度变化情况以便及时作出应[^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值