前言:當(dāng)需要樹莓派全速運行時(特別是還超頻的情況),樹莓派的發(fā)熱量往往會很大枣申,這時候我們可以給它加一個風(fēng)扇降溫茂契。但是我買了帶風(fēng)扇的外殼后,添加了風(fēng)扇后忆首,問題又來了--風(fēng)扇的聲音很大爱榔,特別是在晚上。所以我要做一個能自動監(jiān)測溫度雄卷,在高溫時開啟風(fēng)扇的搓蚪,在低溫時關(guān)掉風(fēng)扇的功能。
一丁鹉、準備材料:
樹莓派 風(fēng)扇一個妒潭,NPN三極管一個,線材數(shù)根
二揣钦、查閱資料
樹莓派的引腳圖雳灾,我們這次要使用的是引腳2,6和8(強迫癥患者可以選擇468)冯凹,樹莓派辨別引腳的方向是:平放桌面谎亩,usb出口方向?qū)χ约海藭r就可以對照下圖宇姚。
三極管PNP的引腳原理圖匈庭,我用的是圖T092封裝的三極管,三極管用作開關(guān)如圖所示浑劳,Vin是輸入電壓阱持,對應(yīng)第一幅圖,1接風(fēng)扇一端魔熏,2接控制電壓(引腳8)衷咽,****3接地(引腳6)鸽扁,風(fēng)扇的另一端接引腳2或4。
下圖是我接好的最終圖镶骗,如果有條件的話可以用熱熔膠固定一下桶现。
三、編程實現(xiàn)
我們可以在/sys/class/thermal/thermal_zone0/temp 這個文件中直接獲得cpu的溫度鼎姊,里面的數(shù)值除以1000骡和,就是攝氏度,python編程實現(xiàn)如下:
import RPi.GPIO as GPIO
import time
pin = 8 # 使用8號引腳
GPIO.setmode(GPIO.BOARD) # 使用BOARD引腳編號相寇,此外還有 GPIO.BCM
GPIO.setup(pin, GPIO.OUT) # 設(shè)置7號引腳輸出
running = 0 #設(shè)置一個變量記錄風(fēng)扇狀態(tài)即横,策略是:
#當(dāng)風(fēng)扇啟動時,要降溫到45度
def get_cup_tem():
with open("/sys/class/thermal/thermal_zone0/temp","r") as fp:
return int(fp.readline())/1000
while True:
if(get_cup_tem()>60):
GPIO.output(pin, GPIO.HIGH) ## 打開 GPIO 引腳(HIGH)
running = 1
elif running:
if(get_cup_tem()<45):
GPIO.output(pin, GPIO.LOW) ## 關(guān)閉 GPIO 引腳(LOW)
running = 0
time.sleep(5) #睡眠5s
四裆赵、總結(jié)
1东囚、對樹莓派的GPIO接口編程控制時,模式最好選擇BOARD模式战授,因為BCM模式對我們新手來說可能并不是太友好页藻。
GPIO.setmode(GPIO.BOARD)
2、我們不能直接控制風(fēng)扇植兰,而是要用一個三極管的原因:能夠控制高低電平的GPIO口的能輸出的電流很小份帐,并不足以驅(qū)動風(fēng)扇。
3楣导、如果你的風(fēng)扇能夠被3V的電源驅(qū)動废境,你也可以將引腳2換成引腳1。
4筒繁、樹莓派GPIO腳的一些知識:GND 接地噩凹;+5V 5V的直流電源;+3V3 3V的直流電源毡咏;GPIO+number 能夠被編程控制高低電平的驮宴,但電流不大
5、要斷電接線并且小心接線呕缭,接錯接口的話容易導(dǎo)致GPIO燒壞
6堵泽、加入開機啟動,可以將命令放進/etc/rc.local恢总,我的溫控程序路徑是:/home/fan_controller.py迎罗, 所以添加的命令如下:
python3 /home/fan_controller.py > /tmp/tem.log