樹莓派風扇降噪
一般樹莓派的外置風扇直接將風扇接在樹莓派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. 正常的話,重啟進入系統后,風扇會自動轉起來,重啟過程中不會轉。