Modbus、MKR WiFi 1010、RS485でエネルギー消費を監視
必要な部品と材料
| Arduino MKR WiFi 1010 | ×1 |
| Arduino MKR 485 Shield | ×1 |
| USB-A - Micro-USBケーブル | ×1 |
| USB電源アダプタ(MKR485シールドに7-24V降圧コンバータ内蔵) | ×1 |
| ツイストペアシールドケーブル(電話線タイプ) | ×1 |
必要な工具
- デジタルマルチメータ(電圧確認用)
- 電工ハサミ
- 小型マイナスドライバ(MKR485端子台用)
- 中型プラスドライバ
使用するアプリとオンラインサービス
- Home Assistant
- Arduino Web Editor
- MQTT
プロジェクト概要
スマートホーム化の第一歩は、月々の光熱費(電気、ガス等)の把握から。「地球にも財布にも、そしてボトムラインにも良い」オープンソースハードウェアで持続可能な家庭環境を目指します。任意のホームオートメーションソフトと連携しやすいよう、MQTTでデータを公開する設計です(ここではHome Assistant連携を例示)。
概要
電力量計測には、DINレール取付型のFinderエナジーメーターを採用。家庭のメイン分電盤にぴったり収まり、RS485 Modbus インターフェースを備えます。Modbusは産業標準プロトコルで、Arduino公式のMKR485シールドと2つのライブラリで簡単に通信可能。メインボードにはMKRフォームファクタ共通でWiFi搭載のArduino MKR WiFi 1010を選定。
セットアップ(電気工事資格が必要です)
警告! 国の電気工事規定を確認し、感電死のリスクを理解した上で作業してください。不安な場合は電気技師に依頼してください。
- 分電盤の上流ブレーカーをOFFにし、テスターで端子間電圧がゼロであることを確認。
- エナジーメーターをキャビネット内に設置。上流ブレーカーからの電線(EUカラー:青=中性線、茶/黒/灰=電源線)をメーター入力側に接続。出力側を家庭側負荷へ接続。
- RS485通信線(ツイストペアシールドケーブル、最大1.2km伝送可能)をキャビネット外へ引き出し、Arduinoをアクセスしやすい場所に配置。
- RS485端子はA、B、COM。MKR485シールドは全二重対応でY、Z端子もありますが、半二重通信ではY/Zを使用。COMはISOGNDへ接続。シールド上のスイッチ設定:HALF(2をOFF)、終端抵抗Y-Z(3をON)。1つ目は不要。



これでハードウェアは完了。キャビネットを閉じてソフトウェア側へ進みます。
ソフトウェア
Arduino IDEまたはArduino Create Editorで開発。以下の3要素を統合:
- Modbus通信
- WiFi管理
- MQTTプロトコル
ArduinoModbusライブラリを使用し、メーターのデータシートに従ってレジスタ読み出し(ファンクションコード、アドレス、ワード数)を行います。Modbusメッセージ構造とArduinoでの処理例:
// Alberto Perro - Officine Innesto
// Modbus保持レジスタから整数値を読み取り(電流値 mA → A)
float readCurrent() {
float ampere = 0.0;
if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0016, 2)) {
Serial.print("failed to read voltage! ");
Serial.println(ModbusRTUClient.lastError());
} else {
uint16_t word1 = ModbusRTUClient.read(); // MSW
uint16_t word2 = ModbusRTUClient.read(); // LSW
int32_t milliamp = (word1 << 16) | word2; // 32bit結合
ampere = milliamp / 1000.0; // Aに変換
}
return ampere;
}
同様の手順で電圧、電力、積算電力量等を取得。残りのコードはMQTTパブリッシュとWiFi再接続処理です。
Home Assistant連携
MQTTブローカーが設定済みなら、configuration.yaml にセンサ定義を追加するだけ:
sensor:
- platform: mqtt
name: "Main Voltage"
state_topic: "energy/main/voltage"
unit_of_measurement: "V"
保存→設定チェック→再起動で、メイン画面にグラフ表示され、自動化トリガーとしても利用可能。

あとは用途に合わせて機能拡張・カスタマイズしてください!
コード
Modbus RTU - MQTT ブリッジ(Finderメーター用)
Casa Jasminaでの電気代・使用量監視のために開発。完全なスケッチはGitHub等で公開予定。
製造プロセス
- Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- Arduinoで作る高精度エナジーモニター&データロガー – Dr. Wattsonボード活用
- Arduino UNOで作るLCDアニメーション&ゲーム入門
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- Arduino Dueと3.2インチTFTで作る温度監視付きリアルタイムクロック
- Arduino UNO WiFi Webサーバー:ブラウザからLEDをON/OFF制御
- Arduino UNO + WiFiシールドで温度をWebリアルタイム表示 — シリアル出力だけでグラフ化
- Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
- 運動エネルギーと位置エネルギーの理解:形態、公式、日常の例