步驟1:硬件設(shè)計(jì)
這將是我最簡單的Instructable硬件之一。您甚至都不需要面包板,這些零件可以通過簡單的跳線連接。盡管我討厭為這個項(xiàng)目熱粘合,但這是一個完美的選擇。
使用的零件:
-Arduino PRO Micro
-繼電器模塊(如果您的負(fù)載消耗的電流超過10A,請不要使用圖示的10A模塊!)
-HLK-PM01-5V微型電源(低功耗,環(huán)保,無負(fù)載損耗《0.1W)。盡管看起來可能不像,但這是一個微型隔離電源(不是無變壓器電源TPS,在所有Arduino/ESP項(xiàng)目中都應(yīng)不惜一切代價避免使用)
-HC12收發(fā)器
-HC12 USB加密狗的另一端
-任何230V電源板
接線:
有些誤入歧途的人認(rèn)為中性線(BLUE)中的電流(在單相交流電源的情況下)低于熱線(BROWN)中的電流。這是不正確的。 2個串聯(lián)負(fù)載(一個是我們的電流表)上的單相交流網(wǎng)絡(luò)中的電流完全相同。將ACS電流傳感器放在零線的唯一好處是,如果您在負(fù)載斷開時(通過開關(guān)或繼電器)觸摸它,則不會被屏蔽,因?yàn)榱硪环矫嬗?的電流流過如果即使在關(guān)閉狀態(tài)下也要觸摸棕色電線(如果開關(guān)和繼電器位于電流表之后),則電源電壓會穿過您的身體到達(dá)地面。因此,從安全角度來看,可以說將ACS電流傳感器放在中性線上比較安全,但是在隱蔽的環(huán)境中這并不重要,并且在設(shè)備開啟時也不要觸摸任何電線。
對于我的電路,主電源230V首先進(jìn)入繼電器(除非處于受控狀態(tài),否則它將始終處于閉合狀態(tài)),然后我使用了一根剛性導(dǎo)線,該導(dǎo)線甚至可以輕松承受20安培的電流,從而將ACS與之連接在一起。這根電線還有助于在熱粘合之前將組件固定在適當(dāng)?shù)奈恢谩?/p>
我最初的想法是將整個電路構(gòu)建到配電盤中,但是正如我的圖片所示,它們使這些組件有意地不可拆卸(哦!)。所以我只剪了主電源線,然后將其放在接線盒中。
最后一點(diǎn)請注意,如果負(fù)載消耗的電流超過10A,則不應(yīng)使用10A繼電器。確保您已閱讀設(shè)備的數(shù)據(jù)表或使用電流表進(jìn)行測試以查看峰值電流是什么。
該項(xiàng)目的棘手部分是無線電通信,因?yàn)槲业南匆聶C(jī)和烘干機(jī)都在地下室。我已經(jīng)嘗試了一些解決方案以查看它們是否可行:
1,ESP32/8266 wifi-》并非所有wifi信號都被完全阻止的機(jī)會
2、2G/3G/4G-》沒電了,死了
3,Lora-》正常工作,但是對于該項(xiàng)目來說是一個過大的殺傷力
4,433Mhz廉價發(fā)射器,它確實(shí)可以工作在12V的升壓TX功率下但會干擾使用此頻段的氣象站和其他設(shè)備。最初,我沒有計(jì)劃在該版本中使用中繼,否則就沒有一個簡單的發(fā)送器就足夠了。
因此,我最終選擇了HC12遠(yuǎn)程收發(fā)器作為該項(xiàng)目的理想選擇。盡管那里的一些人聲稱距此只有幾公里,但由于信號干擾,我未能在市區(qū)達(dá)到200米的距離,但這對于該項(xiàng)目而言卻是完美的。該收發(fā)器支持許多不同的傳輸模式,從1200Bps-》 115200 Bps到最低,最低為1200,可以很好地與我的距離和障礙物配合使用。這個小模塊讓我印象深刻,它能夠通過3個樓層和兩個單元之間的多個門進(jìn)行通信。
步驟2:HC12注意事項(xiàng)
本節(jié)是可選的,如果您對此內(nèi)容不感興趣,則可以跳過此部分,因?yàn)樵撃K僅適用于短距離開箱即用的設(shè)置。如果您的環(huán)境中的通信仍然有問題,請繼續(xù)閱讀。
我發(fā)現(xiàn)有許多教程和手冊,其中提到HC12可以根據(jù)串行帶寬自動調(diào)整無線電傳輸速度。
但是不幸的是,這不是事實(shí)。您不能只執(zhí)行HC12.begin(1200)并期望通信以5000 bps的速度進(jìn)行空中傳輸(這對于我們的應(yīng)用程序是最佳的)。
必須首先將其置于編程模式,將SET引腳拉低至GND,然后發(fā)送AT + B1200命令,但是一旦完成,它就會寫入閃存,您將不必再次更改它。
但也不要忘記第一次與設(shè)備通信時,您使用的是9600bps,將其設(shè)置為任何其他波特率時,您將變得亂碼,必須相應(yīng)地更改代碼。
因此,從
1,讓程序使用HC12.begin(9600)打開串行端口;
2,將HC12的編程器引腳(SET)連接到GND
3,您的程序?qū)C12.println(“ AT + B1200”)發(fā)送出去
4,此時設(shè)備設(shè)置為1200bps Serial/5000 bps Air,您將無需再次執(zhí)行此過程(除非您的發(fā)射器壞了并且您必須編寫一個新的程序)
5,您必須修改程序以每次使用HC12.begin(1200)來打開序列號。
從理論上講,這使我想到了HC12節(jié)點(diǎn)可以相互重新編程。為此,您可以執(zhí)行類似PROG_MODE的命令,并且遠(yuǎn)程Arduino接收到它后,它將HC12的編程器引腳下拉到地面,然后發(fā)送“ AT +任何帶寬”命令,關(guān)閉其串行并以新的帶寬重新打開,然后本地節(jié)點(diǎn)本質(zhì)上是一樣的。為了在修改波特率后重啟,您的程序可以在啟動時將HC12置于編程模式(通過將SET拉到GND),并執(zhí)行AT + RX,模塊以當(dāng)前設(shè)置的帶寬返回,并將其用作基值。
默認(rèn)設(shè)置為FU3,9,600bps(8位數(shù)據(jù),無校驗(yàn),一個停止位),CH001(433.4MHz)。為了獲得最遠(yuǎn)的通訊距離,可以將串行端口的波特率設(shè)置為較低。
我還購買了一些HC12 USB加密狗進(jìn)行測試,這對他們有好處,因?yàn)樗鼈儾粌H可以在框,但它們具有用于編程的簡潔PROGRAMMER按鈕。使用這些模塊后,我遇到的一個問題是,我將它們置于未知狀態(tài)(不同的通道,不同的波特率)幾個月了,在將它們從抽屜中拉出后,它們不再起作用了,因此如果您更改參數(shù),最明智的做法是在盒子上或模塊上打印一個小標(biāo)簽,或記錄您的項(xiàng)目,這樣可以避免一個小時的QQ操作。
制造商聲稱,您始終可以通過將端口設(shè)置為9600Bps并將AT + DEFAULT發(fā)送到設(shè)備來重置設(shè)置,但不幸的是,這并不總是正確的:(
其中之一是我的加密狗可以正常工作,另一個在編程器模式下什么都沒有響應(yīng),于是我被迫從其他設(shè)置的1200Bps手動進(jìn)行嘗試,嘗試向其發(fā)送命令,但無濟(jì)于事。我在網(wǎng)上搜索了一下之后,找到了解決方案,需要長時間按住PROGRAMMER(重置)按鈕,雖然不需要這么長的時間,類似于WRTG硬重置的30,30,30的做法肯定會起作用:在設(shè)備運(yùn)行時按住按鈕5秒鐘插上電源,拔下設(shè)備的電源,按住按鈕,重新插上電源,然后將按鈕重置為DEFAULT。
我有另一個物理HC12模塊,我在其中更改了設(shè)置,但再也無法使其正常工作2 Arduino Megas,Leonardo和Pro Micro,因此除非您必須最好地更改參數(shù)事情是讓它們保持默認(rèn)狀態(tài)。我已經(jīng)更改了默認(rèn)通道,因?yàn)樯院笪铱赡軙?zhí)行另一個HC12項(xiàng)目,并且不想干擾這個項(xiàng)目。
步驟3:Arduino代碼
ACS 712可以測量直流電流,但也可以使用它來測量AC。我不會在其他文章中詳細(xì)介紹它:
http://henrysbench.capnfatz.com/henrys-bench/ardu 。..
如果您不感興趣如何完成操作,只需拿我的代碼并調(diào)整電壓(ACS 712 10A/20A/30A模塊的110/230V和ACS類型值)即可。
監(jiān)視2臺設(shè)備的操作變得有些棘手。幸運(yùn)的是,與這種B級干衣機(jī)一樣,它在能源使用方面(不斷消耗超過1200W)浪費(fèi)了很多精力,它可以與洗衣機(jī)區(qū)分開來,而洗衣機(jī)在運(yùn)行時從1W的待機(jī)待機(jī)功率變?yōu)?00W(我要指出的是模式,例如90C上的白色清洗,甚至可以達(dá)到2KW,但我從未使用過)。該軟件正在查詢放大器,計(jì)算每秒許多CPU(或我們稱為MCU)周期的功率,但是有一個問題,如前所述,洗衣機(jī)即使打了三分鐘的神奇寶貝,也可能會降到非常低的功耗模式。在夢想中如果我們每5分鐘將這個值拉一次,則很有可能是不準(zhǔn)確的,因此在代碼中實(shí)現(xiàn)了一種稱為平滑的技術(shù),該技術(shù)將這個值取100倍并取平均值。對于每個新值,將生成并除以所有數(shù)字的總和,生成平均值,然后將其用于平滑外圍數(shù)據(jù)。因?yàn)槊看稳∫粋€新值(例如等待100個新值)時都會進(jìn)行這種平均,所以在計(jì)算此運(yùn)行平均值時沒有滯后時間。
測量數(shù)據(jù):
1,洗衣機(jī)
128W的使用情況-》在電機(jī)旋轉(zhuǎn)周期之間可以下降到-》 1W
0.5-1.5W待機(jī)
2,烘干機(jī)
超過1275W的使用量!
2W待機(jī)
可以定義以下狀態(tài):
if powercons_for_5mins 《 1.5W washing ready
if powercons_for_5mins 《 5W drying ready
if powercons_for_5mins 》 50W washer is running
if powercons_for_5mins 》 500W dryer is running
if powercons_for_5mins 》 1350W dryer+washer is running
消息本來可以每5分鐘發(fā)送一次,但是我希望在負(fù)載打開時進(jìn)行1秒的延遲以進(jìn)行進(jìn)一步的調(diào)試。還用這種方式檢測到一些奇怪的異常。
由于電源電壓從不改變,因此公式始終為P = 230 * I(測量安培)。
EOL_LOAD_WD,1,5.6,1350
完成洗滌和干燥后,系統(tǒng)仍將采樣功耗,但不會再發(fā)送任何消息。最終通知將重復(fù)3次,例如:
EOL_LOAD_OFF,0,0,0
EOL_LOAD_OFF,0,0,0
EOL_LOAD_OFF,0,0,0
有關(guān)代碼的一些注釋:
由于中繼只是一種額外的添加,因此很少(或永遠(yuǎn)不會)使用繼電器的常閉狀態(tài)可以延長其使用壽命。該代碼將繼電器設(shè)置為0,這意味著它將需要變?yōu)楦唠娖揭躁P(guān)閉設(shè)備(而不是將其打開)。
pinMode(POWER_RELAY, OUTPUT);
digitalWrite(POWER_RELAY, LOW);
該代碼將計(jì)算功率并將其評估為發(fā)送特定事件的標(biāo)準(zhǔn),但所有發(fā)送的數(shù)據(jù)僅用于調(diào)試,這是我們對3種狀態(tài)采取的唯一操作:
if (Match(eolstate, “EOL_LOAD_WF”) != NULL)
system(“/home/pi/eol.sh wf”);
if (Match(eolstate, “EOL_LOAD_DF”) != NULL)
system(“/home/pi/eol.sh df”);
if (Match(eolstate, “EOL_LOAD_WDF”) != NULL)
system(“/home/pi/eol.sh wdf”);
其中F表示完成。這些狀態(tài)取決于以前的狀態(tài)(洗衣機(jī)/干衣機(jī)是否正在運(yùn)行)。例如,洗衣機(jī)正在運(yùn)行,干衣機(jī)已關(guān)閉,則代碼將進(jìn)入else if(PowerAVG 《500 && PowerAVG》 50)部分并打印EOL_LOAD_W,但這不是我們關(guān)心的,而是在洗滌完成時。然后,一旦機(jī)器完成并且在較長的時間段內(nèi)功耗下降到1W,則代碼進(jìn)入其他情況,如果(PowerAVG 《10 && PowerAVG》 1)但由于先前狀態(tài)eol_state》 = 1為1,它將打印EOL_LOAD_WDF消息并鎖定(將狀態(tài)設(shè)置為0)。下次進(jìn)入此代碼段時,當(dāng)計(jì)算機(jī)物理關(guān)閉且負(fù)載低于1瓦時,負(fù)載將處于備用EOL_LOAD_S,將生成EOL_LOAD_OFF并將eol狀態(tài)設(shè)置為0。到達(dá)實(shí)際打印段后,只要eol狀態(tài)高于1,就會將數(shù)據(jù)發(fā)送出去并鎖定。
通常,當(dāng)我花大量時間分別設(shè)計(jì)硬件和軟件并將電路放在一起時,我將無法工作必須花幾天的時間來解決錯誤,而不是在這個項(xiàng)目中。只有四個小問題:
1,當(dāng)沒有負(fù)載時,ACS712會給出一個浮動讀數(shù),因?yàn)?天的整日測試表明,該讀數(shù)在0.09A-》 0.16A之間。這類似于壁掛式功率計(jì),在無負(fù)載時默認(rèn)為0.10A。解決方案:我沒有使用偽造的功率值并對此進(jìn)行調(diào)整,而是輸入了一個簡單的if檢查方法,即檢查電流消耗是否低于0.20A,將其設(shè)置為0。
2,平滑代碼存在問題由于樣本數(shù)量而導(dǎo)致的AVG功率計(jì)算無法適合整數(shù)變量,例如1000W * 100 element = 100000,因此已更改為unsigned long,可以存儲0到4,294,967,295的值,除法結(jié)果應(yīng)始終較低,因此
3,需要用外部天線替換小線圈天線,我使用的是標(biāo)準(zhǔn)的2.4Ghz wifi天線(請記住,任何天線總比沒有好。天線)。我最初使用線圈天線進(jìn)行的測試有效,但是一旦設(shè)備組裝完成,我的數(shù)據(jù)包就會大量丟失,這可能是由于高壓電線的干擾。在樓上的接收器中,我還通過將一根簡單的導(dǎo)線連接到線圈的末端來擴(kuò)展線圈。
4,無論我在連接負(fù)載并關(guān)閉時的低電流忽略代碼,有時都會出現(xiàn)電流尖峰,例如:
2019-04-17 13:42:12 =》 [EOL] Data received at 2019-04-17 13:42:12 =》 EOL_LOAD_S,0,0.22,1
2019-04-17 13:42:13 =》 [EOL] Data received at 2019-04-17 13:42:13 =》 EOL_LOAD_OFF,0,0.00,0
其中(也許是其他人打開/關(guān)閉設(shè)備的電源線上的某些波動?!)。無法忽略1W,因?yàn)檫@是確定空閑狀態(tài)的方法,但是幸運(yùn)的是,這些波動永遠(yuǎn)不會超過10 Watts才能使程序進(jìn)入WDF狀態(tài),因此將其記錄下來。
比使用1400W吹風(fēng)機(jī)測試這種新電路更好的方法是:P在平滑代碼中使用100個樣本使我大約需要2分鐘來完全傳播功率變化,這意味著需要2分鐘從負(fù)載打開狀態(tài)到其實(shí)際值。一旦負(fù)載被關(guān)閉,它大約需要花費(fèi)相同的時間下降到0。但是,我要注意的是,這是通過設(shè)備在HC12上發(fā)送數(shù)據(jù)的保持時間1000(1秒)來完成的。如果設(shè)備在1分鐘內(nèi)沒有任何工作,則只需采樣并保持循環(huán),這些循環(huán)將發(fā)生得更快,而100個元素將不夠。這就是為什么我將示例提交速率保留為1秒而不是每隔五分鐘發(fā)送一次的主要原因。
在接收器端,Raspberry PI運(yùn)行C基本代碼并發(fā)揮不同的作用。
這次沒有Closure和ToDo列表,因?yàn)槲艺J(rèn)為這個項(xiàng)目做得很好:-)
步驟1:硬件設(shè)計(jì)
這將是我最簡單的Instructable硬件之一。您甚至都不需要面包板,這些零件可以通過簡單的跳線連接。盡管我討厭為這個項(xiàng)目熱粘合,但這是一個完美的選擇。
使用的零件:
-Arduino PRO Micro
-ACS 712電流傳感器:20A
-繼電器模塊(如果您的負(fù)載消耗的電流超過10A,請不要使用圖示的10A模塊!)
-HLK-PM01-5V微型電源(低功耗,環(huán)保,無負(fù)載損耗《0.1W)。盡管看起來可能不像,但這是一個微型隔離電源(不是無變壓器電源TPS,在所有Arduino/ESP項(xiàng)目中都應(yīng)不惜一切代價避免使用)
-HC12收發(fā)器
-HC12 USB加密狗的另一端
-任何230V電源板
接線:
有些誤入歧途的人認(rèn)為中性線(BLUE)中的電流(在單相交流電源的情況下)低于熱線(BROWN)中的電流。這是不正確的。 2個串聯(lián)負(fù)載(一個是我們的電流表)上的單相交流網(wǎng)絡(luò)中的電流完全相同。將ACS電流傳感器放在零線的唯一好處是,如果您在負(fù)載斷開時(通過開關(guān)或繼電器)觸摸它,則不會被屏蔽,因?yàn)榱硪环矫嬗?的電流流過如果即使在關(guān)閉狀態(tài)下也要觸摸棕色電線(如果開關(guān)和繼電器位于電流表之后),則電源電壓會穿過您的身體到達(dá)地面。因此,從安全角度來看,可以說將ACS電流傳感器放在中性線上比較安全,但是在隱蔽的環(huán)境中這并不重要,并且在設(shè)備開啟時也不要觸摸任何電線。
對于我的電路,主電源230V首先進(jìn)入繼電器(除非處于受控狀態(tài),否則它將始終處于閉合狀態(tài)),然后我使用了一根剛性導(dǎo)線,該導(dǎo)線甚至可以輕松承受20安培的電流,從而將ACS與之連接在一起。這根電線還有助于在熱粘合之前將組件固定在適當(dāng)?shù)奈恢谩?/p>
我最初的想法是將整個電路構(gòu)建到配電盤中,但是正如我的圖片所示,它們使這些組件有意地不可拆卸(哦!)。所以我只剪了主電源線,然后將其放在接線盒中。
最后一點(diǎn)請注意,如果負(fù)載消耗的電流超過10A,則不應(yīng)使用10A繼電器。確保您已閱讀設(shè)備的數(shù)據(jù)表或使用電流表進(jìn)行測試以查看峰值電流是什么。
該項(xiàng)目的棘手部分是無線電通信,因?yàn)槲业南匆聶C(jī)和烘干機(jī)都在地下室。我已經(jīng)嘗試了一些解決方案以查看它們是否可行:
1,ESP32/8266 wifi-》并非所有wifi信號都被完全阻止的機(jī)會
2、2G/3G/4G-》沒電了,死了
3,Lora-》正常工作,但是對于該項(xiàng)目來說是一個過大的殺傷力
4,433Mhz廉價發(fā)射器,它確實(shí)可以工作在12V的升壓TX功率下但會干擾使用此頻段的氣象站和其他設(shè)備。最初,我沒有計(jì)劃在該版本中使用中繼,否則就沒有一個簡單的發(fā)送器就足夠了。
因此,我最終選擇了HC12遠(yuǎn)程收發(fā)器作為該項(xiàng)目的理想選擇。盡管那里的一些人聲稱距此只有幾公里,但由于信號干擾,我未能在市區(qū)達(dá)到200米的距離,但這對于該項(xiàng)目而言卻是完美的。該收發(fā)器支持許多不同的傳輸模式,從1200Bps-》 115200 Bps到最低,最低為1200,可以很好地與我的距離和障礙物配合使用。這個小模塊讓我印象深刻,它能夠通過3個樓層和兩個單元之間的多個門進(jìn)行通信。
步驟2:HC12注意事項(xiàng)
本節(jié)是可選的,如果您對此內(nèi)容不感興趣,則可以跳過此部分,因?yàn)樵撃K僅適用于短距離開箱即用的設(shè)置。如果您的環(huán)境中的通信仍然有問題,請繼續(xù)閱讀。
我發(fā)現(xiàn)有許多教程和手冊,其中提到HC12可以根據(jù)串行帶寬自動調(diào)整無線電傳輸速度。
但是不幸的是,這不是事實(shí)。您不能只執(zhí)行HC12.begin(1200)并期望通信以5000 bps的速度進(jìn)行空中傳輸(這對于我們的應(yīng)用程序是最佳的)。
必須首先將其置于編程模式,將SET引腳拉低至GND,然后發(fā)送AT + B1200命令,但是一旦完成,它就會寫入閃存,您將不必再次更改它。
但也不要忘記第一次與設(shè)備通信時,您使用的是9600bps,將其設(shè)置為任何其他波特率時,您將變得亂碼,必須相應(yīng)地更改代碼。
因此,從
1,讓程序使用HC12.begin(9600)打開串行端口;
2,將HC12的編程器引腳(SET)連接到GND
3,您的程序?qū)C12.println(“ AT + B1200”)發(fā)送出去
4,此時設(shè)備設(shè)置為1200bps Serial/5000 bps Air,您將無需再次執(zhí)行此過程(除非您的發(fā)射器壞了并且您必須編寫一個新的程序)
5,您必須修改程序以每次使用HC12.begin(1200)來打開序列號。
從理論上講,這使我想到了HC12節(jié)點(diǎn)可以相互重新編程。為此,您可以執(zhí)行類似PROG_MODE的命令,并且遠(yuǎn)程Arduino接收到它后,它將HC12的編程器引腳下拉到地面,然后發(fā)送“ AT +任何帶寬”命令,關(guān)閉其串行并以新的帶寬重新打開,然后本地節(jié)點(diǎn)本質(zhì)上是一樣的。為了在修改波特率后重啟,您的程序可以在啟動時將HC12置于編程模式(通過將SET拉到GND),并執(zhí)行AT + RX,模塊以當(dāng)前設(shè)置的帶寬返回,并將其用作基值。
默認(rèn)設(shè)置為FU3,9,600bps(8位數(shù)據(jù),無校驗(yàn),一個停止位),CH001(433.4MHz)。為了獲得最遠(yuǎn)的通訊距離,可以將串行端口的波特率設(shè)置為較低。
我還購買了一些HC12 USB加密狗進(jìn)行測試,這對他們有好處,因?yàn)樗鼈儾粌H可以在框,但它們具有用于編程的簡潔PROGRAMMER按鈕。使用這些模塊后,我遇到的一個問題是,我將它們置于未知狀態(tài)(不同的通道,不同的波特率)幾個月了,在將它們從抽屜中拉出后,它們不再起作用了,因此如果您更改參數(shù),最明智的做法是在盒子上或模塊上打印一個小標(biāo)簽,或記錄您的項(xiàng)目,這樣可以避免一個小時的QQ操作。
制造商聲稱,您始終可以通過將端口設(shè)置為9600Bps并將AT + DEFAULT發(fā)送到設(shè)備來重置設(shè)置,但不幸的是,這并不總是正確的:(
其中之一是我的加密狗可以正常工作,另一個在編程器模式下什么都沒有響應(yīng),于是我被迫從其他設(shè)置的1200Bps手動進(jìn)行嘗試,嘗試向其發(fā)送命令,但無濟(jì)于事。我在網(wǎng)上搜索了一下之后,找到了解決方案,需要長時間按住PROGRAMMER(重置)按鈕,雖然不需要這么長的時間,類似于WRTG硬重置的30,30,30的做法肯定會起作用:在設(shè)備運(yùn)行時按住按鈕5秒鐘插上電源,拔下設(shè)備的電源,按住按鈕,重新插上電源,然后將按鈕重置為DEFAULT。
我有另一個物理HC12模塊,我在其中更改了設(shè)置,但再也無法使其正常工作2 Arduino Megas,Leonardo和Pro Micro,因此除非您必須最好地更改參數(shù)事情是讓它們保持默認(rèn)狀態(tài)。我已經(jīng)更改了默認(rèn)通道,因?yàn)樯院笪铱赡軙?zhí)行另一個HC12項(xiàng)目,并且不想干擾這個項(xiàng)目。
步驟3:Arduino代碼
ACS 712可以測量直流電流,但也可以使用它來測量AC。我不會在其他文章中詳細(xì)介紹它:
http://henrysbench.capnfatz.com/henrys-bench/ardu 。..
如果您不感興趣如何完成操作,只需拿我的代碼并調(diào)整電壓(ACS 712 10A/20A/30A模塊的110/230V和ACS類型值)即可。
監(jiān)視2臺設(shè)備的操作變得有些棘手。幸運(yùn)的是,與這種B級干衣機(jī)一樣,它在能源使用方面(不斷消耗超過1200W)浪費(fèi)了很多精力,它可以與洗衣機(jī)區(qū)分開來,而洗衣機(jī)在運(yùn)行時從1W的待機(jī)待機(jī)功率變?yōu)?00W(我要指出的是模式,例如90C上的白色清洗,甚至可以達(dá)到2KW,但我從未使用過)。該軟件正在查詢放大器,計(jì)算每秒許多CPU(或我們稱為MCU)周期的功率,但是有一個問題,如前所述,洗衣機(jī)即使打了三分鐘的神奇寶貝,也可能會降到非常低的功耗模式。在夢想中如果我們每5分鐘將這個值拉一次,則很有可能是不準(zhǔn)確的,因此在代碼中實(shí)現(xiàn)了一種稱為平滑的技術(shù),該技術(shù)將這個值取100倍并取平均值。對于每個新值,將生成并除以所有數(shù)字的總和,生成平均值,然后將其用于平滑外圍數(shù)據(jù)。因?yàn)槊看稳∫粋€新值(例如等待100個新值)時都會進(jìn)行這種平均,所以在計(jì)算此運(yùn)行平均值時沒有滯后時間。
測量數(shù)據(jù):
1,洗衣機(jī)
128W的使用情況-》在電機(jī)旋轉(zhuǎn)周期之間可以下降到-》 1W
0.5-1.5W待機(jī)
2,烘干機(jī)
超過1275W的使用量!
2W待機(jī)
可以定義以下狀態(tài):
if powercons_for_5mins 《 1.5W washing ready
if powercons_for_5mins 《 5W drying ready
if powercons_for_5mins 》 50W washer is running
if powercons_for_5mins 》 500W dryer is running
if powercons_for_5mins 》 1350W dryer+washer is running
消息本來可以每5分鐘發(fā)送一次,但是我希望在負(fù)載打開時進(jìn)行1秒的延遲以進(jìn)行進(jìn)一步的調(diào)試。還用這種方式檢測到一些奇怪的異常。
由于電源電壓從不改變,因此公式始終為P = 230 * I(測量安培)。
EOL_LOAD_WD,1,5.6,1350
完成洗滌和干燥后,系統(tǒng)仍將采樣功耗,但不會再發(fā)送任何消息。最終通知將重復(fù)3次,例如:
EOL_LOAD_OFF,0,0,0
EOL_LOAD_OFF,0,0,0
EOL_LOAD_OFF,0,0,0
有關(guān)代碼的一些注釋:
由于中繼只是一種額外的添加,因此很少(或永遠(yuǎn)不會)使用繼電器的常閉狀態(tài)可以延長其使用壽命。該代碼將繼電器設(shè)置為0,這意味著它將需要變?yōu)楦唠娖揭躁P(guān)閉設(shè)備(而不是將其打開)。
pinMode(POWER_RELAY, OUTPUT);
digitalWrite(POWER_RELAY, LOW);
該代碼將計(jì)算功率并將其評估為發(fā)送特定事件的標(biāo)準(zhǔn),但所有發(fā)送的數(shù)據(jù)僅用于調(diào)試,這是我們對3種狀態(tài)采取的唯一操作:
if (Match(eolstate, “EOL_LOAD_WF”) != NULL)
system(“/home/pi/eol.sh wf”);
if (Match(eolstate, “EOL_LOAD_DF”) != NULL)
system(“/home/pi/eol.sh df”);
if (Match(eolstate, “EOL_LOAD_WDF”) != NULL)
system(“/home/pi/eol.sh wdf”);
其中F表示完成。這些狀態(tài)取決于以前的狀態(tài)(洗衣機(jī)/干衣機(jī)是否正在運(yùn)行)。例如,洗衣機(jī)正在運(yùn)行,干衣機(jī)已關(guān)閉,則代碼將進(jìn)入else if(PowerAVG 《500 && PowerAVG》 50)部分并打印EOL_LOAD_W,但這不是我們關(guān)心的,而是在洗滌完成時。然后,一旦機(jī)器完成并且在較長的時間段內(nèi)功耗下降到1W,則代碼進(jìn)入其他情況,如果(PowerAVG 《10 && PowerAVG》 1)但由于先前狀態(tài)eol_state》 = 1為1,它將打印EOL_LOAD_WDF消息并鎖定(將狀態(tài)設(shè)置為0)。下次進(jìn)入此代碼段時,當(dāng)計(jì)算機(jī)物理關(guān)閉且負(fù)載低于1瓦時,負(fù)載將處于備用EOL_LOAD_S,將生成EOL_LOAD_OFF并將eol狀態(tài)設(shè)置為0。到達(dá)實(shí)際打印段后,只要eol狀態(tài)高于1,就會將數(shù)據(jù)發(fā)送出去并鎖定。
通常,當(dāng)我花大量時間分別設(shè)計(jì)硬件和軟件并將電路放在一起時,我將無法工作必須花幾天的時間來解決錯誤,而不是在這個項(xiàng)目中。只有四個小問題:
1,當(dāng)沒有負(fù)載時,ACS712會給出一個浮動讀數(shù),因?yàn)?天的整日測試表明,該讀數(shù)在0.09A-》 0.16A之間。這類似于壁掛式功率計(jì),在無負(fù)載時默認(rèn)為0.10A。解決方案:我沒有使用偽造的功率值并對此進(jìn)行調(diào)整,而是輸入了一個簡單的if檢查方法,即檢查電流消耗是否低于0.20A,將其設(shè)置為0。
2,平滑代碼存在問題由于樣本數(shù)量而導(dǎo)致的AVG功率計(jì)算無法適合整數(shù)變量,例如1000W * 100 element = 100000,因此已更改為unsigned long,可以存儲0到4,294,967,295的值,除法結(jié)果應(yīng)始終較低,因此
3,需要用外部天線替換小線圈天線,我使用的是標(biāo)準(zhǔn)的2.4Ghz wifi天線(請記住,任何天線總比沒有好。天線)。我最初使用線圈天線進(jìn)行的測試有效,但是一旦設(shè)備組裝完成,我的數(shù)據(jù)包就會大量丟失,這可能是由于高壓電線的干擾。在樓上的接收器中,我還通過將一根簡單的導(dǎo)線連接到線圈的末端來擴(kuò)展線圈。
4,無論我在連接負(fù)載并關(guān)閉時的低電流忽略代碼,有時都會出現(xiàn)電流尖峰,例如:
2019-04-17 13:42:12 =》 [EOL] Data received at 2019-04-17 13:42:12 =》 EOL_LOAD_S,0,0.22,1
2019-04-17 13:42:13 =》 [EOL] Data received at 2019-04-17 13:42:13 =》 EOL_LOAD_OFF,0,0.00,0
其中(也許是其他人打開/關(guān)閉設(shè)備的電源線上的某些波動?!)。無法忽略1W,因?yàn)檫@是確定空閑狀態(tài)的方法,但是幸運(yùn)的是,這些波動永遠(yuǎn)不會超過10 Watts才能使程序進(jìn)入WDF狀態(tài),因此將其記錄下來。
比使用1400W吹風(fēng)機(jī)測試這種新電路更好的方法是:P在平滑代碼中使用100個樣本使我大約需要2分鐘來完全傳播功率變化,這意味著需要2分鐘從負(fù)載打開狀態(tài)到其實(shí)際值。一旦負(fù)載被關(guān)閉,它大約需要花費(fèi)相同的時間下降到0。但是,我要注意的是,這是通過設(shè)備在HC12上發(fā)送數(shù)據(jù)的保持時間1000(1秒)來完成的。如果設(shè)備在1分鐘內(nèi)沒有任何工作,則只需采樣并保持循環(huán),這些循環(huán)將發(fā)生得更快,而100個元素將不夠。這就是為什么我將示例提交速率保留為1秒而不是每隔五分鐘發(fā)送一次的主要原因。
在接收器端,Raspberry PI運(yùn)行C基本代碼并發(fā)揮不同的作用。
-
洗衣機(jī)
+關(guān)注
關(guān)注
13文章
680瀏覽量
43331 -
監(jiān)控器
+關(guān)注
關(guān)注
1文章
270瀏覽量
26599 -
Arduino
+關(guān)注
關(guān)注
188文章
6474瀏覽量
187425
發(fā)布評論請先 登錄
相關(guān)推薦
評論