步驟1:步驟0 - 先決條件
您知道如何使用Arduino IDE
您已經(jīng)安裝了ESP8266主板管理器
因此,您可以在NodeMCU上傳一些代碼并運(yùn)行它
您已經(jīng)安裝了以下庫(kù)
U8g2lib - OLED顯示器
ESPAsyncTCP - 管理異步HTTP請(qǐng)求,從github安裝
ArduinoJson - 處理來(lái)自HTTP請(qǐng)求的JSON響應(yīng)
ESP8266WiFi - 包含在ESP8266板上
Ticker-包含在ESP8266板中
您有一些設(shè)備或像智能家居盒這樣的軟件將允許監(jiān)控和與此恒溫器交互(在我的情況下,我擁有一個(gè)eedomus盒子,但你可以很容易地調(diào)整代碼以滿(mǎn)足你的需要)。
你知道如何焊接
第2步:第1步 - 物料清單
NodeMCU - 2€
OLED屏幕128x32 -1.50 €
DHT-22 - 2.50€
繼電器3.3V - 1.40€
2個(gè)按鈕 - 2x0.02€
2電阻1kΩ至10kΩ(我使用220Ω)2x0.01€
原型板 - 0.16€
總計(jì)= 7.62€
所有價(jià)格均為基于全球速賣(mài)通免費(fèi)送貨。
此外我們還需要焊接材料:
烙鐵
焊線(xiàn) - 我用0.8mm
焊劑 - 我用它來(lái)焊接NodeMCU針
Kynar跳線(xiàn)或其他電纜連接原型板上的元件
鋼絲球 - 清潔鐵
li》
脫焊芯 - 用于在搞砸時(shí)去除焊接
步驟3:步驟3 - 布線(xiàn)
圖片顯示了布線(xiàn)的詳細(xì)信息。
您可以修改引腳以連接組件。但請(qǐng)注意,繼電器不能連接到NodeMCU的任何引腳。將繼電器連接到某個(gè)引腳不允許NodeMCU啟動(dòng)。
NodeMCU由USB電纜(5V)供電,該電纜連接NodeMCU的Vin引腳,該引腳連接到板載電源穩(wěn)壓器。除非你想把它吹干,否則不要用5V為NodeMCU的另一個(gè)引腳供電。
步驟4:步驟4 - 程序原理
程序的原理非常簡(jiǎn)單,并在第一張圖片上繪制。
我們有兩個(gè)變量可以容納要求的溫度和測(cè)量的溫度
定期我們讀取測(cè)量的溫度并將其顯示在顯示屏上
我們還從智能家居盒(eedomus)中讀取了所需的溫度
根據(jù)這兩個(gè)溫度,我們計(jì)算是否應(yīng)加熱
此外,用戶(hù)可以使用按鈕調(diào)整所需溫度
此外,我們需要:
管理按鈕調(diào)整的請(qǐng)求溫度與通過(guò)讀取eedomus調(diào)整的請(qǐng)求溫度之間的沖突
確保我們不經(jīng)常調(diào)整加熱。加熱器可能不會(huì)升值,并且在相當(dāng)長(zhǎng)的時(shí)間內(nèi)加熱時(shí)它會(huì)更有效地加熱。根據(jù)經(jīng)驗(yàn),我們決定不比每15分鐘更頻繁地調(diào)整加熱
需要從按鈕去除讀數(shù)。請(qǐng)參閱arduino示例:數(shù)字→去抖動(dòng)
平滑讀取測(cè)量溫度:原始讀數(shù)交替,間隙超過(guò)1°C,使單個(gè)讀數(shù)難以依賴(lài)
計(jì)算滯后以保持溫度盡可能穩(wěn)定。房屋的慣性意味著在我們切斷加熱后不久溫度會(huì)繼續(xù)升高。另一方面,即使我們開(kāi)始加熱,溫度也會(huì)繼續(xù)下降。因此,我們必須預(yù)測(cè)切割加熱或開(kāi)始加熱的時(shí)間點(diǎn)。這將在第二張圖片中顯示。
步驟5:步驟5 - Arduino代碼
我剛剛投入生產(chǎn)我的恒溫器。我當(dāng)前的代碼很亂,包含很多用于調(diào)試的消息。我計(jì)劃很快重寫(xiě)一個(gè)干凈的程序。我會(huì)盡快更新并在我的恒溫器上進(jìn)行驗(yàn)證。
Ticker是經(jīng)常重復(fù)的程序
我們使用許多全局變量,因?yàn)槲覀儫o(wú)法將參數(shù)傳遞給自動(dòng)收?qǐng)?bào)機(jī)程序
AsyncClient允許處理異步HTTP請(qǐng)求
我們附加中斷程序來(lái)處理按下按鈕
所有代碼都是事件驅(qū)動(dòng)的,Arduino循環(huán)為空
displayTemp - 管理2位數(shù)請(qǐng)求溫度的顯示和2位數(shù)加上小數(shù)點(diǎn)后1位數(shù)的測(cè)量溫度。加熱時(shí)顯示器向上移動(dòng),不加熱時(shí)向下移動(dòng),當(dāng)兩個(gè)溫度相等時(shí)(在這種情況下不加熱)上下彈跳
getMeasuredTemp - 我們每分鐘讀取溫度并計(jì)算每個(gè)溫度的平均值5讀數(shù)。然后我們保持5個(gè)平均讀數(shù)的歷史來(lái)計(jì)算曲線(xiàn)的矢量,其允許估計(jì)下一個(gè)讀數(shù)。
getRequestedTemp - 讀取智能家居盒中定義的值。
incTemp/decTemp - 按下按鈕時(shí)由中斷調(diào)用的過(guò)程
setHeating - 打開(kāi)/關(guān)閉繼電器以監(jiān)控加熱器。在我們的例子中,繼電器在沒(méi)有加熱時(shí)被置為高電平而在低溫時(shí)被加熱。也許這很奇怪,但我們做出了這個(gè)選擇,因?yàn)楫?dāng)繼電器關(guān)閉(設(shè)置為HIGH)時(shí),有一個(gè)紅色LED亮起。
步驟6:步驟6 - 附件
最后我打印了一個(gè)小外殼,以便拿著我的恒溫器。
-
恒溫器
+關(guān)注
關(guān)注
4文章
141瀏覽量
20683
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論