作者:彼得·詹森(Peter Jensen)
這是我第一次嘗試“有用”的物聯網項目。我有一段時間Arduino Uno,但除了通過閃爍的LED教程外,沒有真正使用它。是時候將其使用了。我發現考慮一個項目的想法,然後在需要時尋找所需的信息是很有意義的。當然,通常您會發現其他人做了類似的事情,但這沒關係,您仍然會從過程中學習。
我想要一種設備來衡量房屋中的功耗,並在發生變化時將其報告為“雲”服務;燈打開/關閉的燈光等。此外,我想要在盒子上顯示一個顯示,以便我可以閱讀當前的功耗。
我首先將電流傳感器連接到模擬輸入引腳。像這樣:
資料來源:openenergymonitor.org
為了進行校準,我使用的是能夠測量10A的萬用表,並將其連接到一個為三個燈泡燈提供動力的電線。每個燈泡都可以單獨打開和關閉。插座上有60W燈泡,我可以獲得60W,120W和180W的樣品。
請注意,電流傳感器必須只圍繞一根電線,以使AC電流穿過該電線以誘導傳感器中的電流。
測得的電流是電流傳感器所包圍的電源線的電流。
如果您在arduino草圖中的loop()函數中所做的只是調用analogRead()並將結果存儲在內存緩衝區中,那麼您將能夠在一個週期(60hz -16.7ms)中獲得大約100個樣本。 Arduino在16MHz運行。這應該足以計算輸入的根平方(RMS)值。
為什麼需要RMS值?模擬輸入引腳上的輸入是負載/負擔電阻器上的電壓下降。電壓下降是直接成比例的,電流通過測量時測量的電源線。
當電流和電壓隨著時間而變化時,使用I和V的RMS值,將功率計算為60Hz鼻竇波的平均功率:
電力公司以120V保持穩定,因此有趣的是I RMS值。 Arduino類似於數字的轉換器為10位,並且設計了電路,因此竇輸入的中點為2.5V,應導致讀數約511。如果讀數的及時間隔相等,則可以將I RMS值計算為:
其中n是覆蓋60Hz鼻竇波的整個週期所需的樣品數量,k是一個校準常數,在用萬用表測量實際的i rms值後將確定,v i是呼叫返回的analogRead()返回的值
有關數學的更多信息,請參見:Wikipedia
<todo:插入測試測量設置的圖片>
我在Amazon Prime上買了我需要的一切。如果您不是主要訂戶,則最終可能會支付更多。對於某些物品,購買多個單位是有意義的,因為這只會增加幾美元,而且如果您炸一個,那麼擁有一個備用總是很高興的。另外,如果您想製作第二個(或第三個)單元,則已經擁有所需的東西。
| 物品 | 總成本 | 單位成本 |
|---|---|---|
| Arduino Pro Mini(3件包) | $ 11 | $ 4 |
| 3.3V/5V電源模塊(5件包) | $ 9 | $ 2 |
| ESP8266 ESP-01(4包) | $ 14 | $ 4 |
| 2X SCT-013-000非侵入性交流電流傳感器 | $ 26 | $ 13 |
| 16x2 LCD顯示模塊 | $ 6 | $ 6 |
| 110VAC-> 9V適配器 | $ 6 | $ 6 |
| 10pcs 4x6cm雙側原型PCB | $ 7 | $ 1 |
| 10%3.5毫米女性PCB固定千斤頂 | $ 8 | $ 2 |
| 雜項:電容器,電阻,按鈕,電線 | 〜$ 2 | $ 2 |
| 全部的 | $ 89 | $ 40 |
這就是我將所有內容連接在一起的方式:
我使用Digkikey SchemiT-IT軟件來創建上面的硬件接線圖。它在瀏覽器中運行!
有幾件事要指出:
按下按鈕時,通過此信息在2行LCD週期上顯示的信息:
如果在顯示“高級選項”時檢測到很長的按下,則這些額外的屏幕包含在旋轉中:
為了更改ON/OFF狀態或重置數據,必須執行長時間按下按鈕。
總功率 | 線電源 |
線電流 | 自上次重置以來的總能源使用 |
本地IP地址 | 長按先進的選擇 |
wifi傳輸開/關 | 傳輸每個樣本值 |
傳輸正在進行中 |
瀏覽器顯示/接口當前看起來像這樣:

黑線和紅線代表了從兩個階段中的每個階段中汲取的力量。頂部的左右箭頭按鈕將進入前一天或第二天。如果您在今天的一天,將獲取新數據。無需打“刷新”!
這是可以從中得出的一些事情:
“黑色”待機消耗約為125W,“紅色”為25W。這是所有處於待機模式的設備(電視,微波爐,計算機,網絡攝像頭等)的寄生繪製
“黑色”線上的上/下方平方圖是冰箱中打開和關閉的壓縮機。
我凌晨6點左右醒來,開始開燈和電視打開。電視是從“黑色”線上繪製的。
“紅色”中的尖峰是我在熱水器上的二氧化碳風扇。熱水器運行約10分鐘
熱水器尖峰之後的較小的尖峰是車庫門開口。
我使用openscad設計一個盒子。 .scad文件和渲染.stl文件在此存儲庫中。帶有顯示,按鈕和各種連接器的切口的盒子看起來像這樣:

片狀電源
依靠USB的電源引起了模擬銷讀數的一些片狀。另外,為了為ESP-01供電,我需要3.3V的電源。 Arduino Pro Mini沒有像UNO一樣的3.3V電壓調節器。非常便宜的電源模塊符合該賬單,並且似乎提供了足夠穩定的電源以確保穩定的讀數。
ESP8266 ESP-01的波特率
我不得不在Arduino上使用幾個數字I/O引腳進行Arduino和ESP-01模塊之間的串行通信。需要常規的TX/RX引腳將軟件刷到Arduino上。在使用數字I/O引腳的軟件模塊使用軟件模塊時,不可能以默認的115200波特率獲得與ESP-01的可靠通信鏈接。由於Arduino和ESP-01之間的數據交換數量相當有限,因此我將BAUD率設置為安全的9600波特。
Arduino上的記憶用完
Arduino只有2K的RAM內存。 RAM用於所有全局數據,堆棧數據,甚至用於常量的字符串數據。 Atmel 328 GCC編譯器在消除所有死亡代碼和數據方面做得很好,我很驚訝您實際上可以在少量的RAM中運行1000多行C ++程序。確實需要一些擺弄才能使其適合。
new操作員分配對象:String對象: 頂視圖 | 電源連接器 |
CT連接器 | ESP8266的天線部分 |
底部視圖 | 沒有arduino的底部視圖 |
無arduino和ESP8266的底部視圖 | ![]() |
鈕扣和液晶連接到頂部 | ![]() |
PCB底面 | 帶蓋的盒子 |
here's some code
這是一個桌子:
| 1 | 2 | | | | | adadf | adfadf |