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. 正常的話,重啟進入系統后,風扇會自動轉起來,重啟過程中不會轉。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM