樹莓派3B PNP三極體 智慧溫控風扇
我的樹莓派3B放在客廳,估計是長期磨損加上灰塵的原因,最近小散熱扇聲音特別大,逼得我必須做一個智慧風扇了。
大家也想做的話跟著我的步驟即可實現,不用再去網上研究各種細節問題了。
採購
杜邦線
為了避免焊接,我們要用杜邦線:
ofollow,noindex"> 杜邦線 母對母 公對母公對公40P彩色排線連線線10/15/30/20/40CM
大家把”公母”,”母母”,”公公”都買一下,以後都會用到的。
40P的意思就是40根,不是什麼連起來的意思,都可以拆成1根1根的用。
電阻
我們會在電路里串聯一個電阻降低電流,避免三極體發熱,大家照做即可:
Quason 1K 1/4W金屬膜電阻 1% 五色環0.25W 編帶裝100只1.5元
電阻是1K歐姆的。
三極體
三極體顧名思義有3個插頭,其中2個是走正負極電的,中間1個是GPIO控制三極體是否開關的,從而可以GPIO程式設計控制電流的流通與斷開,實現智慧風扇。
三極體 S9012 9012 PNP小功率電晶體 封裝TO-92 50只
大家一定要買PNP的,和我的教程才能完全吻合,型號照著買就行,我也是隨便選了一個小功率的,應該都能用。
硬體安裝
這是我的安裝結果:
先用杜邦線,把樹莓派的5V和風扇的紅線(正極)連到一起,這樣電就走到風扇正極了,但此時電路還沒接地,沒有電流通過。
再拿一個杜邦線,把風扇的黑線(負極)和三極體的e極(發射)接到一塊,這樣電就從風扇走到了三極體了。
這裡的問題就是三極體的3個針腳,哪個是e啊?
把扁平的一邊面向自己,照著圖看就行。
再拿一根杜邦線,把三極體的c極(集電)和樹莓派的GND地線接到一起,這樣電就流經三極體到達地面了,電通路就完整了。
此時風扇是不會轉的,因為PNP三極體預設是斷開的,除非給向它的b極(基極)輸出低電平,而樹莓派上的GPIO口就可以輸出高或者低電平。
但是別急,這裡咱不能讓b極直接接GPIO口,這樣執行的時候電流太大對三極體不好。
拿出一根杜邦線,再拿1個1k歐姆的電阻,把三極體b極和電阻接起來。
拿出一根杜邦線,把電阻另一頭和某個GPIO針腳連起來,我用的是18號GIPO針腳。
不知道GPIO引腳佈局? 看下圖:
現在三極體b極就和GPIO聯通了,並且中間有個電阻來降低電流。
整個硬體安裝結束,下圖是電路的一個示意圖:
連線的位置很鬆動,我用絕緣膠隨便纏了一下,因為杜邦線太長放不到外殼裡面了,所以就露在外面拉倒。
軟體
我們寫個常駐的程式,檢測樹莓派溫度,如果高於某個溫度就輸出低電平,三極體就通電了,否則輸出高電平,風扇就不轉了。
# -*- coding: utf-8 -*- from RPi import GPIO import time # 超過50度啟動 upper_temp = 50 # 低於40度關閉 lower_temp = 40 # 採用BCM引腳編號 GPIO.setmode(GPIO.BCM) # 關閉警告 GPIO.setwarnings(False) # 控制三級管的GPIO編號 channel = 18 # 初始GPIO輸出高電平, 風扇不轉 GPIO.setup(channel, GPIO.OUT, initial = GPIO.HIGH) # 獲取樹莓派溫度的函式 def get_temp(): with open('/sys/class/thermal/thermal_zone0/temp') as fp: return int(fp.read()) / 1000 # 進入檢測 try: while True: # 獲取當前溫度 temp = get_temp() # 如果大於上限, 則給低電平, 閉合三極體 if temp >= upper_temp: GPIO.output(channel, GPIO.LOW) elif temp < lower_temp: # 低於下限, 則給高電平, 斷開三極體 GPIO.output(channel, GPIO.HIGH) # 每隔10秒檢測1次 time.sleep(10) except Exception, e: print(e) # 重置GPIO狀態 GPIO.cleanup()
有問題歡迎留言交流,我不懂電路但我也一次成功了,說明還是很簡單的。