我々は、すべて知っている電気エネルギーメーター電力消費量を測定するために、すべての人の家やオフィスに設置されています。ついに毎月のように、私たちの多くは高い電気代を心配し、私たちは時々エネルギーメーターを見なければなりません。しかし、世界中のどこからでも電力使用量を監視し、エネルギー消費量がしきい値に達したときにSMS / Eメールを受信できるとしたらどうでしょうか。ここでは、IoTベースのエネルギーメータープロジェクトを構築しています。
以前、GSMモジュールを使用して請求に関するSMSを送信するエネルギーメーター回路を構築しました。このプロジェクトでは、ArduinoとESP8266 Wi-Fiモジュールを使用してスマート電気エネルギーメーターを作成します。これにより、電気料金のSMS / Eメールを送信できるだけでなく、いつでもどこからでもエネルギー使用量を監視できます。ここでは、電流センサーACS712を使用してエネルギー消費量を測定しました。これについては後で説明します。
私たちは、の助けになりますIFTTTのSMS / Eメール通知に当社のWi-Fiをリンクするためのプラットフォームを。また、MQTT Dashboard Androidアプリを使用して、エネルギー使用量を監視します。では、始めましょう…。
必要な材料:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp電流センサー
- ACアプライアンス
- オス-メスワイヤー
ACS712電流センサーの動作:
プロジェクトの構築を開始する前に、ACS712電流センサーがプロジェクトの主要コンポーネントであるため、その動作を理解することが非常に重要です。電流、特にAC電流の測定は、ノイズと不適切なアイソレーションの問題などが原因で常に困難な作業です。しかし、Allegroのものによって設計されたこのACS712モジュールの助けを借りて、はるかに簡単になりました。
このモジュールは、エドウィン・ホール博士によって発見されたホール効果の原理に基づいて動作します。彼の原理によれば、電流が流れる導体が磁場に置かれると、電流と磁場の両方の方向に垂直なエッジの両端に電圧が生成されます。概念を深く掘り下げないでください。簡単に言えば、ホールセンサーを使用して、通電導体の周囲の磁場を測定します。この測定は、ホール電圧と呼ばれるミリボルトで行われます。この測定されたホール電圧は、導体を流れていた電流に比例します。
ACS712電流センサーを使用する主な利点は、AC電流とDC電流の両方を測定できることと、負荷(AC / DC負荷)と測定ユニット(マイクロコントローラー部分)を分離できることです。写真に示すように、モジュールにはそれぞれVcc、Vout、Groundの3つのピンがあります。
2ピン端子台は、通電ワイヤを通過させる場所です。モジュールは+ 5Vで動作するため、Vccには5Vから電力を供給し、アースをシステムのアースに接続する必要があります。Voutピンのオフセット電圧は2500mVです。つまり、ワイヤに電流が流れていない場合、出力電圧は2500mVになり、流れる電流が正の場合、電圧は2500mVより大きくなり、流れる電流が負の場合、電圧は2500mV未満になります。
Arduinoのアナログピンを使用してモジュールの出力電圧(Vout)を読み取ります。これは、ワイヤに電流が流れていない場合は512(2500mV)になります。この値は、電流が負の方向に流れると減少し、電流が正の方向に流れると増加します。以下の表は、ワイヤを流れる電流に基づいて出力電圧とADC値がどのように変化するかを理解するのに役立ちます。
これらの値は、ACS712のデータシートに記載されている情報に基づいて計算されています。以下の式を使用してそれらを計算することもできます。
Vout電圧(mV)=(ADC値/ 1023)* 5000ワイヤを流れる電流(A)=(Vout(mv)-2500)/ 185
これで、ACS712センサーがどのように機能し、何が期待できるかがわかりました。回路図に進みましょう。
このセンサーを使用して、PICマイクロコントローラーとACS712を使用したデジタル電流計回路を作成しました。
回路図
ステップ1: 資格情報を使用してIFTTTにログインします。
ステップ2: [マイアプレット]で、[新しいアプレット]をクリックします
ステップ3: + thisをクリックします
ステップ4: AdaFruit を 検索してクリックします。
ステップ5: [AdaFruitIOの フィード を 監視する]を クリックします。
ステップ6:選択して フィードを 、法案として の関係を 「と に等しい」 としきい値 値 あなたは電子メールを表示したい時に。[アクションの作成]を クリックし ます 。しきい値トリガー値として4を使用しました。
ステップ7: + thatを クリックします。Gmailを検索してクリックし、Gmailの資格情報を使用してログインします。
ステップ8:自分にメールを送信するをクリックします。
ステップ9:図のように被写体と体を書き、クリックして作成します。
ステップ10:「 レシピ 」の準備ができました。確認して、[完了]をクリックします。
これで、Web統合は完了です。コーディング部分に移りましょう。
コードと説明:
ESP12とArduinoの間でシリアル通信を使用しています。そのため、送信と受信のためにArduinoとNodeMCUの両方のコードを作成する必要があります。
送信機部分のコード、つまりArduino Unoのコード:
完全なArduinoコードは、このチュートリアルの最後にあります。このリンクからダウンロードできる電流センサー用のライブラリを使用します。
このライブラリには、電流を計算する関数が組み込まれています。電流を計算するコードを書くことができますが、このライブラリには正確な電流測定アルゴリズムがあります。
まず、電流センサーのライブラリを次のように含めます。
#include "ACS712.h"
NodeMCUに送信するための電力を格納するアレイを作成します。
チャーワット;
PINA0でACS712-30Ampを使用するインスタンスを作成します。20アンペアまたは5アンペアのバリアントを使用している場合は、最初の引数を変更します。
ACS712センサー(ACS712_30A、A0);
セットアップ 機能、NodeMCUと通信するために115200のボーレートを定義します。正確な測定値を取得するには、 sensor.calibrate() 関数を呼び出して電流センサーを校正します。
void setup(){ Serial.begin(115200); sensor.calibrate(); }
では ループ 機能、我々は呼ぶ sensor.getCurrentACを(); 現在の値を取得し、float変数Iに格納する関数。電流を取得した後、P = V * Iの式を使用して電力を計算します。230Vはヨーロッパ諸国で一般的な標準であるため、使用しています。必要に応じて、お近くの地域に変更してください
void loop(){ float V = 230; float I = sensor.getCurrentAC(); フロートP = V * I;
これらのラインは電力をWhに変換します。
last_time = current_time; current_time = millis(); Wh = Wh + P *((current_time -last_time)/3600000.0);
ここで、この dtostrf()の ために、この Wh を文字形式に変換してNodeMCUに送信する必要があり ます。 floatをchar配列に変換して、簡単に印刷できるようにします。
dtostrf(Wh、4、2、ワット);
形式は次のとおりです。
dtostrf(floatvar、StringLengthIncDecimalPoint、numVarsAfterDecimal、charbuf);
Serial.write() を使用して、この文字配列をシリアルバッファに書き込み ます。 関数。これにより、 Wh 値がNodeMCUに送信されます。
Serial.write(ワット); delay(10000); }
レシーバーパーツNodeMCUESP12のコード:
このためには、このリンクからダウンロードできるAdaFruitMQTTライブラリが必要です。
次に、ArduinoIDEを開きます。例に移動-> AdaFruitMQTTライブラリ-> mqtt_esp8266
このコードは、AIOキーとWi-Fi資格情報、およびArduinoからの受信シリアルデータに従って編集します。
まず、ESP12Wi-FiモジュールとAdaFruitMQTTのすべてのライブラリを含めました。
#include
ESp-12eを接続するWi-FiのSSIDとパスワードを定義します。
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
このセクションでは、AdaFruitサーバーとサーバーポートを定義します。これらはそれぞれ「io.adafruit.com」と「1883」として固定されています。
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
これらのフィールドを、フィードの作成中にAdaFruitサイトからコピーしたユーザー名とAIOキーに置き換えます。
#define AIO_USERNAME "********" #define AIO_KEY "******************************"
次に、MQTTサーバーに接続するためのESP12WiFiClientクラスを作成しました。
WiFiClientクライアント;
WiFiクライアントとMQTTサーバーおよびログインの詳細を渡して、MQTTクライアントクラスをセットアップします。
Adafruit_MQTT_Client mqtt(&client、AIO_SERVER、AIO_SERVERPORT、AIO_USERNAME、AIO_KEY);
変更を公開するために、 「Power」 および 「bill」 と呼ばれるフィードを設定します。
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish(&mqtt、AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish(&mqtt、AIO_USERNAME "/ feeds / bill");
では 、セットアップ 機能、我々は、Wi-FiアクセスポイントへのWi-Fiモジュールを接続します。
void setup(){ Serial.begin(115200); delay(10); Serial.println(F( "Adafruit MQTTデモ")); // WiFiアクセスポイントに接続します。 Serial.println(); Serial.println(); Serial.print( "接続中"); Serial.println(WLAN_SSID); WiFi.begin(WLAN_SSID、WLAN_PASS); …。 …。 … }
では ループ 機能、我々はアルドゥイーノからの着信データをチェックし、AdaFruit IOにこのデータを公開します。
void loop(){ // MQTTサーバーへの接続が有効であることを確認します(これにより、//最初の接続が確立され、切断されると自動的に再接続されます)。以下のMQTT_connect //関数定義を参照してください。MQTT_connect(); int i = 0; フロートワット1;
この関数は、Arduinoからの着信データをチェックし、serial.read()関数を使用してこのデータをワット配列に格納します。
if(Serial.available()> 0){ delay(100); //送信されたすべてのシリアルを一緒に受信できるようにします while(Serial.available()&& i <5){ watt = Serial.read(); } watt = '\ 0'; }
atof() 関数は文字をfloat値に変換し、このfloat値を別のfloat変数watt1に格納します。
watt1 = atof(watt);
電力(Wh)にエネルギー料金を掛けて請求額を計算し、それを1000で割って電力をKWhにします。
bill_amount = watt1 *(energyTariff / 1000); // 1unit = 1kwH
これで公開できます!
Serial.print(F( "\ nSending Power val")); Serial.println(watt1); Serial.print( "…");
このコードは、電力値を 電力 供給に公開しています
if(!Power.publish(watt1)){ Serial.println(F( "Failed")); } else { Serial.println(F( "OK!")); }
これにより、電気料金が 請求書 フィードに公開されます。
if(!bill.publish(bill_amount)){ Serial.println(F( "Failed")); } else { Serial.println(F( "OK!")); }
請求額は急速に変化する可能性がありますが、IFTTTはアプレットをトリガーするのに時間がかかるため、これらの行はトリガーする時間を与えて、しきい値の電子メールを受信できるようにします。
メールを受け取る bill_amountの 値を変更します。また、IFTTT AdaFruitIOセットアップの変更。
if(bill_amount == 4){ for(int i = 0; i <= 2; i ++) { bill.publish(bill_amount); delay(5000); } bill_amount = 6; }
ArduinoとNodeMCUESP12の完全なコードは 、このチュートリアルの最後にあります。
次に、両方のボードにコードをアップロードします。回路図に示すようにハードウェアを接続し、io.adafruit.comを開きます。作成したダッシュボードを開きます。電力消費量と電気料金が更新されていることがわかります。
請求額が 4インドルピーに 達すると、次のようなメールが届きます。
電力消費量を監視するためのAndroidアプリ:
Androidアプリを使用して値を監視できます。このためには、PlayストアまたはこのリンクからMQTTダッシュボードAndroidアプリをダウンロードしてください。
io.adafruit.comとの接続を設定するには、次の手順に従います。
ステップ1: アプリを開き、「+」記号をクリックします。クライアントIDに必要なものを入力します。サーバーとポートは、スクリーンショットに示されているものと同じままです。以下に示すように、AdaFruit IOダッシュボードからユーザー名とパスワード(アクティブキー)を取得します。
アクティブキーはパスワードです。
ステップ2:電気メーターを選択し、サブスクライブを選択します。サブスクリプションでは、わかりやすい名前とトピックを指定します。トピックの形式は「 yourusername」/ feeds /「feedname」で 、 「作成」 をクリックします。
ステップ3:同様に、請求書フィードのサブスクリプションを作成します。
ステップ4:アプライアンスがエネルギーを消費すると、更新された値が 電力 と 請求書の 下に表示されます。
これは、世界中のどこからでも監視できるだけでなく、電力消費量が多いときに電子メールをトリガーできるスマート電力エネルギーメーターを作成する方法です。
また、すべてのIoTプロジェクトを確認してください。