Files
Raspi_Auto_Fan/README.md
2026-05-15 22:04:29 +08:00

114 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Auto_Fan — 树莓派四线风扇 PID 自动控制
本项目用于在树莓派上对四线4-pinPWM 风扇进行自动控制,基于 PID 算法调速并包含堵转检测stall detection。可将风扇作为系统服务运行实时状态写入内存盘以供其他程序读取。
**主要功能**
- 基于 PID 的风扇速度控制(见 `fan.py`)。
- 堵转检测:当占空比超过保护阈值且转速异常低时报警并在状态文件中标记。
- 将实时状态写入 `/dev/shm/fan_status.json`(包含 `temp`, `rpm`, `pwm`, `is_stalled`)。
- 提供一个实验性的自适应 PID 示例(`fan_autopid.py`)。
- 支持通过 `systemd` 安装为服务(`build.sh` + `install_to_systemd.sh` + `auto-fan.service`)。
**特性细节**
- 默认 GPIOPWM 使用 `GPIO18`(硬件 PWMTACH 使用 `GPIO23`GPIO 引脚可通过命令行参数修改)。
- 默认 PID 系数位于 `fan.py` 顶部(`Kp`, `Ki`, `Kd`),需要根据实际散热与风扇特性调参。
- 堵转判定逻辑(`fan.py`):当 PWM > `DUTY_PROTECT` 且 RPM < 500 时判定可能堵转同时会在 `/dev/shm/fan_status.json` 中将 `is_stalled` 标记为 `true` 并在控制台打印警告
- 温度来源读取 `/sys/class/thermal/thermal_zone0/temp`CPU 温度并对温度做低通滤波以平滑控制
**依赖与前提**
- 硬件树莓派建议 Pi 3/4支持 4-pin PWM 风扇PWM, TACH, +5V, GND)。确保接线正确PWM `GPIO18`BCM 编号TACH `GPIO23`示例)。
- 软件
- Python 3
- `pigpio` 库与 `pigpiod` 守护进程 `requirements.txt`)。
在系统上安装并启动 `pigpiod`
```bash
sudo apt update
sudo apt install pigpio
sudo systemctl enable --now pigpiod
```
安装 Python 依赖
```bash
pip3 install -r requirements.txt
```
**快速开始**
克隆仓库后直接运行需要 root pigpiod 可用
```bash
sudo python3 fan.py
```
带参数运行示例
```bash
sudo python3 fan.py --target-temp 60 --duty-min 10 --duty-protect 30 --pwm-pin 18 --tach-pin 23
```
将程序打包并安装为 systemd 服务示例脚本
```bash
./build.sh
sudo ./install_to_systemd.sh
```
提示`build.sh` 脚本会自动创建或激活 Python 虚拟环境并安装 `requirements.txt` 中的依赖随后使用 PyInstaller 打包可执行文件克隆仓库后只需在项目根目录运行
```bash
./build.sh
```
`install_to_systemd.sh` 会把打包后的可执行文件复制到 `/opt/Auto_Fan`并使用仓库中的 `auto-fan.service` 创建 systemd 服务
**运行时状态(/dev/shm/fan_status.json示例**
```json
{
"temp": 55.2,
"rpm": 1200,
"pwm": 120,
"is_stalled": false
}
```
- `temp`: 当前温度摄氏度
- `rpm`: 当前转速RPM
- `pwm`: 当前 PWM 占空比0-255
- `is_stalled`: 是否检测到可能堵转布尔值
**调整与调试**
- PID 参数`Kp`, `Ki`, `Kd`可在 `fan.py` 顶部修改然后重启程序也可以使用 `fan_autopid.py` 试验自适应调参逻辑
- 启动风扇的最小占空比由 `DUTY_MIN` 控制风扇启动时常需较高占空比才能开始转动)。
- 堵转保护阈值由 `DUTY_PROTECT` 控制可通过命令行或修改源码调整
- 若无法读取温度或 RPM 0请检查 TACH 接线与 `pigpiod` 状态
**安全与免责声明**
- 运行本程序可能需要 root 权限或启用 `pigpiod`请谨慎授权
- 错误接线或不当配置可能损坏风扇或树莓派硬件务必在断电情况下检查接线并确认接地
- 本软件按现状提供不含任何明示或暗示的担保参见 GPL-3.0 许可中的免责声明)。
**许可License**
本项目采用 GNU General Public License v3.0GPL-3.0许可详见仓库中的 `LICENSE` 文件使用或分发本项目时请遵守 GPL-3.0 的条款
**AI 辅助声明**
本仓库的部分内容由 AI 生成
**贡献与联系**
欢迎提交 issue PR如需帮助可在仓库中打开 issue 或联系维护者
---
感谢使用 Auto_Fan祝硬件调试顺利