我平時試程式或其他Linux service , 都會用 orange pi zore 安裝 armbian 作為 server , 但這板子有點燙 , 所以我就想用板上的 GPIO 上的 5V , 推動5V風扇用作散熱
把風扇直接接上 pin4 正極 及 pin6 接地 , 風扇就會轉動 , 但在家中安靜時風扇的噪音有點大
所以我就想用温度控制風扇的開關 , 減少噪音的時間, 但兩腳的風扇開關只能用通電及斷電來控制 .
我可以選擇 “三極管” 或 “MOS管” 來作開關 , 我手頭上有些 A2SHB N-MOS , 所以我今次用 MOS管 做示範 .
以我所理解 MOS管用電壓來控制開關 , 三極管用電流控制開關 . 如果想詳細了解可以上網找相關內容, 我提供一個給大家參考
URL = 用理论告诉你 三极管和MOS管的区别在哪-KIA MOS管 (kiaic.com)
今次我用的 MOS 是 SI2302 印有 A2SHB 字樣 (好細粒)
想了解一吓 MOS 管原理, 所以看看以下 youtube 視頻
我的構想圖如下:
不是每款MOS管的 vgs(th) 都是 1.2V , 我手上的 SI2302 的 vgs(th) 是1.2V 就能打開MOS管, 其他型號你要上網找找 vgs(th) 參數
好了我們開始實作吧 , 先把細小的 A2SHB 焊在電路板固定 , MOS管D極焊同風扇負極接上 , MOS管S極同 GPIO (GND) 焊上 , MOS管G極同GPIO控制端口接上(我用了pin8 作為控制端口)
記住 orangepi zero pin 4 正極 , pin 6 負極 , 我用 pin 7 控制風扇
把風扇控制板與 orangepi zero 連接後, 以下就來寫控制風扇的程序了 !
我的 orangepi 是行 armbian linux , 所以我的程序會用 python 3.x 所寫 , 先用 python 的安裝程式 pip , 裝上 OPi.GPIO library
https://pypi.org/project/OPi.GPIO/
下載 onoff_fan.zip 內有 onoff_fan.py 程序
稍微講解程序內一些段落
稍微講解程序內一些段落
def get_temp():
with open(‘/sys/class/thermal/thermal_zone0/temp’) as fp:
return int(fp.read()) // 1000
這一段定義 get_temp() function , 內容是讀取系統內CPU溫度的數據 , 之後 result 時把數據 / 1000 , 就會得出我們平時多少 XX 度了
#循環開始
while True:
#CALL function 讀取溫度數據
cputemp = get_temp()
#判斷溫度是否低於我們設定風扇停轉的數值, 如果 “TRUE” 就把 pin7 輸出設定為低電壓, MOS 管截止 , 風扇迴路成為開路, 沒有電流流過而停轉
if cputemp < stop_temp_value:
GPIO.output(FAN_PIN, GPIO.LOW)
#判斷溫度是否高於我們設定風扇開啟的數值, 如果 “TRUE” 就把 pin7 輸出設定為高電壓, MOS 管導通 , 風扇迴路成為閉路, 有電流流過而轉動
elif cputemp > start_temp_value:
GPIO.output(FAN_PIN, GPIO.HIGH)
#程序暫停10秒才進入下一個循環
time.sleep(10)