女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>車庫MC(監視器和控制器)開源分享

車庫MC(監視器和控制器)開源分享

2022-11-16 | zip | 1.25 MB | 次下載 | 免費

資料介紹

描述

我建造 Garage MC 是因為我想了解更多關于電子學的知識。作為獎勵,我想下次我出去讓車庫門開著時,它會節省我的屁股。

*我在 2021 年 1 月 6 日添加了一個更新,其中包含 OTA 更新和 MQTT 到 Home Assistant(詳情如下)*

我的目標

  • 能夠監控車庫門的狀態(關閉/半開/打開)。
  • 能夠用我的安卓手機(我的妻子用她的蘋果手機)控制(打開/關閉)車庫門。
  • 學習新東西。
  • 不花很多錢。

第 1 步:項目規劃

在這個項目之前,我從亞馬遜購買了一個兼容 Arduino 的入門套件。所以我是電子產品的初學者,只是學習繩索。但我確實受益于 15 年前做一些計算機編程,所以我能夠在 Arduino IDE 上快速學習 C++ 編碼。

車庫開門器:首先,我必須確定我是否可以輕松地將微控制器與我的 Liftmaster 車庫開門器連接起來。幸運的是,Liftmaster 使用兩條線在常開(認為是打開的開關)狀態下連接回壁掛式遙控器。當按下壁掛式遙控器上的按鈕時,它會通過“短路”電線并觸發門打開或關閉來短暫完成電路。哦,別忘了檢查這些電線上的電壓……Liftmaster 手冊上說這些電線大約是 20 伏(不是 120 伏),但您的設備可能會有所不同。

微控制器:接下來,我必須決定如何將 Garage MC 連接到互聯網。我最初考慮使用 ENC28J60 以太網板,雖然我更喜歡硬線連接,但將線路連接到我的路由器會比它的價值更麻煩。我研究了 wifi 板并決定使用 NodeMCU ESP8266,因為它們成本低且具有多個 GPIO 引腳。

手機應用程序:有多種方法可以通過手機連接到 NodeMCU,包括通過 SMS 消息、將 NodeMCU 用作 Web 服務器等。對我來說,使用 Blynk 應用程序是啟動和運行最簡單、最快捷的方式。

車庫門監控:我決定使用兩個霍爾效應傳感器來監控車庫門的位置。可能已經可以從 Liftmaster 單元獲取門的位置甚至行進方向。但是,如果有人拉動緊急釋放繩并手動打開門,傳感器仍會通知我門已打開。

第 2 步:開發

NodeMCU:我首先將 NodeMCU 插入面包板并通過 USB 連接到我的計算機為其供電。下面的鏈接有一個很好的教程,用于在 Arduino IDE 上初始設置 NodeMCU:

Blynk :接下來,我將 NodeMCU 連接到互聯網和手機上的 Blynk 應用程序。

面包板:是時候添加組件了。雖然我是在裝上所有組件后制作了 Fritzing 電路圖,但我在這里添加了它,以便更容易參考...

pYYBAGNy7hmAYpOfAAOkc328isA491.jpg
Garage MC - Fritzing 圖
?

項目代碼:我附上了我的項目的完整代碼。我試圖評論它,但如果有什么你不明白,或者我可以改進,請告訴我。我在教程中添加了一些小代碼片段來強調一些事情,例如:

  • 我使我的代碼非阻塞。這意味著它沒有“延遲()”語句(好吧,設置中有一個等待串行端口)。相反,我依賴于基于“SimpleTimer”庫的 Blynk 計時器。
poYBAGNy7h-AVugYAAqblz67eRE834.jpg
我的工作區
?

首先是繼電器(控制器):我使用的繼電器是一個單通道繼電器,觸發“LOW”以激活。繼電器需要 5 伏電壓,所以我使用 NodeMCU 上的 VIN 引腳為其供電。繼電器有兩個用途。

  • 首先是激活車庫門開啟器。這是通過將一根電線從車庫門開啟器連接到繼電器上的公共 (COM) 引腳來完成的。第二根線連接到繼電器上的 N/O(常開)引腳。當繼電器被觸發(300 毫秒)時,電路閉合。
  • 第二個目的是保護 NodeMCU 免受車庫門開啟器的 20 伏電線的影響,因為 NodeMCU 上的數字引腳只能承受 3.3 伏電壓。

我使用了兩個函數來觸發我的繼電器,使其無阻塞。在我的 Blynk 應用程序中按下按鈕時,它會調用一個函數來激活門。請注意,“ActivateDoor()”僅在按下按鈕時(上升 = 1)很重要,而不是在釋放按鈕時,否則您將激活門兩次。ActivateDoorRelay 函數將繼電器引腳設置為“LOW”,然后設置一個 300 毫秒的計時器,而不是使用“delay()”。然后定時器觸發第二個功能將引腳重置為“HIGH”以關閉繼電器。我正在檢查該州的原因

BLYNK_WRITE(V10) {
    if (param.asInt()) {  // only do it on button "rising=1"
        ActivateDoor();     // trigger the door
    }
}

void ActivateDoor() {
    activateState = garageState; // get garage state when the button was pressed
    long songLength = PlaySong(); // Play a song
    // Wait for the song to finish, then activate the relay
    myTimer.setTimeout(songLength, ActivateDoorRelay);
}

void ActivateDoorRelay() {
    // only trigger the relay if the state hasn't changed since the button press
    if (garageState == activateState) {
        digitalWrite(RELAY1_PIN, LOW); // trigger the relay to activate the door
        myTimer.setTimeout(300, ActivateDoorRelayReset);  // Wait 300ms
    }
}

void ActivateDoorRelayReset() {
    digitalWrite(RELAY1_PIN, HIGH);  // Deactivate the door relay
    Blynk.virtualWrite(V10, 0);  // Reset the Blynk app switch
}

霍爾效應傳感器(監視器):霍爾效應傳感器監控車庫門的位置。傳感器是非鎖定的并且是數字的(它可以感應或不感應磁鐵;模擬輸出傳感器將測量磁鐵的強度)。我在車庫門上使用了兩個釹磁鐵(一起使它們更堅固)來觸發傳感器。我有一些 CAT6 電纜,所以我將它從車庫天花板上的 NodeMCU 連接到每個霍爾傳感器。車庫門可以處于三種狀態之一(因為我不在乎門的移動方向):

  • 關閉:門關閉位置的霍爾效應傳感器由磁鐵激活。
  • 打開:門打開位置的霍爾效應傳感器由磁鐵激活。
  • 半開:霍爾效應傳感器均未激活。因此,門可以在打開位置移動或停止。
pYYBAGNy7iOAPr5qAAOaMxMu5Gk722.jpg
霍爾效應傳感器(距磁鐵約 2 厘米)
?

我不喜歡輪詢事件的發生。因此,霍爾傳感器使用“中斷”來指示狀態變化(例如門關閉移動)。中斷就是當霍爾傳感器發生狀態變化時,它會中斷程序代碼以立即運行一個短函數。

// Interrupt Declarations
// ESP boards need ICACHE_RAM_ATTR included
void ICACHE_RAM_ATTR InterruptDoorClosed();
void ICACHE_RAM_ATTR InterruptDoorOpen();

// this is only a snippet from the "setup" function
void setup() {
  // Interrupts set for the two hall sensors activated on a CHANGE of state
  // the Hall sensors require a pullup resistor, I used the internal pullup
  pinMode(HALL_CLOSED_PIN,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(HALL_CLOSED_PIN), InterruptDoorClosed, CHANGE);
  pinMode(HALL_OPEN_PIN,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(HALL_OPEN_PIN), InterruptDoorOpen, CHANGE);
}

// Interrupt for the Hall Sensor at the Door CLOSED point
// activated on CHANGE and Sets a timer to immediately CheckGarageState
void InterruptDoorClosed() {
    hallClosedState = digitalRead(HALL_CLOSED_PIN); // get the sensor state
    myTimer.setTimeout(10, GarageStateChanged); // run the function in 10ms
}
// Interrupt for the Hall Sensor at the Door OPEN point
// activated on CHANGE and Sets a timer to immediately CheckGarageState
void InterruptDoorOpen() {
    hallOpenState = digitalRead(HALL_OPEN_PIN); // get the sensor state
    myTimer.setTimeout(10, GarageStateChanged); // run the function in 10ms
}

被動壓電蜂鳴器:當門被遠程激活(使用 Blynk 應用程序)時,我想提醒車庫里的任何人門即將移動。所以我加了一個蜂鳴器來播放一首短歌。我在電路中添加了一個 100 歐姆的電阻,盡管我不確定是否有必要。我還讓這首歌不阻塞。盡管這需要我獲得歌曲的長度,所以我在完成之前不會激活門。

LED :最后,我添加了兩個 LED,一個綠色和一個紅色。每個 LED 在其電路中都需要一個 220 歐姆的電阻器。綠色 LED 表示 Garage MC 已連接到 Blynk 服務器。紅色 LED 表示 Garage MC 已失去連接。

我的編程流程:如果您通常不在代碼中使用計時器,我的程序流程可能難以掌握。它基本上是這樣工作的:

  • setup() 函數將計時器設置為:1。檢查互聯網connection.2。檢查車庫門的狀態 (CheckGarageState),如果門打開時間過長,它會更新 Blynk 應用程序并向 Blynk 發送通知。
  • loop() 函數使計時器保持運行。
  • 當車庫門的狀態發生變化(關閉到打開)時,會觸發中斷。中斷標記狀態更改,然后設置即時計時器(10 毫秒)來檢查車庫門的狀態 (CheckGarageState),從而更新 Blynk 應用程序。

第 3 組:是時候把它放在一起并連接起來了

我希望 Garage MC 看起來是半專業的,所以我決定將所有組件安裝在 Perfboard 上(帶有預鉆孔的單個銅墊)。有了這個,我必須學習如何焊接。這不一定是困難的,但可能很難做好。

案例:一臺 3D 打印機我兒子的圣誕清單上。希望圣誕老人能通過,因為我也想使用它。事實證明,我有一個舊的 Chamberlain myQ(現在是“Merlin”),我將它拆開、切割和鉆孔,然后把它變成一個項目案例。我認為結果沒問題,即使繼電器伸出底部。

Perfboard :根據機箱的大小,我選擇了適合機箱的 perfboard,并且幾乎適合 NodeMCU。正如您在我的圖表中看到的那樣,每側的頂部引腳不適合(D0 和 A0),但無論如何我都沒有使用它們。我沒有刪除它們,它們只是沒有連接到任何東西。

poYBAGNy7iqANR9jAAI9QIxLka0609.jpg
穿孔板布局
?

我在 Perfboard 上焊接了兩個插頭引腳(16 個引腳長,但 NodeMCU 每側有 15 個引腳)。因此,NodeMCU 位于底部的 15 個引腳上。我主要在 Perfboard 底部焊接連接線(有幾個例外)和頂部的組件。長話短說……

并將其安裝在車庫門開啟器上方的車庫中(黃色 CAT6 電纜通過門軌連接到霍爾傳感器)..

電源:天花板上有一個用于 Liftmaster 開啟器的電源插座。所以我決定讓事情變得簡單。我插入了舊的黑莓手機充電器并使用舊的 USB 電纜為 Garage MC 供電。

我會做些什么不同的事情?

我實際上對我的最終結果很滿意。但是我會做一些改變:

  • 我將霍爾效應傳感器的螺絲連接器彼此相對放置,認為我很聰明并且節省空間。這使得將 CAT6 電纜的電線完美彎曲到位變得困難。下次我肯定會采取直接的方法,并將連接器并排放置。
  • 完成 - 我正在考慮添加通過無線 (OTA) 更新我的代碼的功能,這樣我就不必拿出我的梯子來進行更改。

V1.1 更新

在 Covid 呆在家里的圣誕假期期間,我開始學習和設置 Home Assistant。因此,我決定讓 Garage MC 報告回來并由 Home Assistant 控制。因此,我決定對我的代碼進行以下更改:添加 OTA 更新,并添加 MQTT 以與 Home Assistant 通信。

OTA 更新

這是我自 10 月以來對 Garage MC 所做的第一次更新,因為坦率地說,它不需要更新。但是,爬梯子進行更新很痛苦,所以我實施了 OTA 更新。

poYBAGNy7jiAH2OSAAC6hFMSydc445.png
Blynk 應用程序的小更新以打開/關閉 OTA 更新
?

我在我的 Blynk 應用程序中添加了一個開關,以便打開和關閉 OTA 更新,因為我不希望它一直運行。接下來,我添加了#include 庫。

我添加了一個 MD5 散列密碼,一個超時(關閉更新過程以防我忘記),并讓 LED 閃爍,這樣我就知道 GarageMC 處于“更新模式”。全局變量如下:

// OTA variables
#define CLIENT_NAME   "GarageMC"  // For MQTT topics, MQTT Client ID, and ArduinoOTA
const char ota_pass[]           = SECRET_OTA_PWD;
const unsigned long OTA_TIMEOUT = 600000;  // Turn off OTA after 10 min. if no update
unsigned long otaTimeout        = 0;        // End time for OTA = millis()+OTA_TIMEOUT
bool otaOn                      = false;    // set to "true" to turn on OTA updates
const int OTA_BLINK_DELAY       = 300;      // blink the leds while OTA is ON
unsigned long otaBlinkTimer     = 0;        // next led blink time

在 setup() 中,我按如下方式初始化 OTA:

ArduinoOTA.setHostname(CLIENT_NAME);
ArduinoOTA.setPasswordHash(ota_pass);
ArduinoOTA.onStart([]() {
    DEBUG_PRINTLN("OTA Starting update");
    digitalWrite(WIFI_ON_PIN, true);
    digitalWrite(WIFI_OFF_PIN, true);
});
ArduinoOTA.onEnd([]() {
    DEBUG_PRINTLN("OTA Finished");
});

我的主循環已更新,因此如果打開 OTA 更新,其他一切都會停止(我發現如果 Blynk 仍在運行,更新會很慢或失敗)。

if (otaOn) {
    ArduinoOTA.handle();
    if (millis() > otaTimeout) {  // timeout if no upload, then restart
        ESP.restart();
    }
    // blink the red and green leds while OTA is on
    if (millis() > otaBlinkTimer) {
        SetWifiLeds(!digitalRead(WIFI_ON_PIN));
        otaBlinkTimer = millis() + OTA_BLINK_DELAY;
    }
} else {
    if (Blynk.connected()) {Blynk.run();} // run Blynk if it's connected
    myTimer.run();                        // Blynk Events Timer (run either way)
    // MQTT - loop or reconnect if needed
    mqttLoop();
}

最后,當我在 Blynk 應用程序中撥動開關時,它會向虛擬引腳 V0 發送一條消息(off=1 和 on =2,但我希望它是一個布爾值):

BLYNK_WRITE(V0) {
    otaOn = param.asInt() - 1;
    DEBUG_PRINTLN((String)"V0: " + otaOn);
    if (otaOn) {                            // OTA turned ON
        otaTimeout = millis() + OTA_TIMEOUT;  // Timeout end time
        ArduinoOTA.begin();                   // Start the OTA service
    } else {                                // OTA turned OFF
        ESP.restart();              // Restart to turn stop ArduinoOTA service
    }
}

從 Arduino IDE 處理 OTA 更新所需的一切。我喜歡這樣一個事實,除非我通過撥動 Blynk 中的開關來采取行動,否則它不會運行。

MQTT 到家庭助理

我不會進入家庭助理,因為我只是在學習它。但我建議在 YouTube 上搜索 JuanMTech。而且我只是幾乎不了解 MQTT,所以在那里也不會有太大幫助。我使用了流行的#include 庫。詳細信息可以在我的完整代碼中找到。但基本上,作為客戶端,您連接到 Home Assistant 上的 MQTT 代理。您將更新“發布”到 MQTT 代理,并“訂閱”您希望通過“回調”函數接收更新的主題。

最簡單的方法是連接到 MQTT 代理:

// subscribe to the control topic which can "activate" the garage door (open/close)
const char topicGarageControl[] = CLIENT_NAME"/control";
// publish to the state topics, the state of the door
const char topicGarageState[]   = CLIENT_NAME"/state";

WiFiClient espClient;
PubSubClient client(espClient);    // client for connection to MQTT broker
client.setServer(mqtt_server, mqtt_port);    // server to connect to
client.setCallback(callback);    // the "callback" function for subscribed topics
client.connect(mqtt_client_name, mqtt_user, mqtt_pass);    // connect to MQTT broker

// after connecting, subscribe to topics you want
client.subscribe(topicGarageControl);

當車庫門狀態發生變化(open->ajar->closed)時,我將更改發布到 Home Assistant:

// topic = CLIENT_NAME/state
// payload = door state (open/ajar/closed)
client.publish(topic.c_str(), payload.c_str(), retain);

到目前為止,一切都很好。現在我只需要找出 Home Assistant 來處理數據!

最后的評論

我故意沒有詳細介紹設置 Blynk 應用程序和控件的具體細節。雖然我添加了原理圖,但我也沒有詳細介紹我的生產布線等。我相信我們自己嘗試會學到更多。話雖如此,如果您遇到困難或需要幫助才能使項目正常運行(或想知道我為什么要做某事),請給我發消息,我很樂意提供幫助。

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費