Modbus、MKR WiFi 1010、RS485を介してエネルギー料金を監視する
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
| |||
| ||||
| ||||
|
アプリとオンラインサービス
> |
| |||
| ||||
|
このプロジェクトについて
あなたが本当にあなたの家をよりスマートにしたいのなら、あなたはおそらくあなたの毎月の請求書(すなわち、エネルギー、ガスなど)から始めたいと思うでしょう。一部の人が言うように、惑星、財布、そして収益に良い 。オープンソースハードウェアは、家庭環境で持続可能性に到達するための私たちの方法です!このアイデアにより、MQTTを介してデータを公開するため、ホームオートメーションソフトウェアと簡単に統合できるシンプルで安全なソリューションを構築できました(この場合、Home Assistantに統合する方法を紹介します)。
概要
電気エネルギー消費量を測定するために、Finderエネルギーメーターを使用することにしました。これは、DINレール用に設計されており、家のメインキャビネットに完全に収まるためです。この製品の優れた点は、 RS485 Modbus を搭載していることです。 インターフェイス、Arduinoとの通信を非常に簡単にする業界標準の通信プロトコル。実際、Arduinoは公式の盾である MKR485 をリリースしました。 プロトコルをデコードするための2つのライブラリ。メインボードとして、 Arduino MKR WiFi を選択しました 1010、 MKRフォームファクターを共有し、WiFi接続を備えているためです。
セットアップ
警告! 家の電気システムの取り扱いに関する国の規制を確認し、致命的となる可能性があるため、細心の注意を払ってください。わからない場合 どのように、電気技師に電話してください。 最初のステップは、電気キャビネットにメーターを取り付けることです。安全な環境で作業していることを確認するために、システムの前にある電気端子の電源を切ってください および端子間に電圧がないことをマルチメータで再確認します 。
次に、エネルギーメーターをキャビネット内に配置し、メインブレーカーからのライブワイヤーとニュートラルワイヤーをメーターの入力に接続します。色の規則を使用することを忘れないでください(ニュートラルの場合は青、EUでのライブの場合は茶色/黒/灰色)。出力はシステムの残りの部分に接続する必要があります。
<図>終わり? RS485接続をねじ込む時が来ました!通常は電話回線に使用される、アース付きツイストペアケーブルを使用します。このケーブルを使用すると、長距離(1.2 km)で伝送できます。ただし、キャビネットを出て、arduinoをアクセス可能な場所に配置するのに十分な長さのケーブルを使用するだけです。
<図>RS485インターフェースは、その端子にA、B、およびCOMという名前を付けます。
MKRシールドは全二重もサポートしているため、他に2つの端子YとZが表示されます。データシートから半二重通信はYとZでのみ発生することがわかっているため、ここではケーブルのもう一方の端をねじ込みます。端子。 COM端子はISOGNDに接続する必要があります。半二重接続を使用し、ケーブル接続がピアツーピアであるため、セットアップと一致するようにMKR485シールドのスイッチをセットアップする必要があります。 HALF(2からOFF)に設定し、YZ(3)で終端します。オンに);最初のものは関係ありません。 終端は、干渉を減衰させるために2つのデータ端子を接続する抵抗です。
<図>これです。これで、キャビネットを閉じてソフトウェア側に集中できます!
ソフトウェア
コンピュータを起動し、IDEを開きます。 ArduinoIDEまたはArduinoCreateEditorを使用できます。コードは次の要求を満たしています:
- Modbus通信、
- WiFi管理
- MQTTプロトコル
Modbusは、産業用センサーおよび機械用のオープンソースプロトコルです。 ArduinoにModbusを話させるために、ArduinoModbusライブラリを使用します。このライブラリはすべてのハンドラーをパックし、Modbusデバイスの接続を非常に高速にします。メーターのデータシートに従ってレジスターを読み取るので、機能コード、レジスターのアドレス、レジスターのサイズなど、必要なすべての情報を単語で見つけることができます。しかし、明確にするために、Modbusがどのように機能するかを説明しましょう:
Modbusメッセージは単純な構造に従います:
01 03 04 00 16 00 02 25 C7
0x01
デバイスアドレスです
0x03
機能コードです これは、データの読み取りまたは書き込みを行うかどうかをデバイスに通知します*この場合は保持レジスタの読み取り
0x04
Byte Count00 16 の場合 - 4バイトのレジスタアドレスを送信します (00 16)読みたいものをデバイスに伝えます
00 02
-レジスタのサイズ (00 02)言葉で (すべての単語の長さは2バイトです)
最後の4バイトはCRCコードです 。このコードは、前のバイトの数学関数から生成されます。これにより、メッセージが正しく受信されたことが保証されます。
Arduinoでは、これらすべてのものは if
で処理されます 状態:
// AlbertoPerroによって作成-OfficineInnesto ////レジスターを保持しているmodbusデバイスから整数を読み取りますfloatreadCurrent(){float ampere =0。; //次のコマンドはリクエストをフォーマットしてRS485経由で送信しますif(!ModbusRTUClient.requestFrom(0x01、HOLDING_REGISTERS、0x0016、2)){//エラー処理Serial.print( "電圧の読み取りに失敗しました!"); Serial.println(ModbusRTUClient.lastError()); } else {uint16_t word1 =ModbusRTUClient.read(); //バッファからMSWを読み取るuint16_tword2 =ModbusRTUClient.read(); //バッファからLSWを読み取るint32_tmilliamp =word1 <<16 | word2; //単語を結合してintアンペアを取得=milliamp / 1000.0; //アンペアに変換} return ampere;}
else
一部には、応答ハンドラーがあります。
このレジスタは2ワードの長さであるため、2進演算で結合する必要があります。バッファからワードを読み取り、16ビット長の符号なし整数(2バイトまたはワード)に格納してから、最初のワードを左にビットシフトする32ビット長の符号付き整数に結合し、<コードを適用します。>または 2番目の単語の上。このようにして、電流測定値をmAで取得し、それを1000で割ると、電流はアンペアになります。
これと同じプロセスが、読みたいものすべてに適用されます。
残りのコードは、MQTTおよびWiFiネットワーキングの処理専用です。
HomeAssistantの統合
HomeAssistantにメーターを追加するのは非常に簡単です。 MQTTブローカーが構成されていると仮定すると(ここにガイドがあります)、あなたがする必要があるのは、configuration.yamlファイルの下に新しい定義を追加することだけです。
センサー:-プラットフォーム:mqtt名: "メイン電圧" state_topic: "エネルギー/メイン/電圧" unit_of_measurement: "V"
ここには、測定の名前、読み取るMQTTトピック、および数量の測定単位を入力する必要があります。ファイルを保存し、構成を確認してHome Assistantをリロードすると、測定値がメインページに表示されます。
<図>Home Assistantは、グラフの作成を処理し、読み取り値によってトリガーされるプロセスを自動化します。このチュートリアルは終了しました。機能を追加して、自分の目的に合わせてカスタマイズするのはあなた次第です!
コード
Finder用のModbusRTUからMQTTブリッジ
このスケッチは、ファインダーエネルギーメーターとmqttの間の完全なブリッジを提供します。カーサジャスミナの電気料金と使用量を監視するために開発されました。製造プロセス
- ArduinoとRaspberryPiを使用してインターネット制御のビデオストリーミングロボットを構築する
- Arduinoを使用してモニターをAmbilightにする
- Arduinoエネルギーモニターとデータロガーを構築する方法
- LCDアニメーションとゲーム
- Arduinoとスマートフォンを使用したDIY電圧計
- IoTを使用した心拍数モニター
- ArduinoTemp。 3.2ディスプレイを備えたモニターとリアルタイムクロック
- Arduino UnoWiFiを使用したWebServerBlink
- Arduino-シリアル経由でWebに温度を送信
- Python3とArduinoコミュニケーション
- エネルギーの形態:運動エネルギーと位置エネルギー