You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Raspberry Pi/Arduino:如何根据Pi温度手动控制5V风扇启停?

树莓派/Arduino 基于温度控制5V直流无刷风扇启停(新手入门指南)

一、核心逻辑

  • 读取树莓派CPU温度
  • 设置温度阈值(例:超过55℃启动风扇,低于45℃停止)
  • 通过开关元件(继电器/三极管)控制5V风扇通断

二、硬件准备(新手优先选继电器方案)

树莓派直接控制清单

  • 树莓派(任意带GPIO的型号)
  • 5V直流无刷风扇(注意电流,小风扇通常0.1-0.5A)
  • 带光耦隔离的5V继电器模块(避免损坏树莓派)
  • 杜邦线若干
  • 5V独立电源(风扇电流>0.5A时使用,防止拉低树莓派电压)

接线步骤

  1. 继电器模块接线:
    • VCC接树莓派5V引脚
    • GND接树莓派GND引脚
    • IN接树莓派任意GPIO(例:BCM编号GPIO17)
  2. 风扇接线:
    • 风扇正极接继电器NO(常开)引脚
    • 风扇负极接GND(与继电器GND共地)
    • 继电器COM引脚接5V电源正极(小风扇可直接接树莓派5V,大风扇用独立电源)

三、树莓派端软件实现(Python脚本,新手友好)

1. 读取树莓派温度的系统命令

直接读取系统文件获取温度,返回值为千分之一摄氏度:
cat /sys/class/thermal/thermal_zone0/temp

2. 温度控制风扇的Python脚本

import RPi.GPIO as GPIO
import time

# GPIO配置
FAN_PIN = 17  # 对应BCM编号的GPIO17
GPIO.setmode(GPIO.BCM)
GPIO.setup(FAN_PIN, GPIO.OUT)
GPIO.output(FAN_PIN, GPIO.LOW)  # 初始状态关闭风扇

# 温度阈值设置
TEMP_ON = 55  # 风扇启动温度(℃)
TEMP_OFF = 45  # 风扇停止温度(℃)

def get_rpi_temp():
    with open('/sys/class/thermal/thermal_zone0/temp', 'r') as f:
        temp_raw = f.read().strip()
    return int(temp_raw) / 1000.0

try:
    while True:
        current_temp = get_rpi_temp()
        print(f"当前温度: {current_temp:.1f}℃")
        
        if current_temp >= TEMP_ON:
            GPIO.output(FAN_PIN, GPIO.HIGH)
            print("风扇已启动")
        elif current_temp <= TEMP_OFF:
            GPIO.output(FAN_PIN, GPIO.LOW)
            print("风扇已停止")
        
        time.sleep(10)  # 每10秒检测一次温度
except KeyboardInterrupt:
    GPIO.cleanup()  # 退出时清理GPIO资源
    print("程序已终止")

3. 设置开机自启(可选)

用systemd实现脚本开机自动运行:

  1. 创建服务文件:sudo nano /etc/systemd/system/fan_control.service
  2. 写入以下内容(替换脚本路径为你自己的):
[Unit]
Description=Raspberry Pi Fan Control
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/pi/fan_control.py
Restart=always
User=pi

[Install]
WantedBy=multi-user.target
  1. 启用并启动服务:
    sudo systemctl daemon-reload
    sudo systemctl enable fan_control.service
    sudo systemctl start fan_control.service

四、Arduino配合树莓派的方案

思路

树莓派读取温度后,通过串口将数据传给Arduino,由Arduino控制风扇启停。

1. 树莓派端串口发送脚本(Python)

import serial
import time

# 串口配置,根据实际设备调整端口
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
ser.flush()

def get_rpi_temp():
    with open('/sys/class/thermal/thermal_zone0/temp', 'r') as f:
        temp_raw = f.read().strip()
    return int(temp_raw) / 1000.0

try:
    while True:
        temp = get_rpi_temp()
        ser.write(f"{temp:.1f}\n".encode())
        print(f"发送温度数据: {temp:.1f}℃")
        time.sleep(10)
except KeyboardInterrupt:
    ser.close()
    print("程序已终止")

2. Arduino端接收控制代码

#define FAN_PIN 2
#define TEMP_ON 55.0
#define TEMP_OFF 45.0

void setup() {
  Serial.begin(9600);
  pinMode(FAN_PIN, OUTPUT);
  digitalWrite(FAN_PIN, LOW);
}

void loop() {
  if (Serial.available() > 0) {
    String temp_str = Serial.readStringUntil('\n');
    float current_temp = temp_str.toFloat();
    
    if (current_temp >= TEMP_ON) {
      digitalWrite(FAN_PIN, HIGH);
      Serial.println("风扇启动");
    } else if (current_temp <= TEMP_OFF) {
      digitalWrite(FAN_PIN, LOW);
      Serial.println("风扇停止");
    }
  }
  delay(1000);
}

3. Arduino接线

  • 继电器IN接Arduino D2引脚
  • 继电器VCC接Arduino 5V,GND接Arduino GND
  • 风扇接线同树莓派直接控制的接法
  • 树莓派通过USB转TTL模块连接Arduino:树莓派TX接Arduino RX,树莓派RX接Arduino TX,两者GND相连

五、新手注意事项

  • 接线前必须断开所有电源,防止短路烧设备
  • 风扇电流>0.5A时,一定要用独立5V电源供电,不要依赖树莓派的5V引脚
  • 可根据实际使用场景调整温度阈值,避免风扇频繁启停
  • 树莓派GPIO输出为3.3V,禁止直接接5V信号,带光耦的继电器模块更安全

内容的提问来源于stack exchange,提问作者Ward Wielockx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 06:04:51