LoginSignup
19
21

More than 5 years have passed since last update.

対人センサーで侵入者を検知してSlackに通知するbot(ESP8266&HC-SR501編)(人感センサモジュールの応用)

Last updated at Posted at 2017-04-13

対人センサー(人感センサモジュール HC-SR501)で侵入者を検知してSlackに通知するbotを作ってみました。

人を検知すると、赤色LEDが点灯して、こんな風に、ナマハゲがSlackに通知してくれます。
(検知には人体が発する赤外線を利用しています。)

image

多分こんな応用ができるかと

  • 一人暮らし方向けの留守中の侵入検知
  • サーバールームの侵入検知
  • ガレージの侵入検知
  • 部屋の前の盗み聞き検知
  • ロッカーが開けられた検知
  • コレクション部屋の侵入検知?

※応用を考えていたら人間不審になりそう。。。

パーツ

ESP8266とHC-SR501を主に使っています。

ESP8266はNodeMcu Lua ESP8266 CH340という開発ボードを使っています。
購入はAmazonがおすすめです。中国から届くのに時間がかかりますが、¥480と激安です。ピンヘッダも取り付け済みなので、ハンダ付け不要な部品です。

HC-SR501が対人センサー(人感センサー)で、¥145程度で購入できます。こちらも激安です。

あとは、検知中に光るLEDと抵抗330Ωを一個ずつ。

P5000587.jpg

回路図 っぽいもの

image

  • センサー(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に書き込みます。
  • 開発環境を構築するのはこちらが参考になります。
19
21
3

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
19
21