接点入力可能な SORACOM LTE-M Button Plus はOnは検出できるのですが、Off(Close->Open)の立下りエッジが検出できないので、ATtinyを使って立上り、立下り時それぞれで異なるパルスをLTE-Mボタンへ入力して通知してみました。
はじめに
SORACOM LTE-M Button Plus 通称「ヒゲボタン」はモノからの信号、例えばマグネットスイッチやリミットスイッチの接点信号を接続しておけばスイッチの開閉を通知することができます。そんな訳で何かの装置の信号を送信したいと思っていました。
SORACOM LTE-M Button Plusの課題
ところが、「接点信号のONは検出できるが、Offを検出できません。」
仕様にも「信号検知: Open -> Close の片エッジ」とあります。
SORACOM LTE-M Button Plus の接点入力はOnとなった(短絡された)時間の長さと回数でSingle, Double, Longを区別します。つまりそれぞれ一定長のパルス状である必要があります。
ところが、設備や装置の接点信号には何かの状態や警報を示している間ずっとOnになっている接点信号がよくあります。例えばUPSがバッテリ運転中であったり、温度警報が発生していると解除するまで接点信号がOnで続いています。
そのままLTE-Mボタンに入力しているとOnになった際に Long と検知して送信し、Offになっても何も送信しません。
使用上の注意点として明記されています。
「Close 状態を維持し続けた場合、その間の消費電力が増加します。通常時は Open になるようにシステム設計をしてください。」
対策: 立上り・立下りをトリガにする
なんとかするには、接点入力の立上り、立下りそれぞれを検出してLTE-Mボタンにパルス状の信号を送信する必要があります。
マイコンによるパルス生成
監視対象の接点信号とLTE-Mボタンの間にマイコンで信号を変換することにしました。たぶん一番簡単。
ラズパイやArduinoでも良いのですが、ちょっと豪華すぎるのと、小型化して電池駆動したいのでATtinyを使用しました。
接点入力を監視しておき、立上りを検出すると(Open->Close)LTE-Mボタンへパルス出力する。立下り(Close->Open)を検出すると異なる種類のパルスを出力します
立上り: Long Click
立下り: Double Click
としました。Single Clickは取り付け時のテスト送信ボタン機能用に残しています。
回路はこちら、手元にあった部品でまかなったので、ちょっと大げさですが5Vのリレーをトランジスタ2SC1815でOn/Offしています。リレーなので完全に無電圧接点出力となり、LTE-Mボタンへ安全に出力します。
弱った単3電池を使ったので、4本ですが5V程度です。
ATtiny13A
ラズパイやarduinoでも良かったのですが、小型にしたいのでATtiny13を使用しました。
ATtinyは小型のAVRマイコンでATtiny13Aは秋月で50円です。Arduino IDEが使えるのも手軽な点です。
秋月電子: AVRマイコン ATtiny13A-PU
Arduino IDEとArduinoでATtinyにプログラムを書き込む
先駆者の方々が詳細に方法を公開されてます。感謝です。こちらを参考に環境を構築します。
Arduino IDE で ATtiny 他の開発 – kosakalab
https://make.kosakalab.com/make/electronic-work/arduino-ide-dev/
ATTiny開発環境の構築
http://workpiles.com/2017/05/arudino-isp-attiny/
手順
要約すると
Arduino UNOをAVRライタに設定する
Arduino IDEをArduino UNOに接続し、[スケッチの例]-[ArduinoISP]-[ArduinoISP]をArduino UNOに書き込む。
こちらを参考に、[ファイル]-[環境設定]-[追加のボードマネージャのURL]にリンクを追加してから
https://make.kosakalab.com/make/electronic-work/arduino-ide/attiny10-13_dev/
Arduino IDEの[ボードマネージャ]に bitDuino13を追加する。
Arduino UNOとATtiny13を接続
Arduino UNOを書込み装置に使用する為、Arduino UNOの次の端子をATtinyに接続する。
UNO - ATTiny13A ------------------------------ +5V - VCC (8) GND - GND (4) SS (Digital 10) - RESET (1) MOSI (Digital 11) - MOSI (5) MISO (Digital 12) - MISO (6) SCK (Digital 13) - SCK (7)
ATtiny13Aへ書き込み
Arduino IDEを以下に設定し、Arduino UNOを経由してコンパイル、書込み。
プログラム
Loopで入力1秒間隔で監視しています。
status に保存している入力の状態と比較してLOWに変化すればCloseで立上りと判断してLong Clickに相当する 1500msecの間だけ出力をHIGHにします。
逆にstatusがHIGHに変化すれば立下りと判断して Double Clickに相当するように500msecの間出力をHIGHに2回。
入力pinはpull upして接点がOff(Open)の状態は入力がHIGHです。接点がOn(Close)すると入力はGNDと短絡されてLOWになります。
#define PIN_IN 3 // pin 2
#define PIN_OUT 4 // pin 3
static int status = LOW;
void setup() {
pinMode(PIN_OUT, OUTPUT);
pinMode(PIN_IN, INPUT_PULLUP);
}
void loop() {
// Rising edge, Long Click
if (digitalRead(PIN_IN) == LOW && status == LOW) {
digitalWrite(PIN_OUT, HIGH);
delay(1500);
digitalWrite(PIN_OUT, LOW);
status = HIGH;
}
// Falling edge, Double Click
if (digitalRead(PIN_IN) == HIGH && status == HIGH) {
digitalWrite(PIN_OUT, HIGH);
delay(500);
digitalWrite(PIN_OUT, LOW);
delay(500);
digitalWrite(PIN_OUT, HIGH);
delay(500);
digitalWrite(PIN_OUT, LOW);
status = LOW;
}
delay(1000);
}
SORACOM Funk, AWS Lambda を経由してLINEで通知する
LTE-Mボタンからの送信をLINEやメール、Slackに通知する方法は良記事やチュートリアルが沢山ありますので詳細は省略します。
今回はSORACOM FunkからAWS Lambda にメッセージを送り、LINE Notify で通知しました。
こちらを参考に
SORACOM LTE-M Enterprise Buttonで位置情報を通知するハンズオン
送信してみる
接点の入力の代わりにブレッドボード上で入力を短絡し、しばらくして解放してみました。
おお、思い通りに通知されました。
まとめ
かねてから試したかった、両エッジでの接点通知が可能なことが確認できました。
リレー部分を改良して、3Vで電池駆動して長期間運用可能にすれば、ケースにヒゲボタンと入れて設備や装置の接点の簡易監視に使えそうです。
関連記事
SORACOM LTE-M Button Plusで接点のOnとOffを送信する(2) – 電池駆動デバイス化
SORACOM LTE-M Button Plusで接点のOnとOffを送信する(3) – 7か月運用したので電池残量の確認と基板をグレードアップ
“SORACOM LTE-M Button Plusから接点のOnとOffで異なるクリックを送信する” への1件の返信