13
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IoTLTAdvent Calendar 2021

Day 21

お猫様ほかほか監視装置

Last updated at Posted at 2021-12-20

こちらはIoTLT Advent Calendar 2021 | Advent Calendar 2021 - Qiita 21日目の記事です。

はじめに

寒くなってきたので猫が3匹いる我が家では電気毛布が欠かせません(4枚くらい稼働中)
しかし最近の電気毛布は勝手に電源が切れる安全仕様になっていて、電気毛布が勝手に止まっています(切れないタイマー)
電気毛布が切れてお猫様が寒い思いをしてしまっている OR 電気毛布の上でお猫様がほかほかになりすぎていないかをチェックして冬を快適に過ごしてもらいたいというものです

できたもの

電気毛布の上にサーモセンサを置いて、電気毛布上の温度を計測
10分ごとにLINE Notifyで温度を通知してくれる

環境・材料

接続方法

Image from Gyazo
センサとobnizのピン配置もこちら を参考にさしていきましょう

obniz側 センサ側
0 GND GND 電源端子
1 VCC VCC 電源端子(5V ±10%)
2 SDA I2C(5V) データ
3 SCL I2C(5V) クロック

どこを測る?

4×4の16箇所の温度を取れるので、猫さんがいる時といない時の電気毛布の表面の温度を測ると、だいたい皆同じ温度の中に少し高いところがあったので、猫さんは27°以上のところらへんにいそうというのがわかりました。
Image from Gyazo
しかし測ってみると猫さんはすぐに動くので猫さんを測るではなくて、むしろいなさそうな端っこあたりを固定にして電気毛布の温度を測り、三段階に分けて、
20°を下回ると電気毛布が切れている
30°を超えると猫さんがほかほかになり過ぎている、
それ以外は通常の温度を通知というアラートにしました

コード

node.js
'use strcit';
const axios = require('axios');
const qs = require('querystring');
const BASE_URL = 'https://notify-api.line.me';
const PATH =  '/api/notify';
const LINE_TOKEN = '***';  //notifyのトークン
const Obniz = require('obniz');
const obniz = new Obniz('***'); // Obniz_ID
const botmsg = 'ホカぺ監視中'
const botmsghot = '熱くなってきてるよ'
const botmsgcld = 'ホカぺ切れたね'
let config = {
    baseURL: BASE_URL,
    url: PATH,
    method: 'post',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Authorization': `Bearer ${LINE_TOKEN}`
    },
    data: 'message=${botmsg}'
};
obniz.onconnect = async function () {
    obniz.display.clear();
    obniz.display.print('Hot.....');
    var i2c = obniz.getFreeI2C();
    obniz.io1.output(true);
    obniz.io0.output(false);
    i2c.start({mode:"master", sda:2, scl:3, clock:100000});

    obniz.repeat(async function(){
      await obniz.wait(100);
      i2c.write(0x0A, [0x4C]);
      await obniz.wait(160);
      var data = await i2c.readWait(0x0A, 35);
      var t = [];
      for(var i=2; i<34; i++){
        t[i] = ((data[i]+(data[i+1]<<8))*0.1).toFixed(1);
        console.log(t[i]);
        i++
      }
      if(t[8] > 30){
        config.data =  "message="+ botmsghot + t[8] + "°";
      }else if(t[8] > 20){
        config.data =  "message="+ botmsg + t[8] + "°";
      } else {
        config.data =  "message="+ botmsgcld + t[8] + "°";
      }
        axios.request(config).then((res) => {
          console.log(res.status)
        })
        .catch((error) => {
            console.log(error);
        });
      }, 600000)
}

まとめ

サーモ楽しい!温度を測るだけでこんなに楽しいとは!という感じで楽しいものができました。
温度を通知するものはできたので、LINEnotifyではなくLINE Botにして電気衣毛布の電源をコントロールするところに次は行きたいな
とりあえず10分おきに通知が来るのでとても煩わしいので、もう少しアラートを絞ろうと思います。

13
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?