Bear_Deafのアイコン画像
Bear_Deaf 2021年04月30日作成 (2021年05月05日更新)
製作品 製作品 閲覧数 656
Bear_Deaf 2021年04月30日作成 (2021年05月05日更新) 製作品 製作品 閲覧数 656

ペット食事時間の記録システム

ペット食事時間の記録システム

概要

ペット食事時間の記録システムは、ペットが食事をしたことを、Lineグループに自動投稿する情報共有ツールである。ペットフード保存容器のフタを戻したときに、家族にLineでペットの食事時間を共有できる。

ペット食事時間の記録システム

問題

うちにはニーナという食いしん坊なわんちゃんがいる。ごはんをもらっていないよ、と嘘をつくのがとても上手だ。家族はだまされて、2回以上もあげるときもある。家族内の共有をしたくても、朝夕はとても忙しくLineを打つ時間がない。そこで、obnizの助けを借りる。

概要仕様

  • 開いているペットフード保存容器のフタを閉めたたとき、家族のLineグループにメッセージを送る
    ・5秒よりはやくフタがしまった場合は、メッセージを送らない
    ・5秒以上ひらいたフタがしまった場合は、メッセージを送る
  • メッセージは家族が登録したLineグループに送る
    メッセージは、以下のとおり(HH:MMはふたがしまったときの時間)
    ・朝ご飯(5時~8時)の場合は、「HH:MM 朝ご飯、終りました。」
    ・晩ご飯(17時~8時)の場合は、「HH:MM 晩ご飯、終りました。」
    ・それ以外の時間の場合は、「HH:MM おやつ、終りました。」

Line グループの画面例

システム図

システム図を以下に示す。

システム図

部品表

部品表を以下に示す。

番号 部品名 型式 数量
1 obniz obniz Board 1Y 1
2 マイクロスイッチモジュール KEYESTUDIO 1
3 モバイルバッテリ SP-L4000 1

開発環境

  • Node.js
  • LineのNotify npmライブラリ

接続表

接続表を以下に示す。

obniz マイクロスイッチモジュール 備考
No 0 S 信号端子
No 1 + 電源端子
No 2 - GND端子

ソースコード

const Obniz = require("obniz"); var obnizeId = "XXXX-XXXX"; // obnizのID var obniz = new Obniz(obnizeId); var msg_data = "XXX" const axios = require('axios'); const qs = require('querystring'); const BASE_URL = 'https://notify-api.line.me'; const PATH = '/api/notify'; const LINE_TOKEN = '------------'; // LINEのトークン var config = { baseURL: BASE_URL, url: PATH, method: 'post', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': `Bearer ${LINE_TOKEN}` }, data: qs.stringify({ message: msg_data, }) }; async function getRequest(msg){ // LINE Notify に送る config.data="message=\n" + msg try { const responseLINENotify = await axios.request(config); console.log(responseLINENotify.data); } catch (error) { console.error(error); } } obniz.onconnect = async function () { //--- 変数の定義 // 状態遷移 const s0 = 0; const s1 = 1; const s2 = 2; var s = 0; // 制御フラグ var lid_state_cnt = 0; // ふたが開いている時間を計測 var button_flg = true; // ボタンを押した状態のフラグ var line_send = false; // LINEへメッセージを送信完了のフラグ // 時計データ var h_time = 0; // 時 var m_time = 0; // 分 var s_time = 0; // 秒 //--- インターフェースの初期設定 --- // ディスプレイのクリア obniz.display.clear(); // センサのIO入力設定 obniz.io1.output(true); //センサの電源用 obniz.io2.output(false); //センサのGND用 // ボタン io0がtrue(スイッチがポップアップ、フタがオープン) obniz.io0.input(function (value){ console.log("value is " + value); if(value == false){ button_flg = true; }else if(value == true){ button_flg = false; }else{ console.log("Button Error"); } }); // LINEのメッセージ生成 function Making_LineMsg(){ var currentDate; // 現在の時刻 var displaystr; // ディスプレイ表示のデータ var msgtmp; // LINEメッセージ // 変数の初期化 msgtmp = "" // 時刻データ取得 currentDate=new Date(); h_time = currentDate.getHours(); m_time = currentDate.getMinutes(); // s_time = currentDate.getSeconds(); msgtmp = h_time + ":" + m_time + "\n"; // 時刻に応じてLINEメッセージを決定 if(5 <= h_time && h_time <= 6){ // 朝5時~朝7時 msgtmp = msgtmp + "朝ご飯、終りました。" }else if(17 <= h_time && h_time <= 18){ // 夕方5時~夕方7時 msgtmp = msgtmp + "晩ご飯、終りました。" }else{ // その他の時間帯 msgtmp = msgtmp + "おやつ、終りました。" } return msgtmp; } // メインループ obniz.repeat(function(){ if(s == s0){ // フタが閉じている状態 if(button_flg == true){ // ボタンがONであれば、s0状態 s = 0; }else if(button_flg == false){ // ボタンがOFFであれば、s1状態 lid_state_cnt = 0; s = 1; }else{ // 状態維持 s = 0; } }else if(s == s1){ // フタが開いて、その時間を計測している状態 lid_state_cnt += 1; if(button_flg == true){ // ボタンがONであれば、s0状態 s = 0; }else if(lid_state_cnt >= 5){ // 5秒以上であれば、s2状態 lid_state_cnt = 0; s = 2; }else{ // 状態維持 s = 1; } }else if(s == s2){ // フタが5秒以上開いている状態 if(button_flg == true){ // ボタンがONであれば、s0状態 getRequest(Making_LineMsg()); s = 0; }else{ // 状態維持 s = 2; } }else{ // 絶対に発生しないので、ディスプレイにエラー表示 console.log("--Err--"); } },1000); //1秒間隔のポーリング };

デモ動画

ニーナにご飯やおやつをあげた後は、自動的にLineの家族グループにメッセージが送信された。家族のみんなは、ニーナの食事時間を簡単に共有できた。

ここに動画が表示されます

導入後は...

家族がいちばん忙しいときに、ペットの食事時間をスムーズに共有できた。ペット食事時間の記録システムは、共有しなくちゃ!、というストレスから解放できた。
ちなみに、ニーナはごまかすことができず、悶々しているようだ(ごめんね、メタボの予防になるので、長生きしてね)。

  • Bear_Deaf さんが 2021/04/30 に 編集 をしました。 (メッセージ: 初版)
  • Bear_Deaf さんが 2021/05/05 に 編集 をしました。 (メッセージ: タイトル記述法変更(2021/5/5))
ログインしてコメントを投稿する