#「コアラのマーチ”ずっと”まもるくん」に進化
前回の記事で紹介させていただいた
7秒の儚い命だった「コアラのマーチまもるくん」
コアラのマーチずっとまもるくんのコードはこちらをクリック
const Obniz = require('obniz');
const obniz = new Obniz('xxxx-xxxx'); // Obniz_IDに自分のIDを入れます
obniz.onconnect = async function () {
var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
const speaker = obniz.wired('Speaker', { signal: 0, gnd: 1 });
setInterval(async function(){
hcsr04.measure(function( distance ){
console.log("distance " + distance + " mm")
if (distance > 200) {
speaker.play(1000);
} else {
speaker.stop();
}
})
}, 1000);
}
#音が鳴るだけじゃ守れないよね・・・
最初はびっくりしていた旦那さんですが、
慣れてくると何もビビらなくなり、箱を置けば止まると学んだので(涙)、
私も開き直って、
コアラのマーチがなくなったら、
①音が鳴る(念のため)
②LINEBotでお知らせが来る
ができると、出先であれば買って帰れるので、イライラしないなとなりました。
食べたいときにないのが、一番イラっとしますよね(笑)
家庭円満の為にも、譲り合いは大切!
#コード
下記の記事を参考にしました。
【obniz×LINE】音と光を使い侵入防止システムを製作する
Obnizと超音波距離センサーを使って、LINE Botで距離を測定できる仕組みを考えた。
実際に書いたコードがこちらです。
'use strcit';
const Obniz = require('obniz');
const obniz = new Obniz('xxxx-xxxx'); // Obniz_IDに自分のIDを入れます
const line = require("@line/bot-sdk");
const express = require("express");
const PORT = process.env.PORT || 3000;
const config = {
channelSecret: '{チャネルシークレット}',
channelAccessToken: '{アクセストークン}'
};
const userId = '{ユーザーid}';
const app = 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));
});
const client = new line.Client(config);
obniz.onconnect = async function () {
// 各センサーを呼び出す
// 距離センサーを呼び出す
const hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
// 指す場所を変えているので対応した数字に変更
// スピーカーを呼び出す
const speaker = obniz.wired('Speaker', {signal:0,gnd:1});
obniz.display.clear(); // 一旦クリアする
obniz.display.print('Hello obniz!'); // Hello obniz!という文字を出す
// setIntervalで間隔を作る
setInterval(async function () {
const distance = await hcsr04.measureWait();
// 距離(mm)をコンソールに表示
console.log(distance + ' mm');
// displayに反映
obniz.display.clear(); // 一旦クリアする
obniz.display.print(distance + ' mm'); // 英語が出力できる
// 近づいてきたら判定する
if (distance > 200) count++;
else count = 0;
switch(count) {
case 5:
obniz.display.clear(); // 一旦クリアする
speaker.play(11000); // スピーカー On 11khz
//LINEにメッセージ送信
await client.pushMessage(userId, {
type: 'text',
text: 'コアラのマーチがないよ!',
});
break;
default:
speaker.stop();// スピーカー OFF
}
}, 1000); // 1000ミリ秒 = 1秒
};
app.listen(PORT);
console.log(`Server running at ${PORT}`);
#起こったエラー
進化したので、ずっと距離を測ってくれることはできるのですが、
スピーカーも鳴らないし、LINEとも連携できない・・・。
おそらく、If以降の文章に何かしらのエラーがあるので、
スピーカーも鳴らない、LINEも連携しないのかなと思いました。
※ターミナルにはエラーの表示なしでdistanceの結果が表示される。
※LINE Bot側にはエラー表示あり。(画像参照)
#家庭円満のために
Q&Aに質問してみて、自分でもできることを探して、更に進化させていこうと思います!