爲了防止樹莓派長時間開機運轉溫度太高致使觸發過熱關機,不少人都給裝了散熱風扇,但某寶買的風扇插上以後是隨着開機一直運轉的,不能隨溫度變化而自動開閉,不少時候作無用功浪費電且產生噪音。本文將以一個硬件小白的程序員視角詳細講述如何用三極管擴展普通的樹莓派散熱風扇從而實現溫控功能。python
在製做本身的溫控風扇前,本人也查閱了網上其餘資料,最終選用了三極管方案,在接線方式中選擇了自制杜邦線鏈接三極管和風扇,這樣的好處是線材的長度能夠隨本身須要裁剪,並且能夠輕鬆塞進樹莓派的外殼中。全程無焊接,之後不用也可方便拆卸線材、杜邦頭、三極管元件等用做其餘用途。程序員
準備材料
如下材料都可某寶購買,爲了省事其中杜邦頭和杜邦膠殼是買的套件,一盒裏邊有公母端子各200個,以及各類類型的膠殼。
1.樹莓派散熱風扇
2.尖嘴鉗:用來剝線和壓線
3.導線
4.杜邦端子:母端子6個,公端子2個
5.杜邦膠殼:1P1個,2P2個,3P一個(非必須)
6.三極管S8550this
第一步:製做杜邦線
杜邦線:電子行業杜邦線可用於實驗板的引腳擴展,增長實驗項目等。能夠很是牢靠地和插針鏈接,無需焊接,能夠快速進行電路試驗。
杜邦端子:分爲兩種,公端子和母端子。
杜邦膠殼:按照可封裝的端子數,可插一個端子的爲1P,可插兩個端子的爲2P,四個端子以上的按照排列分爲單排XP或雙排XP,例如單排4P爲可插端子都排列成一排,雙排4P爲可插端子分爲兩排,每排兩個端子。
上圖:spa
以上簡介如須詳細瞭解請自行搜索相關資料。.net
此處須要製做4跟杜邦線:
其中兩根杜邦線兩頭都帶母端子(簡稱母對母)。一根用於接三極管基極到到主板GPIO14引腳上,另外一根用於接三極管集電極到主板地線引腳上。
剩餘兩根公對母杜邦線,其中一根公端子插風扇正極(紅線)母端子,另外一頭母端子插主板正極,另一根公端子插風扇負極(黑線)母端子,另外一頭母端子接三極管發射集上。code
本人買的導線爲單銅芯導線(外徑0.58mm),後來發現製做一根杜邦線僅用一根導線會卡不牢固,容易發生導線與杜邦端子脫落,所以每跟杜邦線都是由兩根單銅芯導線組成,所以本處須要裁剪8根導線。
1.剪8根導線,每根導線長度大約7cm。
2.剝線,用尖嘴鉗將導線兩端分別露出約1cm銅芯。
3.擰線(此處若是買的導線較粗,請略過這一步),將兩根導線並排,分別將兩端外露銅芯用尖嘴鉗擰在一塊兒。由於外露銅芯較細爲了防止接觸不良,我將外露銅芯反覆摺疊了兩次並擰緊,實際導線外露的長度大概2.5mm左右。
4.壓線,將導線外露銅芯壓入杜邦端子中,因爲手頭沒有專門的壓線鉗,此步驟也用尖嘴鉗完成。成品見圖:
注意:
若是買的導線較粗1cm左右,只需剪4根便可。(但若是太粗的話可能塞不進端子裏邊),另外剝線時導線兩端只要露出大概2-3mm左右便可blog
第二步:用膠殼封裝杜邦端子(不用膠殼的這一步能夠略過)圖片
第三步:接線ip
第四步:寫驅動程序
執行驅動腳本前須要安裝相關依賴yum install -y python-devel,以及RPi.GPIO模塊
wget https://jaist.dl.sourceforge....get
附上驅動代碼:
#!/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 &
若有須要可本身註冊爲服務並設置開機自啓,這裏再也不贅述。
最終成果: