Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

【初心者でもできる】仕事が忙しくても、赤ちゃんの熱中症の危機にすぐに気づけるIoTをつくった

$
0
0

はじめに

少し前に、2才のこどもを保育園に送り忘れ、
かつ、車の中に放置してしまい、亡くなってしまう
痛ましい事件が起きました。

本当に悲しい出来事であり、あってはならないことですが、
人ごとではないような気がしました。

何かに集中してしまって、
つい何かやるべきことが抜け落ちてしまうことはある人も多いのではないでしょうか。

今回は、それと類似のシーンとして、
「仕事が忙しく、赤ちゃんの部屋が高温になっていることに気づけなかった」ということがないように、高温になればアラートが出て、気づける仕組みをIoTを使って、できないかとチャレンジしました。

作りたいイメージ

温度センサーによって、常に部屋の温度を監視し、
赤ちゃんにとって快適な温度(26-28度らしい)から外れた時に、
自動でLINEに通知がくるもの。

さらに、LINEの通知に気づかない可能性があるので、
音やLEDの光でアラートを出す。

その2つの仕組みがあれば、仕事に集中していても気づくことができ、
すぐにエアコンをつけにいくことができるはずです。

実際につくった仕組み

自動でLINEに通知する仕組みは作れなかったので、
外出中の夫or妻がLINE botで温度を確認し、
快適温度から外れた時に、
自宅にいる夫or妻にLEDで通知をする仕組みを作りました。

<STEP1>外出先からLINE botで赤ちゃん部屋の温度を確認する

まずは、LINE botに「どう?」と問いかけます。

3221879_s.jpg

<STEP2>部屋の温度に応じて、LEDの反応を変える

①もし28度を超えていた場合は?

■LINEの通知

8913.jpg

■LEDの反応

②もし26度より下回っていた場合は?

■LINEの通知
※検証した日はなかなか26度を下回らなかったため、
コードの方の数字をいじって、強引に表示させてしまいました。

8914.jpg

■LEDの反応

③もし26度〜28度の間(快適温度)だった場合は?

■LINEの通知

8915.jpg

■LEDの反応

LEDが消えます。

IMG_7587.JPG

<STEP3>エアコンをつけるor消す。

IMG_1921.JPG

LEDで通知を受けたら、家にいる方が
エアコンのスイッチを押せば、
快適な温度が保たれます。

これで一安心です。

・・・・と思ったのですが、
ここまで考えてみて、1つのobnizを使うと、
温度センサーとLEDの位置は、同じ場所でしかできないので、
赤ちゃん部屋の温度を、別部屋で仕事をする人に
LEDで通知はできなかったです。。

なので、これでできることは、
・外出先からでも赤ちゃん部屋の温度がわかる。
・外出先から家にいる夫or妻にLINEで普通に通知する。
ですね。

また発展版を考えてみようと思います。

コード

'use strict';// obniz呼び出しconstObniz=require('obniz');constobniz=newObniz('Obniz_ID');// Obniz_ID を入力// LINE botを使えるようにするconstexpress=require('express');constline=require('@line/bot-sdk');constaxios=require('axios');constPORT=process.env.PORT||3000;constconfig={channelAccessToken:'channelAccessToken',// LINEの方から入力channelSecret:'channelSecret'};constapp=express();app.post('/webhook',line.middleware(config),(req,res)=>{console.log(req.body.events);Promise.all(req.body.events.map(handleEvent)).then((result)=>res.json(result));});constclient=newline.Client(config);// obniz接続obniz.onconnect=asyncfunction(){obniz.display.clear();obniz.display.print('obniz meets LINE Bot!');}functionhandleEvent(event){if(event.type!=='message'||event.message.type!=='text'){returnPromise.resolve(null);}letmes=''if(event.message.text==='どう?'){mes='ちょっと調べてきますねー';//少し時間がかかるのでメッセージを入れるgetAskObnizTemp(event.source.userId);//プッシュメッセージの準備}else{mes=event.message.text;}returnclient.replyMessage(event.replyToken,{type:'text',text:mes});}constgetAskObnizTemp=async(userId)=>{// obniz温度センサー実行準備、差し込んだ番号を入力consttempsens=obniz.wired('LM60',{gnd:0,output:1,vcc:2});constled=obniz.wired('LED',{anode:4,cathode:5});// 部屋の温度を取得consttemp=awaittempsens.getWait();// 温度をコンソールに表示if(temp>28){console.log(temp);// obnizのdisplayに表示obniz.display.clear();obniz.display.print(temp+'C');// obnizにpushメッセージを送るawaitclient.pushMessage(userId,{type:'text',text:temp+'度。エアコンつけよう!',});    // LEDの点滅スピードを決める(ちょい早め)setInterval(asyncfunction(){led.on();},2000);// 1000ミリ秒 = 1秒setInterval(asyncfunction(){// 同期で取得led.off();},1000);// 1000ミリ秒 = 1秒}elseif(temp<26){console.log(temp);obniz.display.clear();obniz.display.print(temp+'C');awaitclient.pushMessage(userId,{type:'text',text:temp+'度。エアコン消そう!',});    // LEDの点滅スピードを決める(ちょい遅め)setInterval(asyncfunction(){// 同期で取得led.on();},3000);// 1000ミリ秒 = 1秒setInterval(asyncfunction(){// 同期で取得led.off();},2000);// 1000ミリ秒 = 1秒}else{console.log(temp);// displayに反映obniz.display.clear();obniz.display.print(temp+'C');// 英語が出力できるawaitclient.pushMessage(userId,{type:'text',text:temp+'度。快適です!',});    // LEDのオフにするled.off();}}app.listen(PORT);console.log(`Server running at ${PORT}`);

まとめ

はじめてIoTつくってみました。

まだまだ狙ったものをつくるスキルはないですが、
少しずつ改良して、より良いものにしていきたい。

今後も自分にとって、誰かにとって必要なものを
色々作ってみたいと思います。


Viewing all articles
Browse latest Browse all 8691

Trending Articles