対人センサー(人感センサモジュール HC-SR501)で侵入者を検知してSlackに通知するbotを作ってみました。
対人センサーで侵入者を検知してSlackに通知するbotを作ってみました。
— Yukito (@yukitter) 2017年4月13日
人体の赤外線を検知すると赤色LEDが点灯してSlackに通知されます。#slack #iot #esp8266 pic.twitter.com/aCWX7mzUHC
人を検知すると、赤色LEDが点灯して、こんな風に、ナマハゲがSlackに通知してくれます。
(検知には人体が発する赤外線を利用しています。)
多分こんな応用ができるかと
- 一人暮らし方向けの留守中の侵入検知
- サーバールームの侵入検知
- ガレージの侵入検知
- 部屋の前の盗み聞き検知
- ロッカーが開けられた検知
- コレクション部屋の侵入検知?
※応用を考えていたら人間不審になりそう。。。
パーツ
ESP8266とHC-SR501を主に使っています。
ESP8266はNodeMcu Lua ESP8266 CH340という開発ボードを使っています。
購入はAmazonがおすすめです。中国から届くのに時間がかかりますが、¥480と激安です。ピンヘッダも取り付け済みなので、ハンダ付け不要な部品です。
HC-SR501が対人センサー(人感センサー)で、¥145程度で購入できます。こちらも激安です。
あとは、検知中に光るLEDと抵抗330Ωを一個ずつ。
回路図 っぽいもの
- センサー(HC-SR501)について
- 電源はDC4.5-20Vなので、開発ボードの5Vを繋いでいます
- 出力は3.3VなのでGPIOの入力にそのまま繋いでいます
- 半固定抵抗で、検知する距離(センター 5~7m, サイド 3~4m)と、検知を継続する時間(3~200s)を調整できます
- データシートはこちら
ソースコード
esp8266-slack-webhookというライブラリを利用しています。
HC-SR501.ino
#include "SlackWebhook.h"
// GPIO
int DetectPin = 14;
int LEDPin = 13;
// wifi
const char* ssid = "XXXXXXXX";
const char* password = "XXXXXXXXX";
// Slack
const char* host = "hooks.slack.com";
const char* fingerprint = "ab f0 5b a9 1a e0 ae 5f ce 32 2e 7c 66 67 49 ec dd 6d 6a 38";
String url = "/services/XXXXX/XXXXX/XXXXX";
String slackBotName = "surveillance bot";
SlackWebhook webhook(host, url, fingerprint);
// other
int beforeDetectStatus = 0;
void setup() {
// シリアル通信を開始
Serial.begin(115200);
Serial.println("Serial start.");
// ピン設定
pinMode(DetectPin, INPUT);
pinMode(LEDPin, OUTPUT);
// wifi接続を開始
WiFi.begin(ssid, password);
Serial.println("WiFi start.");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
int detect = digitalRead(DetectPin); // 人を検知していれば1、していなければ0が返る
digitalWrite(LEDPin, detect); // 1を書き込むとLEDが点灯、0で消灯
Serial.println(detect);
if (detect == 1 && beforeDetectStatus == 0) {
postSlackMessage("侵入者を検知しました!!!∑(=゚ω゚=;)");
beforeDetectStatus = 1;
}else if (detect == 0 && beforeDetectStatus == 1){
beforeDetectStatus = 0;
}
delay(100);
}
void postSlackMessage(String message) {
String postData = "{\"username\": \"" + slackBotName + "\", \"text\": \"" + message + "\", \"icon_emoji\": \":japanese_ogre:\"}";
webhook.postMessageToSlack(postData);
}
- Arduino IDEでビルドしてESP8266に書き込みます。
- 開発環境を構築するのはこちらが参考になります。