TWELITE:ガスメーターのパルス発信をカウントして、ガス使用量を計測する➀

HEMS/IoT
スポンサーリンク

TWELITEのパルスカウントを使用して、ガス使用量を計測する。試作品でデータを取れるところまでやってみる。方法は、ガスメーターから流量毎のパルス発信を計測して、ガス使用量を算出。ガスメーターは、10年目の交換時期にHEMS対応のモノに変更を希望するとガス会社へ依頼。パルス発信機能付きのガスメータに交換している。

準備:ここで使用するモノ

使用するモノ部品の画像説明
TWELITE PALアンテナ付TWELITE
電池を入れれば直ぐに使用可能。
パルスカウント用にデータを入れ替える。
MONOSTICKデータ送受信用のUSB
データはNode-redで処理させる
TWELITE R2TWELITE PALのアプリ書き換え用
書き換えは、PCで行う
PCへはUSBで接続。R2:C-Type
R2接続ユニットTWELITE PALとR2の接続用
+C-typeのUSBケーブルが必要
CR2032 電池 使用状況によるが
1年~3年程度交換不要
Raspberry pi 型式の指定は無。
ここではB+を使用。
microSDカード 64GB
配線関係ブレッドボード 1個
ジャンパ線 6本
ソケット12pin x 2 を準備
PC(設定用)TWELITE STAGE SDK用
windows、Mac、Linuxで動作
10年以上前のPC。windows10
パルス発信付
ガスメーター
パルス発信の設定がされたガスメータ
このモデルは出荷時に設定が必要
1m3で、1000パルスに設定した

ガスメーターのパルス発信設定は、工場出荷時に設定されている。
出荷後の変更はできないので、
新築や10年毎の交換時期に合わせて、パルス発信機能付きの指定を事前にガス会社へ連絡しておく必要がある。
パルス発信の頻度も連絡する必要がある。

ガスメーターのパルス仕様(LPガス)
E・E4型保安ガスメーター 名称:ETG25MTH
パルス単位:
 1L/P(これを選択),10L/P(標準仕様),100L/P,1000L/P
電気的条件
 定格容量電圧 DC24V
 定格容量電流 10mA
論理的条件
 パルス幅 150~250mS

配線

ピン:28 を ピン:22~25へ接続
ピン:11 を ガスメータの外+へ接続
ピン:14 を ガスメータの外-へ接続

VCC(ピン:28)と、アナログ入力1~4(ピン:22~25)
を接続するのは、
アナログ入力を使用しないときは、VCCと接続するように記載があるために接続。

パルスの受信は、
パルスカウント用PC1(ピン:11)とGND(ピン:14)
を接続して受信。

電源は、CR2032のボタン電池。
HPによると電池の寿命は、
起床のタイミングやパルス発信回数によるが、1~3年程度。
TWELITE 消費電力

ガスメーターとTWELITEの間にリレーを入れようと試したが上手く行かず、直結して使用している。

パルスカウンタ用のサンプルアプリを書き換え

TWELITE Stage で、パルスカウンタのサンプルアプリを編集して使用する。

サンプルアプリの編集は、textエディタでも編集できるが、
Visual Studio Code ※使い方のメモ
を使用すると編集性が向上し使いやすく、見やすくなる。

サンプルアプリの保存場所:
 ”C:\MWSTAGE\MWSDK\Act_samples\PulseCounter”
 ※MWSTAGEの場所は、インストール時の設定で変わる。
  上記はデフォルトの保存先
ファイル名:PulseCounter.cpp

オリジナルを残すために、PulseCounterフォルダのコピーを残しておく。
編集するほうは、フォルダ名、ファイル名を変更する。
オリジナルを残しておけば、元に戻したり、変更箇所の比較も可能。

編集個所➀ 通信設定

6行目にある下記を変更する。 ”=”の後にある数値を変更。

  1. // application ID:アプリケーションID
  2. // channel:周波数チャンネル
  3. // id:子機ID
/*** Config part */
// application ID
const uint32_t APP_ID = 0x67720102; //2.アプリケーションID

// channel
const uint8_t CHANNEL = 18;  //1.周波数チャンネル

// id
uint8_t u8ID = 0x04;  //3.子機のID

1.周波数チャンネル 2.アプリケーションID

周波数チャンネルを合わせておく必要がある。 
アプリケーションIDを設定することで、通信グループを作成できる。
同一周波数チャンネルでもグループを分けることで通信を分けることができる。
通信をするには、周波数チャンネルとアプリケーションIDを通信グループ内の端末で合わせる必要がある。

周波数チャンネルとアプリケーションID ※説明のあるメーカーサイトのリンク

3.子機のIDを設定

子機のIDを設定することで、子機を識別できるようになる。
初期値でも運用可能。

論理デバイスID ※説明があるメーカーサイトのリンク

編集個所②

53行目にある下記**の部分を変更する。パルスによる動作の設定

  1. **// 1 count to wakeup
  2. PIN_INT_MODE::**// FALLING:RISING edge
/*** begin procedure the first call */
void begin() {
	// start the pulse counter capturing
	PulseCounter.begin(
		  1 // 1 count to wakeup 1.スリープ解除するカウント数
		, PIN_INT_MODE::RISING // FALLING:RISING falling edge 2.立上り、立下りの指定

		);

	sleepNow();
}

1.起床割り込みを発生させるためのカウント数

**// 1 count to wakeup の**にスリープ状態からの起床させるパルスカウント数を入れる。
初期値は、”100”になっているが、細かくしたいので、”1”に変更している。

**= 1にすると、TWELITEはパルスカウント 2カウントでデータを送信してくるが、
**=10にすると、TWELITEはパルスカウント10カウントでデータを送信してくる

**=0は、起床要因にならないとメーカーサイトに記載があり。
どこでカウントが変わるのかなど、まだ試していないことはある。
データとしては、1カウントで欲しいと考えていたが、**=0の時の電池消費量が気になるので、**=1で運用することにした。

ガスメータ パルス発信のタイミング
・1ℓ=1パルス
・1㎥=1000パルス

②2.割り込みの立上り、立下りを指定

PIN_INT_MODE::**// FALLING:RISING edge
割り込みが立上りか立下りを指定する。
違いがよくわからないが、なんとなく立上りを指定した。
初期値は、立下り
立上り…PIN_INT_MODE::RISING
立下り…PIN_INT_MODE::FALLING

TWELITE PAL パルスカウント用のアプリに書き換え

書き換えは、TWELITE R2を接続して行う。
R2 接続ユニットの配線
R2 接続ユニットの配線は上のリンク先で行っています。
PCとは、USBで接続。R2側はC-type。
TWELITE R2に直接ゼロプレッシャーICソケットを取り付けることもできるが、
基盤に取り付け後のTWELITEのデータ書き換えを行う際、
ゼロプレッシャーICソケットの脱着が必要だが、足が折れやすいためこの形にしている。

PCに接続して、TWELITE STAGEを使用してTWELITE PALのアプリ書き換えを行う。
アプリは、上記で設定したPulseCounterアプリ。

アプリ書き換え方法

アプリの書き換えは、上記のリンク先を参考に行っている。

受信側の準備:Raspberry pi

TWELITE が送信したデータ受信は、Raspberry piに接続したMONOSTICKで受信する。
データの処理は、Node-REDで処理をする。
MONOSTICKの設定

application ID:アプリケーションID
channel:周波数チャンネル

通信を行うTWELITE PALとアプリケーションID,周波数チャンネルを合わせておく必要がある。
設定は、TWELITE STAGEで行う。

MONOSTICKの設定

MONOSTICKの設定は、上のリンク先を参考に行っている。

パルスカウンタのテスト

パルスカウントのテストとして、スイッチや電池を接続したりしてみたが、思うようなデータが取れなかった。
実際にガスメーターに取り付けてテストしてみたら、パルスのカウントができた。
プログラムでの指示通りに通信できることも確認できた。

送られてくるデータはこんなデータ。次の項目で必要な部分だけに分ける処理をNode-REDで行っていく。

:04AA00810A722E000000004B0008504C5331000D0002A5

電池の電圧を送信データに織り込みたいがうまく行っていない。

Node-REDで受信とデータ処理をする

コード記述無しのNodeフローで作ろうとしたが、下図のように複雑になり過ぎるので、16進数→10進数の変換のみ、3行のコードを記述して簡略化した。
16進数→10進数変換ができるNodeが欲しいところだが、探しても見つからなかった。

抽出するデータ

  1. 子機のID
  2. 送信時のパルスカウント数
  3. 送信回数

3.送信回数は、2Byteで0~65535回まであり、数値化しておいた方が扱いやすい。
2.送信時のパルスカウント数は、10以上になる場合は、数値化しておく必要があるが、
ここでは、2までなので行っていない。
1.子機のIDは、識別するだけなので数値化は不要。

Nodeフローの詳細 ←中身はここから参照してください。

16進数→10進数への変換する関数があるので、それを使えば良いのだが、
関数を使わずに作成するとこのようなNodeフローになった。

TWELITE PAL パルスカウンタの動作

TWELITE PALのPulseCounterは、スリープ中でもパルスカウントを行うことができる。
スリープ中は、省電力化しているため、電池の長寿命化になる。
**// 1 count to wakeup の**に設定したカウント数に達すると起床して、データを送信する。
送信されるデータは、編集個所➀で設定した内容と、送信回数1~65535回、送信毎のパルスカウント数。
パルスカウントは、データ送信後にリセットされる。

ガスメーター
パルス発信
pls1pls2pls3pls9pls10pls11
時間1秒2秒3秒9秒10秒11秒
カウント10
TWELITEsleepsleepsleepsleepwake upsleep
データ送信
消費電流1.5μA3.0μA4.5μA13.5μA44.0μA45.5μA
1秒毎にパルス発信、10パルス毎に送信として計算。消費電力は、Sleep 1.5μA、送信:29μA(2.5ms)

取得データの処理

ここでは、パルスカウント数を取得するところまで。
データベースへの登録、グラフの作成などは、別記事を作成することにする。

コメント