January 31, 2023

RaspberryPi Auto Temperature Fan

前言

因为树莓派风扇一直转蛮吵的,而且在温度低的时候转也不环保:)就试着设置一下树莓派温控风扇,实现树莓派风扇智能化。在温度高时风扇自动开启来散热,温度低时风扇自动关闭减少噪音,节能又环保:)


准备


连接示意图

RaspberryPi Fan Control

*网上有说运行时间久了三极管可能会发热,最好在三极管那边加装一个电阻来保护。这个可以根据自己用的三极管来取舍。


代码

Talk is cheap, show me the code.

autoFan.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/python
# -*- coding: utf-8 -*-
from RPi import GPIO
from time import sleep

# 如果需要开机自启时设置
# 开机自启是在机器还没完成初始化进程的时候就启动的,休眠30秒,强迫程序在系统初始化成功后进行运行。
# 不然可能会因为系统还没准备好你的程序就强行运行而导致启动失败。
sleep(30)

# 使用BCM引脚模式
GPIO.setmode(GPIO.BCM)

# 建议这里起始温度和结束温度温差设置大一点,避免风扇频繁开关
channel = 17 # 使用BCM17(对应物理引脚号11)接口控制开关
start_temp = 50 # 启动风扇阈值 = 50 degrees
end_temp = 40 # 关闭风扇阈值 = 40 degrees

# 初始化控制引脚
GPIO.setup(channel, GPIO.OUT, initial = GPIO.LOW)
# 用于标记风扇是否打开 避免频繁调用output
is_high = GPIO.LOW

try:
while True:
# 获取当前SoC温度
temp = open('/sys/class/thermal/thermal_zone0/temp')
temp = int(temp.read())/1000

if temp > start_temp and not is_high: # 当SoC温度超过启动阈值且风扇处于关闭状态
GPIO.output(channel, GPIO.HIGH) # 打开风扇
is_high = GPIO.HIGH # 标记风扇状态为打开

elif temp < end_temp and is_high: # 当SoC温度低于关闭阈值且风扇处于打开状态
GPIO.output(channel, GPIO.LOW) # 关闭风扇
is_high = GPIO.LOW # 标记风扇状态为关闭

sleep(10) # 每隔10秒监控一次
except:
pass

# 退出时 重置该引脚
GPIO.cleanup(channel)


去到Terminal里运行就可以实现树莓派根据温度来自动开启和关闭风扇啦。

1
python3 autoFan.py

更进一步,开机自启?

尝试中。。。



Reference

About this Post

This post is written by Andy, licensed under CC BY-NC 4.0.

#RaspberryPi