編集履歴一覧に戻る
Bear_Deafのアイコン画像

Bear_Deaf が 2021年05月05日14時30分38秒 に編集

タイトル記述法変更(2021/5/5)

記事種類の変更

+

製作品

本文の変更

-

**概要**

+

概要

==== ペット食事時間の記録システムは、ペットが食事をしたことを、Lineグループに自動投稿する情報共有ツールである。ペットフード保存容器のフタを戻したときに、家族にLineでペットの食事時間を共有できる。 ![ペット食事時間の記録システム](https://camo.elchika.com/99251a4b72109bdd4bf8e2ff314c2e665e9688b3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64396631343636382d663434332d346261632d613331642d3361626462393535646237302f31366230333739352d303962312d346532632d613431332d623335303461343237623164/)

-

**問題**

+

問題

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

-

**概要仕様**

+

概要仕様

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

-

**システム図**

+

システム図

==== システム図を以下に示す。 ![システム図](https://camo.elchika.com/30e17558cbe40a8d79463c8aa27ec5807144c9d3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64396631343636382d663434332d346261632d613331642d3361626462393535646237302f62626233323235342d366437652d346164382d623263612d393530326434646638636332/)

-

**部品表**

+

部品表

==== 部品表を以下に示す。 |番号|部品名|型式|数量| |:---:|:---|:---|:---| |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の家族グループにメッセージが送信された。家族のみんなは、ニーナの食事時間を簡単に共有できた。 @[youtube](https://www.youtube.com/watch?v=ff319r1eWec)

-

**導入後は...**

+

導入後は...

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