04. 树莓派风扇降噪
树莓派风扇降噪
一般树莓派的外置风扇直接将风扇接在树莓派5V的GPIO引脚上,风扇持续高速旋转,一是对风扇本身的寿命不太友好,二是风扇高速旋转时产生的噪音会有损舍友之间的感情。
让树莓派输出PWM信号,根据自身CPU的温度调整风扇的转速,减少噪音,可以在舍友不知情的情况下让电表偷偷的多跑几格
1. 首先查看树莓派引脚、gpio的分布情况
gpio readall
2. 如果你可以看到,请跳过步骤(3)~(6),如果你不能看到,是因为你系统自带的wiringpi版本太旧,查不了新机器的引脚信息。
3. 进入软件下载专用目录(树莓派分类,文章02中指导创建的),如果没有也可以找个你喜欢的地方创建个下载专用目录(为了后期文件管理方便)
cd /home/pi/software/
4. wiringpi安装(方式一)(执行以下命令后,返回步骤一查看引脚,如果还是看不到就用下面的方式二)
apt-get install wiringpi
5. wiringpi安装(方式二),下载最新的wiringpi(如果上条命令起作用就不用敲这个了)
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
方式二安装失败可以尝试:https://www.cnblogs.com/jiayezi/p/16891805.html
6. 安装完成后,执行步骤(1),就可以看到引脚信息
7. 硬件准备:5V小风扇,NPN三极管,10uF以上的电容,并按下面的电路连接起来。
注:之所以不用PNP三极管是因为PNP三极管需要将基极的电平拉高才能截止。由于小风扇的工作电压是5V,集电极的电压也是5V,但GPIO输出的高电平是3.3V,3.3V接在基极上差不多只能让三极管工作在“放大”状态,不能完全的截止。
Pin12引脚对应位置:
8. 按上面的电路接好后,风扇是不会转的,此时可以手动控制风扇转动测试下
gpio mode 1 pwm
gpio pwm 1 1023
正常情况下风扇会全速地转起来
9. 在一个自己喜欢的位置新建一个cpu_fan.sh文件
vim /home/pi/cpu_fan.sh
10. 在文件中输入以下内容(参数可自行微调)
#!/bin/sh
#sleep 5
#设置运行状态文件
RUN=/var/run/cpu-fan.run
touch $RUN
chmod 777 $RUN
#设置风扇默认运行模式,0为关闭,1为全速,2为自动,运行过程中可以直接修改/var/run/cpu-fan.run文件来生效
echo "2" > $RUN
#设置开启风扇的最低温度
set_temp_min=35000
#设置关闭风扇温度比最低温度小1度
shutdown_temp=`expr $set_temp_min - 1000`
#设置风扇全速运行的温度
set_temp_max=70000
#开机风扇全速运行
#默认的pwm值范围是0~1023
gpio mode 1 pwm
gpio pwm 1 1023
#初始化参数
fan=0
while true
do
#获取cpu温度
tmp=`cat /sys/class/thermal/thermal_zone0/temp`
status=`cat $RUN`
#计算pwm值,从变量set_temp_min设置的温度开始开启风扇,最低转速50%
pwm=$((($tmp-$set_temp_min)*512/($set_temp_max-$set_temp_min)+511))
#设置pwm值上限
if [ $pwm -gt 1023 ] ;then
pwm=1023
fi
#小于设置温度关闭风扇
if [ $tmp -le $shutdown_temp ] ;then
pwm=0
fan=0
else
#第一次超过设置温度全速开启风扇,防止风扇不能启动
if [ $tmp -gt $set_temp_min ] && [ $fan -eq 0 ] ;then
gpio pwm 1 1023
fan=1
sleep 5
fi
fi
#检查run文件,为0时关闭风扇
if [ $status -eq 0 ] ;then
pwm=0
fan=0
else
#检查run文件,为1时持续开启风扇最高转速
if [ $status -eq 1 ] ;then
pwm=1023
fi
fi
gpio pwm 1 $pwm
#每5秒钟检查一次温度
sleep 5
#输出日志,需要的可注释掉取消注释“#”,长时间开启有损SD卡寿命
#echo "`date` temp=$tmp pwm=$pwm status=$status" >> /var/log/cpu-fan/cpu-fan.log
done
11. 配置日志自动管理(如果上面的输出日志注释掉了可跳过步骤12~步骤14)
加“#”号就是注释掉的。
12. 新建cpu-fan文件
vim /etc/logrotate.d/cpu-fan
13. 在文件中输入以下内容
/var/log/cpu-fan/cpu-fan.log {
su root
rotate 7
daily
compress
delaycompress
missingok
notifempty
create 666 root root
}
14. 由于脚本运行在一般用户下,所以对日志文件的访问会产生权限问题,第一次运行的时候需要将/var/log/cpu-fan/cpu-fan.log文件的组和拥有者改为root,文件权限改为666。
mkdir /var/log/cpu-fan
chown root:root /var/log/cpu-fan
chmod 777 /var/log/cpu-fan
touch /var/log/cpu-fan/cpu-fan.log
chown root:root /var/log/cpu-fan/cpu-fan.log
chmod 666 /var/log/cpu-fan/cpu-fan.log
15. 设置开机自动运行:打开/etc/rc.local文件
vim /etc/rc.local
16. 在该文件中添加以下内容(根据“cpu_fan.sh”存放的路径添加)
su -c /home/pi/cpu_fan.sh root
17. 重启
reboot
18. 正常的话,重启进入系统后,风扇会自动转起来,重启过程中不会转。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具