Back
Featured image of post 树霉派智能降温风扇

树霉派智能降温风扇

夏天要到了,凑巧前阵子用树霉派来作家里K3S的节点,需要长期开机。虽然有个小型风扇(型号为4010 炫光风扇)可以用,但是它只要接电就一直转着,还是稍微有点噪音的。为防止散热出问题,又为了更静音,我希望平常没事就用它自己的散热片安静工作,只在温度过高时才启动风扇。

有答案可抄?

网上一搜索,果然爱折腾的人不少。这个问题已经有多种解法了,有使用三极管的和继电器的。手上没有三级管,有一个5V一路继电器,就拿它折腾一下吧。网上多数文章写得不太清楚,加上本人的电工电路知识早已经还给大学老师了,花了一点点时间搞定。

关于继电器和接线方法

它的工作原理不复杂,我们这里把它当作一个受控的开关。如下图的简介:

我们可以控制给线圈供电,就可以控制到开关从原来常闭(NC)转到常开(NO)。我手上的继电器是长这样的:

这里输入的三个针脚标注分别是:S、+、-对应接法是:

  • S为控制线,我接到了树霉派的GPIO5引脚
  • + 接到5V电压
  • - 接GND(接地)

输出的三个是上图的:COM、NO、NC。如果没有电流经过线圈时,NC和COM是连通的,有电流后COM和NO是连通的,即COM和NO的开闭是可以受我们程序控制电流而控制的。所以我们可以让COM和NO及风扇再加电源构成一个基本电路,也就是说COM接到5V取电,它经过NO出来的线接到风扇的正极,风扇负极接地。 整个接线我尝试录了个视频(第一次搞视频哇:P)

控制程序

我们知道树霉派本身就有一个可以查看当前CPU温度的地方,即:

1
cat /sys/class/thermal/thermal_zone0/temp

我们只要在脚本中简单判断温度去启动和停止风扇(实际是向前面说的控制GPIO提供高低电平)。代码如下:

 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
45
46
47
48
49
50
51
52
#!/usr/bin/python3
#coding:utf8

#自动风扇控制程序。 by 飘逝的风(https://gameapp.club/)
import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

#控制风扇的GPIO,你可以修改为你所接的控制线对应GPIO口
FAN_GPIO = 5

GPIO.setup(FAN_GPIO, GPIO.OUT)
GPIO.output(FAN_GPIO,  GPIO.LOW)

# 当前风扇是否转动
RUNNING = False

def GetCurrentTemp():
    with open( '/sys/class/thermal/thermal_zone0/temp' ) as f:
        cpu_temp_raw = f.read()
        cpu_temp = round(float(cpu_temp_raw)/1000, 1)
        return cpu_temp
    return 0

def StartFan():
    global RUNNING
    if not RUNNING:
        print("start fan...")
        GPIO.output(FAN_GPIO,  GPIO.HIGH)
        RUNNING = True
    else:
        print("fan is running...")


def StopFan():
    global RUNNING
    if RUNNING:
        print("stop fan...")
        GPIO.output(FAN_GPIO,  GPIO.LOW)
        RUNNING = False


while True:
    temp = GetCurrentTemp()
    print ("current cpu temp is:%f"%temp)
    if temp >= 55:
        StartFan()
    elif temp <45:
        StopFan()
    time.sleep(5)

启动之后即会工作,可以尝试给机器一点压力:

1
2
apt install stress # 如果已经安装stress跳过此步
stress -c 66

一会温度上来风扇就自己转起来啦,停掉它后,温度下降到一定之后风扇停止工作。目标达成,收工。

PS: 妈妈再也不用担心闻到电路烧焦的味道了!