Grove IoT スターターキットで作ってみた その2
1.改良?のいきさつ
そもそも、その1で「電話してね」ボタンを作ったのは
留守番中の子どもからの連絡用のため。
コロナウイルスの緊急事態宣言で休校中、基本、在宅勤務となったものの、どうしても出社せねばならぬ日もあるのがサラリーマンの辛いところ…
家の固定電話の使い方を教え、上の子にはデータ通信とSMSのみの格安SIMを入れたスマホでSMSで連絡を取ることに。
連絡手段は多いほうがいいので、「電話してね」ボタンは下の子に渡して出社してました。
学校が再開してからは、帰宅時にSMSで帰ってきたよ連絡を入れる運用にしたが、なかなかSMSが来なくて心配になることも…おやつ食べたり、のんびりしてただけらしい(怒)
というわけで、帰ってきたことが分かるものを作ろう!というわけで、「超音波距離センサで”ただいま”を通知する」よう改造しました。
2.超音波距離センサで”ただいま”を通知する装置の概要
・ボタンを押すとスマホに「電話してね!」のSMSが届く機能は、その1のまま
・給電はモバイルバッテリーからACアダプタヘ変更
・磁気スイッチを外し、代わりに超音波距離センサを接続する
測定距離が閾値未満になった時に、「人が通過した=帰宅した」ということでスマホにSMSが届く
必ずセンサの前を通過するよう、玄関に設置しました。
壁までの距離が140cm、距離が100cm未満を通過判定の閾値にするといい感じ!
ミニトマトが入っていたカップに入れたので、子どもたちから『トマトカップくん』と命名された(笑)
3.ソースコード
#include <WioLTEforArduino.h> #include <Ultrasonic.h> // https://github.com/Seeed-Studio/Grove_Ultrasonic_Ranger #define BUTTON_PIN (WIOLTE_D20) #define ULTRASONIC_PIN (WIOLTE_D38) #define INTERVAL (100) #define S_PHONE_NUMBER "090XXXXXXXX" int buttonState; //for pushbutton long pre_distance = 200; WioLTE Wio; Ultrasonic UltrasonicRanger(ULTRASONIC_PIN); void setup() { delay(200); SerialUSB.println(""); SerialUSB.println("--- START ---------------------------------------------------"); SerialUSB.println("### I/O Initialize."); Wio.Init(); Wio.PowerSupplyGrove(true); SerialUSB.println("### Power supply ON."); Wio.PowerSupplyLTE(true); delay(500); SerialUSB.println("### Turn on or reset."); if (!Wio.TurnOnOrReset()) { SerialUSB.println("### ERROR! ###"); return; } delay(3000); SerialUSB.println("### Setup completed."); Wio.LedSetRGB(0, 50, 0); } void loop() { long distance; distance = UltrasonicRanger.MeasureInCentimeters(); SerialUSB.print(distance); SerialUSB.println("[cm]"); Wio.LedSetRGB(0, 50, 0); if ((pre_distance < 100)&&(distance < 100) ) { SerialUSB.println("### Send SMS."); if (!Wio.SendSMS(S_PHONE_NUMBER, "We came back home!?")) { SerialUSB.println("### ERROR! ###"); Wio.LedSetRGB(50, 0, 0); delay(1000); } else { SerialUSB.println("### SMS Send OK."); Wio.LedSetRGB(0, 0, 50); delay(1000); } } pre_distance = distance; buttonState = digitalRead(BUTTON_PIN); if (buttonState != 0) { SerialUSB.println("### Send SMS."); if (!Wio.SendSMS(S_PHONE_NUMBER, "This is Name. Please call me!")) { SerialUSB.println("### ERROR! ###"); Wio.LedSetRGB(50, 0, 0); delay(1000); } else { SerialUSB.println("### SMS Send OK."); Wio.LedSetRGB(0, 0, 50); delay(1000); } } delay(INTERVAL); }
4.課題
測定距離が閾値未満で即SMSを送信するようにしたら、誰もいないはずの時間にSMSが来るので不安に…
泥棒?霊的なもの?Gが出たのか?というのは半分冗談で、やはり測定値1発読みで判定は良くないので、
2回連続で閾値未満を通過判定としました。
それでも、まだ、1日に2回ほど変な時間にSMSが来るので、ちゃんと原因追及したいと思います。
1日だけTeraTermでログを取ってみたけど、その日は、変な時間にSMSが来る現象は再現せず…
仕込みを入れると現象再現せずってあるあるですよね(笑)再現するまで、ログ取りを続けます。
次回は「作ってみた」ではなく「行ってみた」について書く予定です。