三極體打造樹莓派溫控風扇
為了防止樹莓派長時間開機運轉溫度過高導致觸發過熱關機,很多人都給裝了散熱風扇,但某寶買的風扇插上之後是隨著開機一直運轉的,不能隨溫度變化而自動開閉,很多時候做無用功浪費電且產生噪音。本文將以一個硬體小白的程式員視角詳細講述如何用三極體擴充套件普通的樹莓派散熱風扇從而實現溫控功能。 在製作自己的溫控風扇前,本人也查閱了網上其他資料,最終選用了三極體方案,在接線方式中選擇了自制杜邦線連線三極體和風扇,這樣的好處是線材的長度可以隨自己需要裁剪,而且可以輕鬆塞進樹莓派的外殼中。全程無焊接,以後不用也可方便拆卸線材、杜邦頭、三極體元件等用作其他用途。
準備材料
以下材料均可某寶購買,為了省事其中杜邦頭和杜邦膠殼是買的套件,一盒裡邊有公母端子各200個,以及各種型別的膠殼。
1.樹莓派散熱風扇
2.尖嘴鉗:用來剝線和壓線
3.導線
4.杜邦端子:母端子6個,公端子2個
5.杜邦膠殼:1P1個,2P2個,3P一個(非必須)
6.三極體S8550
第一步:製作杜邦線
杜邦線:電子行業杜邦線可用於實驗板的引腳擴充套件,增加實驗專案等。可以非常牢靠地和插針連線,無需焊接,可以快速進行電路試驗。
杜邦端子:分為兩種,公端子和母端子。
杜邦膠殼:按照可封裝的端子數,可插一個端子的為1P,可插兩個端子的為2P,四個端子以上的按照排列分為單排XP或雙排XP,例如單排4P為可插端子都排列成一排,雙排4P為可插端子分為兩排,每排兩個端子。
上圖:
以上簡介如須詳細瞭解請自行搜尋相關資料。
此處需要製作4跟杜邦線:
其中兩根杜邦線兩頭都帶母端子(簡稱母對母)。一根用於接三極體基極到到主機板GPIO14引腳上,另一根用於接三極體集電極到主機板地線引腳上。
剩餘兩根公對母杜邦線,其中一根公端子插風扇正極(紅線)母端子,另一頭母端子插主機板正極,另外一根公端子插風扇負極(黑線)母端子,另一頭母端子接三極體發射集上。
本人買的導線為單銅芯導線(外徑0.58mm),後來發現製作一根杜邦線僅用一根導線會卡不牢固,容易發生導線與杜邦端子脫落,因此每跟杜邦線都是由兩根單銅芯導線組成,因此本處需要裁剪8根導線。
1.剪8根導線,每根導線長度大約7cm。
2.剝線,用尖嘴鉗將導線兩端分別露出約1cm銅芯。
3.擰線(此處如果買的導線較粗,請略過這一步),將兩根導線並排,分別將兩端外露銅芯用尖嘴鉗擰在一起。因為外露銅芯較細為了防止接觸不良,我將外露銅芯反覆摺疊了兩次並擰緊,實際導線外露的長度大概2.5mm左右。
4.壓線,將導線外露銅芯壓入杜邦端子中,由於手頭沒有專門的壓線鉗,此步驟也用尖嘴鉗完成。成品見圖:
注意:
如果買的導線較粗1cm左右,只需剪4根即可。(但如果太粗的話可能塞不進端子裡邊),另外剝線時導線兩端只要露出大概2-3mm左右即可
第二步:用膠殼封裝杜邦端子(不用膠殼的這一步可以略過)
第三步:接線
第四步:寫驅動程式
執行驅動指令碼前需要安裝相關依賴yum install -y python-devel,以及RPi.GPIO模組
wget ofollow,noindex" target="_blank">https://jaist.dl.sourceforge....
附上驅動程式碼:
#!/usr/bin/python2 import sys import time try: import RPi.GPIO as GPIO except RuntimeError: print("Error importing RPi.GPIO!This is probably because you need superuser privileges.You can achieve this by using 'sudo' to run your script") def cpu_temp(): with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f: return float(f.read())/1000 def main(): channel = 14 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # open air fan first GPIO.setup(channel, GPIO.OUT, initial=GPIO.LOW) is_close = False while True: temp = cpu_temp() if is_close == True: if temp > 50.0: print time.ctime(), temp, 'open air fan' GPIO.output(channel, GPIO.LOW) is_close = False else: if temp < 45.0: print time.ctime(), temp, 'close air fan' GPIO.output(channel, GPIO.HIGH) is_close = True time.sleep(15.0) #print time.ctime(), temp, is_close if __name__ == '__main__': main()
注意:因為這裡使用的三極體為PNP型三極體,基極施加低電平時才導通電路,如果是用的NPN型三極體則與之相反。
本人的啟動指令碼:nohup python -u /usr/local/bin/tempctl.py >/usr/local/bin/tempctl.log 2>&1 &
如有需要可自己註冊為服務並設定開機自啟,這裡不再贅述。
最終成果: