扇系統(tǒng):從GPIO控制到Python腳本實(shí)現(xiàn))
1. 項(xiàng)目概述給香橙派Zero 3加個(gè)“智能空調(diào)”最近在折騰香橙派Orange Pi Zero 3這塊小主板性能確實(shí)不錯(cuò)但一跑點(diǎn)負(fù)載那個(gè)發(fā)熱量就上來了尤其是夏天摸上去都燙手。我尋思著這玩意兒雖然皮實(shí)但長期高溫運(yùn)行總歸會影響穩(wěn)定性和壽命。市面上倒是有現(xiàn)成的散熱風(fēng)扇套件但要么是常轉(zhuǎn)噪音大要么就是簡單的溫控開關(guān)不夠靈活。作為一個(gè)喜歡折騰的玩家我決定自己動手給它裝上一個(gè)由Python代碼驅(qū)動的“智能溫控風(fēng)扇”。這個(gè)項(xiàng)目的核心思路很簡單利用香橙派Zero 3自帶的GPIO引腳和系統(tǒng)溫度傳感器通過Python腳本實(shí)時(shí)讀取CPU溫度并根據(jù)我們設(shè)定的閾值自動控制一個(gè)5V小風(fēng)扇的啟停。這樣一來風(fēng)扇只在需要的時(shí)候工作既保證了散熱效果又最大程度地降低了噪音和功耗。整個(gè)外殼我選用的是常見的亞克力拼接外殼輕便且易于加工。下面我就把從硬件連接到軟件編程再到實(shí)際調(diào)試的完整過程以及中間踩過的坑和總結(jié)的經(jīng)驗(yàn)詳細(xì)分享給大家。無論你是剛接觸單板計(jì)算機(jī)的新手還是想給手頭設(shè)備增加點(diǎn)自動化功能的愛好者這套方案都足夠簡單、直接且效果立竿見影。2. 硬件準(zhǔn)備與連接方案解析2.1 核心物料清單與選型考量動手之前先把需要的家伙事兒準(zhǔn)備齊全。這個(gè)項(xiàng)目硬件部分不復(fù)雜但每一樣?xùn)|西的選擇都有講究。香橙派Orange Pi Zero 3項(xiàng)目的主體。選擇它是因?yàn)槠湫詢r(jià)比高GPIO接口標(biāo)準(zhǔn)40Pin兼容樹莓派且系統(tǒng)內(nèi)置了溫度傳感器方便我們讀取數(shù)據(jù)。5V直流散熱風(fēng)扇這是執(zhí)行機(jī)構(gòu)。我選擇的是4010規(guī)格直徑40mm厚度10mm的5V風(fēng)扇風(fēng)量和噪音比較均衡。關(guān)鍵點(diǎn)在這里務(wù)必確認(rèn)風(fēng)扇的工作電流。常見的小風(fēng)扇電流在0.1A到0.2A之間。香橙派單個(gè)GPIO引腳的驅(qū)動能力有限通常小于16mA絕對不能直接將風(fēng)扇接在GPIO引腳上否則很可能燒毀引腳甚至主板。我們必須通過一個(gè)“開關(guān)”來控制它。三極管如S8050或MOS管如SI2302這個(gè)就是上面說的“電子開關(guān)”。它的作用是用GPIO輸出的微弱電流高電平3.3V幾個(gè)mA來控制風(fēng)扇這條大電流5V100mA以上的通路。我推薦使用N溝道MOS管例如SI2302因?yàn)樗?qū)動更簡單導(dǎo)通內(nèi)阻小自身損耗低。三極管方案也可以但需要計(jì)算基極電阻稍微麻煩一點(diǎn)。杜邦線母對母、公對母用于連接。建議準(zhǔn)備多種規(guī)格方便接線。1kΩ電阻用于GPIO引腳的保護(hù)和限流。即使使用MOS管在GPIO和MOS管柵極G之間串聯(lián)一個(gè)1kΩ電阻也是一個(gè)好習(xí)慣可以防止瞬間電流沖擊。香橙派亞克力外殼我選用的是多層拼接的透明亞克力外殼。選擇它的原因一是輕便二是在側(cè)板或頂板上鉆孔安裝風(fēng)扇非常容易三是透明外觀能看到內(nèi)部元器件比較有極客感。微型螺絲刀套裝、電鉆或手捻鉆用于給亞克力外殼打孔固定風(fēng)扇。注意安全第一所有焊接或接線操作務(wù)必在斷電狀態(tài)下進(jìn)行。連接完成后仔細(xì)檢查電路特別是電源正負(fù)極VCC和GND不能接反確認(rèn)無誤后再上電。2.2 電路連接原理與實(shí)操接線理解了為什么需要MOS管我們來看具體怎么接。這里以更優(yōu)選的N溝道MOS管SI2302為例。電路原理簡述 我們把風(fēng)扇看作一個(gè)用電器。它的正極紅線直接接到香橙派的5V電源引腳上例如排針的第2或第4腳。它的負(fù)極黑線接到MOS管的漏極D。MOS管的源極S接到香橙派的GND地線例如第6、9、14、20、25、30、34、39腳中的任意一個(gè)。MOS管的柵極G通過一個(gè)1kΩ的保護(hù)電阻連接到我們準(zhǔn)備用來控制的GPIO引腳例如GPIO17對應(yīng)物理引腳11。工作邏輯當(dāng)我們的Python腳本讓GPIO17輸出高電平3.3V時(shí)MOS管導(dǎo)通風(fēng)扇的負(fù)極與GND接通風(fēng)扇回路形成開始轉(zhuǎn)動。當(dāng)GPIO17輸出低電平0V時(shí)MOS管關(guān)閉風(fēng)扇回路斷開停止轉(zhuǎn)動。實(shí)操接線步驟對應(yīng)40Pin引腳圖風(fēng)扇供電將風(fēng)扇的紅色線V接到香橙派排針的第4腳5V。風(fēng)扇控制將風(fēng)扇的黑色線V-接到MOS管SI2302的漏極D。MOS管接地將MOS管的源極S接到香橙派排針的第6腳GND。信號控制將一個(gè)1kΩ電阻的一端接到香橙派排針的第11腳GPIO17。電阻的另一端接到MOS管的柵極G。為了更直觀以下是接線對照表元件/位置連接點(diǎn)1連接點(diǎn)2風(fēng)扇 紅色線(V)風(fēng)扇正極香橙派 Pin 4 (5V)風(fēng)扇 黑色線(V-)風(fēng)扇負(fù)極MOS管 漏極(D)MOS管 SI2302源極(S)香橙派 Pin 6 (GND)限流電阻 1kΩ一端香橙派 Pin 11 (GPIO17)限流電阻 1kΩ另一端MOS管 柵極(G)實(shí)操心得在將線焊接到MOS管細(xì)小的引腳上時(shí)建議先給引腳上一點(diǎn)錫然后用鑷子夾住杜邦線頭快速點(diǎn)焊。如果使用面包板進(jìn)行前期測試會非常方便確認(rèn)一切工作正常后再改用焊接方式固定制作成一個(gè)小模塊。2.3 外殼改造與風(fēng)扇固定電路通了接下來讓風(fēng)扇“住”進(jìn)外殼里。確定風(fēng)扇位置最常見的做法是將風(fēng)扇安裝在亞克力外殼的頂部或側(cè)后方形成向外抽風(fēng)的風(fēng)道將主板產(chǎn)生的熱空氣抽出。將風(fēng)扇虛放在外殼上觀察是否與主板上的高大元件如網(wǎng)絡(luò)變壓器、USB口沖突。標(biāo)記與打孔用筆在亞克力板上描出風(fēng)扇的四個(gè)螺絲孔位和中間風(fēng)道的范圍。使用手捻鉆或小電鉆先用小鉆頭如2mm在螺絲孔位打出定位孔再用大一點(diǎn)的鉆頭如3mm擴(kuò)孔至適合螺絲穿過的大小。對于中間的風(fēng)道部分可以用鉆頭沿內(nèi)圈密集打孔然后用銼刀修整成一個(gè)完整的圓形開口或者直接使用合適尺寸的開孔器。固定風(fēng)扇使用風(fēng)扇附贈的螺絲或更長的自攻螺絲將風(fēng)扇固定在亞克力板內(nèi)側(cè)即朝向主板的一面??梢栽陲L(fēng)扇與亞克力板之間墊上隨風(fēng)扇附送的橡膠減震墊能有效降低共振噪音。理線與組裝將連接風(fēng)扇的導(dǎo)線合理排布用扎帶或膠布固定避免干擾主板安裝或碰到散熱片。最后將所有亞克力板按順序組裝好。至此硬件部分就全部完成了。接下來是讓這個(gè)系統(tǒng)擁有“大腦”的關(guān)鍵——軟件編程。3. 軟件環(huán)境配置與Python腳本編寫3.1 系統(tǒng)基礎(chǔ)環(huán)境與GPIO庫選擇香橙派Zero 3可以運(yùn)行多種系統(tǒng)我使用的是官方的Orange Pi OS基于Debian。首先確保系統(tǒng)是最新的sudo apt update sudo apt upgrade -y接下來需要安裝控制GPIO的Python庫。這里有幾個(gè)選擇RPi.GPIO樹莓派同名庫有時(shí)兼容性不佳、OrangePi.GPIO香橙派官方庫、gpiodLinux通用GPIO字符設(shè)備接口。我推薦使用gpiod因?yàn)樗亲瞵F(xiàn)代、最標(biāo)準(zhǔn)的方式不依賴具體的硬件平臺通過操作系統(tǒng)的通用接口來控制GPIO兼容性和可靠性最好。安裝gpiod的Python綁定庫libgpiod的工具和開發(fā)包sudo apt install -y gpiod libgpiod-dev libgpiod-doc python3-libgpiod安裝完成后可以測試一下是否安裝成功并查看我們的GPIO17對應(yīng)的芯片和線路號這對后續(xù)編程至關(guān)重要。# 查看GPIO芯片信息 gpiodetect執(zhí)行后你會看到類似下面的輸出gpiochip0 [gpio] (32 lines)這表示系統(tǒng)識別到了一個(gè)GPIO芯片gpiochip0它有32條線路。# 查看 gpiochip0 所有線路的編號和名稱映射 gpioinfo gpiochip0在這個(gè)列表中你需要找到對應(yīng)物理引腳11GPIO17的那一行。香橙派的GPIO編號通常遵循其自己的定義可能需要查閱香橙派Zero 3的引腳圖。一個(gè)更直接的方法是使用gpioinfo命令然后根據(jù)引腳圖上的GPIO組和編號來對應(yīng)。例如GPIO17可能對應(yīng)gpiochip0的線路17。請務(wù)必根據(jù)你的實(shí)際板卡確認(rèn)這個(gè)編號我們假設(shè)它就是17。3.2 核心Python溫控腳本詳解現(xiàn)在來編寫核心的Python腳本fan_control.py。這個(gè)腳本將不斷讀取CPU溫度并與我們設(shè)定的閾值比較從而控制風(fēng)扇開關(guān)。#!/usr/bin/env python3 香橙派Zero 3智能溫控風(fēng)扇控制腳本 使用libgpiod庫通過GPIO控制MOS管開關(guān)風(fēng)扇。 import time import gpiod import sys import signal # 用戶配置區(qū)域 # 根據(jù) gpiodetect 和 gpioinfo 的結(jié)果修改 GPIO_CHIP gpiochip0 # GPIO芯片名 FAN_GPIO_LINE_OFFSET 17 # 控制風(fēng)扇的GPIO線路偏移量對應(yīng)物理引腳11 # 溫度閾值單位攝氏度 TEMP_ON_THRESHOLD 55 # 溫度高于此值打開風(fēng)扇 TEMP_OFF_THRESHOLD 48 # 溫度低于此值關(guān)閉風(fēng)扇設(shè)置滯后防止頻繁開關(guān) # 檢查溫度的時(shí)間間隔秒 CHECK_INTERVAL 5 # 配置結(jié)束 def get_cpu_temperature(): 讀取CPU溫度傳感器的值。 try: with open(/sys/class/thermal/thermal_zone0/temp, r) as f: temp_str f.read().strip() # 讀取的值通常是毫攝氏度需要除以1000 temp int(temp_str) / 1000.0 return temp except FileNotFoundError: print(錯(cuò)誤無法找到溫度傳感器文件。請確認(rèn)系統(tǒng)是否正確。) return None except Exception as e: print(f讀取溫度時(shí)發(fā)生錯(cuò)誤{e}) return None def control_fan(fan_line, state): 控制風(fēng)扇開關(guān)。 Args: fan_line: gpiod.Line對象 state: True 為開高電平False 為關(guān)低電平 try: # 設(shè)置線路輸出值1為高電平3.3V0為低電平0V fan_line.set_value(1 if state else 0) except Exception as e: print(f控制GPIO時(shí)發(fā)生錯(cuò)誤{e}) def signal_handler(sig, frame): 捕獲退出信號如CtrlC確保程序退出前關(guān)閉風(fēng)扇。 print(\n收到停止信號正在關(guān)閉風(fēng)扇并清理資源...) if fan_line in globals() and fan_line: control_fan(fan_line, False) fan_line.release() sys.exit(0) def main(): # 注冊信號處理器用于優(yōu)雅退出 signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGTERM, signal_handler) # 獲取GPIO芯片和控制線路 try: chip gpiod.Chip(GPIO_CHIP) # 請求將指定線路設(shè)置為輸出模式默認(rèn)輸出低電平風(fēng)扇關(guān) fan_line chip.get_line(FAN_GPIO_LINE_OFFSET) fan_line.request(consumerfan_control, typegpiod.LINE_REQ_DIR_OUT, default_val0) except Exception as e: print(f初始化GPIO失敗{e}) sys.exit(1) print(f香橙派Zero 3智能溫控風(fēng)扇已啟動。) print(f配置啟動溫度{TEMP_ON_THRESHOLD}°C, 停止溫度{TEMP_OFF_THRESHOLD}°C, 檢查間隔{CHECK_INTERVAL}秒) print(按 CtrlC 停止程序。) fan_is_on False # 記錄風(fēng)扇當(dāng)前狀態(tài) try: while True: temp get_cpu_temperature() if temp is None: time.sleep(CHECK_INTERVAL) continue # 根據(jù)溫度閾值和當(dāng)前狀態(tài)決定風(fēng)扇動作 if temp TEMP_ON_THRESHOLD and not fan_is_on: print(f[{time.strftime(%Y-%m-%d %H:%M:%S)}] 溫度{temp:.1f}°C - 風(fēng)扇啟動) control_fan(fan_line, True) fan_is_on True elif temp TEMP_OFF_THRESHOLD and fan_is_on: print(f[{time.strftime(%Y-%m-%d %H:%M:%S)}] 溫度{temp:.1f}°C - 風(fēng)扇停止) control_fan(fan_line, False) fan_is_on False # 如果溫度在中間區(qū)間則保持原狀態(tài)不變 time.sleep(CHECK_INTERVAL) except KeyboardInterrupt: pass # 信號處理器會處理退出 finally: # 最終清理 control_fan(fan_line, False) fan_line.release() chip.close() print(程序已退出風(fēng)扇已關(guān)閉。) if __name__ __main__: main()腳本關(guān)鍵點(diǎn)解析溫度讀取腳本從/sys/class/thermal/thermal_zone0/temp文件讀取CPU溫度。這是Linux系統(tǒng)通用的接口數(shù)值單位是毫攝氏度需要除以1000。雙閾值與滯后設(shè)置了TEMP_ON_THRESHOLD和TEMP_OFF_THRESHOLD兩個(gè)閾值。當(dāng)溫度高于55度時(shí)開啟風(fēng)扇但直到溫度降到48度以下才關(guān)閉。這個(gè)“滯后區(qū)間”非常重要可以避免風(fēng)扇在臨界溫度附近頻繁啟停稱為“振蕩”保護(hù)繼電器或MOS管也減少噪音。GPIO控制使用libgpiod庫以“消費(fèi)者”身份請求控制指定的GPIO線路并將其設(shè)置為輸出模式。set_value(1)輸出高電平打開風(fēng)扇。優(yōu)雅退出通過signal模塊捕獲CtrlC或系統(tǒng)終止信號。無論程序如何退出都會確保先將風(fēng)扇關(guān)閉并釋放GPIO資源這是一個(gè)良好的編程習(xí)慣防止程序崩潰后風(fēng)扇常轉(zhuǎn)。狀態(tài)記錄使用fan_is_on變量記錄風(fēng)扇當(dāng)前狀態(tài)避免在每次循環(huán)中都發(fā)送重復(fù)的開關(guān)指令。3.3 腳本測試與開機(jī)自啟動設(shè)置首先給腳本添加執(zhí)行權(quán)限并手動測試# 進(jìn)入腳本所在目錄 chmod x fan_control.py # 使用sudo運(yùn)行因?yàn)椴僮鱃PIO通常需要root權(quán)限 sudo python3 fan_control.py運(yùn)行后你應(yīng)該能看到啟動信息。用手觸摸CPU散熱片或用力壓CPU使其升溫小心燙傷或者運(yùn)行一個(gè)壓測命令如stress --cpu 4來快速提高溫度觀察腳本日志是否在溫度超過55度時(shí)打印“風(fēng)扇啟動”并且實(shí)際聽到風(fēng)扇開始轉(zhuǎn)動。停止壓測后溫度下降風(fēng)扇應(yīng)在低于48度時(shí)停止。測試無誤后我們需要讓這個(gè)腳本在系統(tǒng)啟動時(shí)自動在后臺運(yùn)行。這里使用Systemd服務(wù)來實(shí)現(xiàn)這是最規(guī)范、最可靠的方式。創(chuàng)建Systemd服務(wù)文件sudo nano /etc/systemd/system/fan-control.service寫入以下內(nèi)容請根據(jù)你的實(shí)際路徑修改ExecStart[Unit] DescriptionOrange Pi Zero 3 Fan Control Service Aftermulti-user.target [Service] Typesimple ExecStart/usr/bin/python3 /home/orangepi/fan_control.py WorkingDirectory/home/orangepi Restartalways RestartSec10 Userroot [Install] WantedBymulti-user.targetExecStart: 指定python3解釋器的完整路徑和你的腳本完整路徑。Restartalways: 確保服務(wù)意外退出時(shí)會自動重啟。Userroot: 因?yàn)椴僮鱃PIO需要root權(quán)限。啟用并啟動服務(wù)sudo systemctl daemon-reload # 重新加載systemd配置 sudo systemctl enable fan-control.service # 啟用開機(jī)自啟 sudo systemctl start fan-control.service # 立即啟動服務(wù) sudo systemctl status fan-control.service # 查看服務(wù)狀態(tài)如果狀態(tài)顯示為active (running)并且用journalctl -u fan-control.service -f命令能看到腳本輸出的日志說明服務(wù)已成功在后臺運(yùn)行。重啟香橙派風(fēng)扇控制服務(wù)也會自動啟動。4. 高級優(yōu)化與故障排查指南4.1 性能優(yōu)化與功能擴(kuò)展基礎(chǔ)功能實(shí)現(xiàn)后我們可以讓這個(gè)小系統(tǒng)變得更聰明、更安靜。PWM無級調(diào)速目前是簡單的開關(guān)控制風(fēng)扇只有“開”和“關(guān)”兩種狀態(tài)。我們可以利用GPIO的PWM脈沖寬度調(diào)制功能讓風(fēng)扇轉(zhuǎn)速隨溫度線性變化。這需要硬件MOS管支持PWM并且軟件上使用支持PWM輸出的庫如gpiod也支持。通過改變PWM的占空比0%-100%可以平滑地控制風(fēng)扇轉(zhuǎn)速在低溫時(shí)低速運(yùn)轉(zhuǎn)進(jìn)一步降低噪音。代碼邏輯會復(fù)雜一些需要將溫度映射到一個(gè)PWM占空比上。溫度數(shù)據(jù)平滑處理從傳感器讀取的溫度可能有微小波動。我們可以采用移動平均或低通濾波算法對連續(xù)幾次讀取的溫度值進(jìn)行處理得到一個(gè)更平滑的溫度曲線再用這個(gè)平滑后的溫度去決策可以使控制更加穩(wěn)定。更豐富的日志與監(jiān)控將溫度日志和風(fēng)扇動作記錄寫入文件或者通過Web界面用Flask等框架搭建一個(gè)簡單的本地頁面實(shí)時(shí)查看系統(tǒng)溫度和風(fēng)扇狀態(tài)甚至遠(yuǎn)程修改閾值。多溫度源與策略除了CPU溫度還可以讀取主板其他傳感器的溫度如果有綜合判斷?;蛘咴O(shè)置更復(fù)雜的策略例如輕載時(shí)即使溫度稍高也延遲啟動風(fēng)扇重載時(shí)則提前啟動或提高轉(zhuǎn)速。4.2 常見問題與解決方案速查表在實(shí)際操作中你可能會遇到以下問題。這里我整理了一個(gè)排查清單問題現(xiàn)象可能原因排查步驟與解決方案風(fēng)扇完全不轉(zhuǎn)1. 供電問題2. 控制信號問題3. 風(fēng)扇或MOS管損壞1.查電源用萬用表測量風(fēng)扇紅線接5V和黑線接MOS管D極之間電壓上電時(shí)應(yīng)為5V。若無檢查5V和GND接線。2.查信號運(yùn)行腳本并強(qiáng)制打開風(fēng)扇臨時(shí)修改腳本用萬用表測量GPIO引腳或電阻與MOS管G極連接點(diǎn)對地電壓應(yīng)為3.3V左右。若無檢查GPIO編號、腳本權(quán)限、libgpiod安裝。3.查MOS管在風(fēng)扇該轉(zhuǎn)時(shí)測量MOS管的D極和S極之間電壓應(yīng)接近0V導(dǎo)通。若為5V則MOS管未導(dǎo)通檢查G極電壓或更換MOS管。4.直接測試風(fēng)扇將風(fēng)扇直接接5V和GND看是否轉(zhuǎn)動排除風(fēng)扇本身故障。風(fēng)扇常轉(zhuǎn)不受控制1. MOS管擊穿短路2. GPIO引腳模式錯(cuò)誤或始終輸出高電平3. 電路接錯(cuò)如風(fēng)扇負(fù)極直接接了GND1. 斷電用萬用表二極管檔測量MOS管的D極和S極之間是否雙向?qū)?。好的MOS管在不通電時(shí)D-S間應(yīng)不導(dǎo)通除體二極管。若導(dǎo)通則MOS管已損壞。2. 檢查腳本是否在啟動時(shí)正確將GPIO設(shè)置為輸出低電平。檢查Systemd服務(wù)日志看腳本是否正常運(yùn)行。3. 對照電路圖檢查風(fēng)扇黑線是否錯(cuò)誤地直接接到了GND而不是MOS管的D極。風(fēng)扇頻繁啟停振蕩溫度在閾值附近微小波動這是最主要的原因。增大TEMP_OFF_THRESHOLD和TEMP_ON_THRESHOLD之間的差值滯后區(qū)間例如從7度擴(kuò)大到10度?;蛘咴黾覥HECK_INTERVAL檢查間隔例如從5秒增加到10秒。腳本報(bào)權(quán)限錯(cuò)誤未使用root權(quán)限運(yùn)行GPIO操作需要root權(quán)限。確保使用sudo運(yùn)行腳本并且Systemd服務(wù)文件中的User設(shè)置為root。讀取溫度失敗溫度傳感器路徑不同嘗試查看/sys/class/thermal/目錄下是否有其他thermal_zone如thermal_zone1?;蛘呤褂胹ensors命令需安裝lm-sensors包來檢測可用傳感器??刂朴醒舆t或不靈敏檢查間隔設(shè)置過長適當(dāng)縮短CHECK_INTERVAL例如設(shè)置為2秒。但注意不要過短如小于1秒以免增加不必要的CPU開銷。4.3 噪音與散熱效果平衡心得最后分享一點(diǎn)關(guān)于風(fēng)扇選型和閾值設(shè)置的經(jīng)驗(yàn)。風(fēng)扇選型如果追求極致靜音可以考慮購買標(biāo)稱“靜音”或“液壓軸承”的風(fēng)扇這類風(fēng)扇在相同風(fēng)量下噪音更低。尺寸上在機(jī)殼空間允許的情況下選擇更大尺寸如4020甚至5010的風(fēng)扇可以在更低轉(zhuǎn)速下提供相同風(fēng)量從而噪音更小。風(fēng)道設(shè)計(jì)我采用的是“抽風(fēng)”方式。另一種思路是“吹風(fēng)”將風(fēng)扇安裝在側(cè)面向CPU吹風(fēng)。實(shí)測在咱們這種小型密閉亞克力殼子里抽風(fēng)效果往往更好因?yàn)樗軐⒄麄€(gè)板卡區(qū)域的熱空氣快速排出形成負(fù)壓讓外部冷空氣從各個(gè)縫隙進(jìn)入。確保風(fēng)扇與散熱片之間沒有太大阻礙。閾值設(shè)定TEMP_ON_THRESHOLD不建議設(shè)得太低。香橙派Zero 3的CPU正常工作溫度在70-80度以下都是安全的。將啟動溫度設(shè)置在50-60度之間可以讓風(fēng)扇大部分時(shí)間處于關(guān)閉狀態(tài)實(shí)現(xiàn)靜音。我設(shè)置55度啟動48度停止在日常瀏覽網(wǎng)頁、看視頻等負(fù)載下風(fēng)扇幾乎不轉(zhuǎn)。只有當(dāng)我編譯軟件或者運(yùn)行一些計(jì)算任務(wù)時(shí)它才會啟動并且一旦負(fù)載下降溫度回落它又能很快關(guān)閉。最終效果經(jīng)過這番改造我的香橙派Zero 3在跑滿4個(gè)核心進(jìn)行壓力測試時(shí)最高溫度被牢牢壓制在65度以下而日常待機(jī)溫度在40-45度左右風(fēng)扇靜止完全無聲。這個(gè)自制的“智能空調(diào)”完美解決了散熱和噪音的矛盾讓這塊小板子可以更穩(wěn)定、更安靜地?fù)?dān)任家庭服務(wù)器、下載機(jī)或輕量級開發(fā)機(jī)的角色。整個(gè)項(xiàng)目成本極低主要花費(fèi)就是風(fēng)扇和外殼但帶來的體驗(yàn)提升是巨大的。如果你也遇到了類似的小設(shè)備散熱問題不妨試試這個(gè)方案。