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. 正常的话,重启进入系统后,风扇会自动转起来,重启过程中不会转。

 

posted @ 2022-04-20 18:04  刘哄红  阅读(1245)  评论(1编辑  收藏  举报