著者:ピータージェンセン
これは、「便利な」IoTプロジェクトでの私の最初の試みです。私はしばらくの間Arduino UNOを持っていましたが、点滅LEDチュートリアルを使用することを除いて、実際には何にも使用しませんでした。それを使用する時が来ました。プロジェクトのアイデアを考えてから、必要なときに必要な情報を探すことはやりがいがあります。もちろん、多くの場合、他の人が同様のことをしていることに気付くことがよくありますが、それは大丈夫です、あなたはまだプロセスから学ぶでしょう。
私の家の電力消費を測定し、状況が変わったときに「クラウド」サービスに報告するデバイスが欲しかった。ライトオン/オフなど。また、ボックスにディスプレイが欲しかったので、現在の消費電力が何であるかを読むことができました。
私は、現在のセンサーをアナログ入力ピンに接続することから始めました。このような:
出典:openEnergymonitor.org
キャリブレーションのために、私は最大10aを測定できるマルチメーターを使用していて、3つの電球ランプに電力を供給しているワイヤーに接続しました。各電球を個別にオン /オフにすることができます。ソケットに60Wの電球を使用すると、60W、120W、180Wのサンプルを入手できました。
注意するには、AC電流がそのワイヤを通過してセンサーに電流を誘導するために、電流センサーは1つのワイヤのみを回避する必要があります。
測定された電流は、電流が包む電力線を通過する電流です。
Arduinoスケッチのloop()で行うすべてのことがanalogRead()を呼び出し、結果をメモリバッファに保存することで、1つのサイクル(60Hz -16.7ms)で約100個のサンプルを取得できます。 Arduinoは16MHzで実行されています。これで、入力のルート平均平方乗(RMS)値をかなり正確に計算するのに十分なはずです。
なぜRMS値が必要なのですか?アナログ入力ピンの入力は、負荷/負荷抵抗の電圧降下です。その電圧低下は、測定時に測定される電力線を通過する電流と直接比例します。
電流と電圧が時間の経過とともに変化する場合、iとvのRMS値を使用して、60Hz洞波の期間にわたる平均電力として電力が計算されます。
V rmsコンポーネントは120Vの電力会社によって一定に保たれているため、興味深いのはi RMS値です。 Arduinoアナログからデジタルへのコンバーターは10ビットであり、回路は洞入力の中間点が2.5Vになるように設計されているため、〜511の読み取り値になります。測定値が時間内に等しく間隔を置いている場合、i rms値は次のように計算できます。
ここで、nは60Hz洞波の完全な期間をカバーするのにかかるサンプルの数、kはマルチメーターで実際のi rms値を測定した後に決定されるキャリブレーション定数であり、v iはanalogRead()への呼び出しによって返される値です。
数学の詳細については、こちらをご覧ください:Wikipedia
<TODO:テスト測定のセットアップの写真を挿入>
Amazon Primeで必要なものをすべて購入しました。あなたがプライムサブスクライバーでない場合、あなたはもう少し支払うことになるかもしれません。一部のアイテムの場合、複数のユニットを購入することは理にかなっています。なぜなら、それはたった数ドルであり、揚げた場合に備えて予備を持っているのはいつでもいいことです。また、2番目の(または3番目の)ユニットを作成したい場合は、すでに必要なものを持っています。
| アイテム | 総コスト | 単位コスト |
|---|---|---|
| Arduino Pro Mini(3パック) | 11ドル | 4ドル |
| 3.3V/5V電源モジュール(5パック) | 9ドル | 2ドル |
| ESP8266 ESP-01(4パック) | 14ドル | 4ドル |
| 2x SCT-013-000非侵襲的AC電流センサー | 26ドル | 13ドル |
| 16x2 LCDディスプレイモジュール | 6ドル | 6ドル |
| 110VAC-> 9Vアダプター | 6ドル | 6ドル |
| 10pcs 4x6cmダブルサイドプロトタイプPCB | 7ドル | $ 1 |
| 10PCS 3.5mmメスPCBマウントジャック | 8ドル | 2ドル |
| その他:コンデンサ、抵抗器、ボタン、ワイヤー | 〜$ 2 | 2ドル |
| 合計 | 89ドル | 40ドル |
これが私がすべてを一緒に配線した方法です:
Digikey Scheme-ITソフトウェアを使用して、上記のハードウェア配線図を作成しました。ブラウザで実行されます!
指摘することがいくつかあります:
ボタンが押されたときに、2行のLCDに示されている情報がこの情報を循環します。
「Advanced Options」が表示されているときに長いプレスが検出された場合、これらの追加画面は回転に含まれています。
オン/オフステータスを変更するか、データをリセットするには、ボタンの長いプレスを実行する必要があります。
総電力 | ラインパワー |
線電流 | 最後のリセット以来の総エネルギー使用 |
ローカルIPアドレス | 高度なオプションを求めてロングプレス |
WiFiトランスミッションオン/オフ | 各サンプル値を送信します |
進行中の送信 |
ブラウザの表示/インターフェイスは現在次のようになります。

黒と赤の線は、家に入ってくる2つのフェーズのそれぞれから引き出された力を表しています。上の左右の矢印ボタンは、前日または翌日に送られます。今日の日には、新しいデータが取得されます。 「リフレッシュ」を押す必要はありません!
これから導き出すことができるもののいくつかは次のとおりです。
「ブラック」スタンバイ消費は約125Wで、「赤」の消費量は25Wです。これは、スタンバイモード(テレビ、電子レンジ、コンピューター、ウェブカメラなど)にあるすべてのデバイスによる寄生抽選です
「ブラック」ラインのアップ/ダウンスクエアパターンは、冷蔵庫のコンプレッサーです。
私は午前6時頃に目が覚め、ライトとテレビをオンにし始めました。テレビは「黒い」ラインから描かれています。
「赤」のスパイクは、私の給湯器の私のCO2ファンです。給湯器は約10分間走ります
給湯器のスパイク後の小さなスパイクは、ガレージのドアの開口部です。
OpenScadを使用してボックスを設計しました。 .scadファイルとレンダリングされた.stlファイルはこのレポであります。ディスプレイ、ボタン、およびさまざまなコネクタ用の切り抜きのあるボックスは次のようになります。

フレーク状の電源
USBから電源に依存すると、アナログピンの測定値にいくつかの薄暗さが生じました。また、ESP-01に電力を供給するためには、3.3Vの供給が必要でした。 Arduino Pro Miniには、UNOのように3.3Vの電圧レギュレータがありません。非常に安価な電源モジュールは請求書に適合し、安定した測定値を確保するのに十分な安定した電力を提供するようです。
ESP8266 ESP-01のボーレート
ArduinoとESP-01モジュールの間のシリアル通信のために、ArduinoにいくつかのデジタルI/Oピンを使用する必要がありました。ソフトウェアをArduinoに点滅させるには、通常のTX/RXピンが必要です。デジタルI/Oピンを備えたソフトウェアシリアルモジュールを使用する場合、デフォルトの115200ボーレートでESP-01への信頼できる通信リンクを取得することはできませんでした。 ArduinoとESP-01の間のデータ交換の量はかなり限られているため、ボーレートを安全な9600ボーに設定します。
Arduinoの記憶が不足しています
Arduinoには2k相当のRAMメモリしかありません。 RAMは、すべてのグローバルデータ、スタックデータ、さらには一定の文字列データに使用されます。 Atmel 328 GCCコンパイラは、すべての死んだコードとデータを排除するのに適した仕事をしています。実際に、その少量のRAMで1000以上のラインC ++プログラムを実行できることに驚いています。しかし、それをフィットさせるにはいくらかの気分がかかります。
newオペレーターを使用してオブジェクトを割り当てることは避けてください。Stringオブジェクトの使用は避けてください: トップビュー | 電源コネクタ |
CTコネクタ | ESP8266のアンテナ部分 |
ボトムビュー | Arduinoなしのボトムビュー |
ArduinoとESP8266のボトムビュー | ![]() |
ボタンとLCDが上部に取り付けられています | ![]() |
PCBの下側 | 蓋付きの箱 |
here's some code
これがテーブルです:
| 1 | 2 | | | | | adadf | adfadf |