這個項(xiàng)目的目標(biāo)是建造一個物聯(lián)網(wǎng)風(fēng)格的電動寵物門,這樣我們就可以控制哪些動物可以進(jìn)入房子。為此,我們使用附著在動物(貓)上的BLE標(biāo)簽和RaspberryPi3上的內(nèi)置藍(lán)牙模塊來掃描標(biāo)簽。同時(shí)我們還在RaspberryPi3上配備了一些LED指示燈,用于對門應(yīng)該處于的狀態(tài)進(jìn)行故障排除。
Node-REDBLEScan節(jié)點(diǎn)持續(xù)掃描BLE廣告。如果它看到與設(shè)備名稱和最小RSSI匹配的設(shè)備,它將打開寵物門,并在超時(shí)后關(guān)閉門。為了防止門在緩慢移動的動物身上過早關(guān)閉,系統(tǒng)將在獲得BLE匹配時(shí)重置計(jì)時(shí)器。
這個項(xiàng)目有幾個不同的部分:
硬件:操縱門所需的所有布線和組件
軟件:決定門應(yīng)該向哪個方向移動的所有邏輯。
硬件
門的打開和關(guān)閉由一個12VDC電動汽車天線完成,該天線倒置安裝在門上方,天線的末端連接到門本身。并帶有一個電路,可以對其進(jìn)行逆向工程以控制天線,但我們在這里不通過這種方式,因此您需要將電路撕掉并直接使用電機(jī)線。
要驅(qū)動天線電機(jī),您很可能需要至少1A的12V電源。我使用了一個舊的D-Link路由器電源:
您需要在門上安裝兩個限位開關(guān)以停止兩端的電機(jī)。我使用了磁性開關(guān),因?yàn)檫@是我手頭有的現(xiàn)成的東西,但是帶有杠桿臂的標(biāo)準(zhǔn)開關(guān)會更好。
根據(jù)下圖組裝H橋PiHat,注意二極管的方向;這是限制電路。使用的H橋是雙通道的,但我們現(xiàn)在只使用一個。如圖所示,電機(jī)、開關(guān)和12VDC輸入將連接到PiHat。
根據(jù)下圖組裝LEDPiHat。藍(lán)色LED需要的電流比Pi能夠通過GPIO可靠提供的電流多一點(diǎn),因此我們從5V線路為所有LED供電,并使用連接到GPIO的晶體管來切換它們。
軟件
該項(xiàng)目的軟件只是在標(biāo)準(zhǔn)Raspbian安裝上運(yùn)行的Node-RED。大多數(shù)邏輯都是使用帶有RPi版本node-red的標(biāo)準(zhǔn)節(jié)點(diǎn)處理的,但BLE掃描儀除外,它需要來自node-red-contrib-noble的“scanble”節(jié)點(diǎn)。按照以下鏈接中的說明設(shè)置組件:
安裝Raspbian
安裝Node-RED
安裝node-red-contrib-noble
在一切都安裝并工作后,繼續(xù)配置您的Node-RED流程,使其看起來像這樣:
我們的流程入口點(diǎn)是“scanble”節(jié)點(diǎn);確保選中該框以允許重復(fù)。
之后添加一個“function”節(jié)點(diǎn)來根據(jù)“l(fā)ocalname”屬性過濾BLE廣告;我使用了使用“Tile”作為本地名稱的TileTracker標(biāo)簽。
接下來是一個“切換”節(jié)點(diǎn),用于檢查廣告的RSSI。您需要調(diào)整此設(shè)置以匹配標(biāo)簽和開門距離。
然后,您可以添加另一個“開關(guān)”節(jié)點(diǎn)來根據(jù)標(biāo)簽的唯一ID過濾標(biāo)簽,這樣它就不會在門附近的其他標(biāo)簽上觸發(fā)。如果您還不知道唯一ID,您可以使用“scanble”節(jié)點(diǎn)上的調(diào)試節(jié)點(diǎn)來查看廣告并嘗試查看哪個是您的。設(shè)置第一條規(guī)則匹配一個空UUID并且不連接輸出;這將過濾掉一些垃圾廣告,為每個UUID添加附加規(guī)則。
為您在前一個節(jié)點(diǎn)中添加的每個規(guī)則添加一個“更改”節(jié)點(diǎn),并為其賦予一個唯一的“觸發(fā)源”值。這些節(jié)點(diǎn)不是必需的,但它們將使您能夠在將來對每個標(biāo)簽進(jìn)行額外的過濾,我用我的貓的名字作為來源。
接下來,我們需要通過將消息有效負(fù)載更改為1來告訴流的其余部分我們想要觸發(fā)門打開。將任何打開的觸發(fā)源連接到此節(jié)點(diǎn)。
現(xiàn)在這個觸發(fā)消息將做兩件事:觸發(fā)藍(lán)色LED閃爍以接收BLE數(shù)據(jù)包,并觸發(fā)門打開。
首先通過添加“觸發(fā)器”節(jié)點(diǎn)來設(shè)置LED路徑。將其設(shè)置為發(fā)送1,然后在500毫秒后發(fā)送0。這將導(dǎo)致LED僅閃爍一次。
到該節(jié)點(diǎn)連接一個“rpigpio”輸出節(jié)點(diǎn)并將其配置為藍(lán)色LEDGPIO。將其設(shè)置為初始化為0(關(guān)閉)狀態(tài)。
接下來是配置門觸發(fā)路徑。返回觸發(fā)有效負(fù)載節(jié)點(diǎn)并將“更改”節(jié)點(diǎn)與兩個輸出連接。一個輸出將路由到具有“1”有效負(fù)載的開放路徑,另一個將路由到具有“0”有效負(fù)載的關(guān)閉路徑。
這兩個輸出都將連接到同一個節(jié)點(diǎn),但打開的連接在路徑中有一個額外的觸發(fā)節(jié)點(diǎn),可以在超時(shí)后觸發(fā)關(guān)閉。添加“觸發(fā)”節(jié)點(diǎn)以發(fā)送“1”,然后在超時(shí)(15秒)后發(fā)送“0”。
然后將該觸發(fā)節(jié)點(diǎn)和前一個節(jié)點(diǎn)的第二個輸出連接到“功能”節(jié)點(diǎn)。此功能節(jié)點(diǎn)有兩個輸出連接到打開的GPIO節(jié)點(diǎn)和關(guān)閉的GPIO節(jié)點(diǎn)。由于您不希望門同時(shí)打開和關(guān)閉,因此它將向每個輸出發(fā)送相反的值。因此,如果觸發(fā)有效載荷為“1”表示打開,它將向打開的GPIO發(fā)送“1”,向關(guān)閉的GPIO發(fā)送“0”,如果有效載荷為“0”表示關(guān)閉,它將向打開的GPIO發(fā)送“0”和“1”到關(guān)閉的GPIO。
最后,將兩個GPIO節(jié)點(diǎn)連接到每個輸出:一個用于LED,一個用于H橋輸入。
這應(yīng)該對主要的Node-RED流程執(zhí)行此操作。此外,您應(yīng)該添加一個“注入”節(jié)點(diǎn)以自動“1”有效負(fù)載以在啟動時(shí)打開門,這樣流程就知道門處于哪個狀態(tài)。我還添加了一些手動注入節(jié)點(diǎn),用于通過Node-RED接口。
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44640瀏覽量
373438 -
藍(lán)牙模塊
+關(guān)注
關(guān)注
30文章
575瀏覽量
55738 -
樹莓派
+關(guān)注
關(guān)注
116文章
1707瀏覽量
105653
發(fā)布評論請先 登錄
相關(guān)推薦
評論