D7S-A0001과 M5STACK으로 유령 탐지기를 만들어 보았다.

개요



M5STACK과 감진 센서로, 유령 탐지기 만들어 보았다! ! !

장치



이번에 이쪽을 소개합니다.


여기. 오므론제 D7S-A0001이 탑재되고 있어, Grove 케이블로 낙승으로 사용할 수 있습니다. M5STACK, 라즈베리 파이, Arduino이면 드라이버와 샘플을 다운로드 할 수 있으므로 매우 편합니다.

이 장치는 여기에서 구입할 수 있습니다.
기술 공유
구매 페이지
스위치 과학
구매 페이지
마르츠에레텍
구매 페이지

일반적인 가속도 센서와 달리 순수하게 흔들림의 크기를 감지합니다. 진도도 매우 관련성이 높은 SI값을 측정할 수 있는 센서입니다.

이번에는 이것을 사용하여 포르타 가이스트 현상을 파악할 수있는 가젯을 만들려고했습니다. 포르타 가이스트 현상이 발생하면 당연히 책상 등이 흔들리는 것을 예상할 수 있습니다. 그것을 잡고 wed를 통해 통지하는 것입니다.

구성



이번 IFTTT라는 서비스를 사용했습니다. M5STACK이면 쉽게 WI-FI를 통해 WEB에 연결할 수 있기 때문에 센서가 흔들림을 감지하면 WEB를 통해 LINE 통지를 받습니다.

프로그램


/**
   D7S用お化け検出プログラム
**/
#include <M5Stack.h>
#include <D7S.h>
#include <WiFi.h>
#include <HTTPClient.h>

// URL関連
// https://maker.ifttt.com/trigger/[EventName]/with/key/[Key]
// [EventName]はIFTTTのAppletのEventName
// [Key]はIFTTTのWebhooksの設定のURLのhttps://maker.ifttt.com/use/XXXのXXX


// 情報通知用(Value1=SI値,Value2=PGAとなるようAppletを作っておく)
#define INFO_URL "https://maker.ifttt.com/trigger/obake/with/key/ddoHtC0QcgYk7A2vfFH-1P"

// Wifi関連
const char* ssid       = "*****"; // WiFi SSID
const char* password   = "******";  // WiFi PW

void setup() {
  // M5Stack 初期化
  M5.begin();
  Serial.begin(9600);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.setTextSize(2);

  // D7S 初期化
  D7S.begin();
  D7S.setAxis(SWITCH_AT_INSTALLATION);
  //start the initial installation procedure
  D7S.initialize();

  // Wifi 初期化
  M5.Lcd.print("Wifi Init");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    M5.Lcd.print(".");
  }
  M5.Lcd.println("\nWifi Initialized");

  M5.Lcd.print("D7S Init");
  //wait until the D7S is ready (the initializing process is ended)
  while (!D7S.isReady()) {
    M5.Lcd.print(".");
    delay(500);
  }
  M5.Lcd.println("\nD7S Initialized");

  // 表示更新
  delay(500);
  M5.Lcd.clear();
  printData(0, 0);
}


/**
   ゆれ情報のBodyを生成する
*/
String makeInfoBody(float si, float pga) {
  return "{ \"value1\" : \""
         + String(si, 2)
         + String(pga, 2)

         + "\"}";
}

/**
   ゆれ開始のPOSTを送信する
*/
void postInfo(float si, float pga) {
  HTTPClient http;
  String requestBody = makeInfoBody(si, pga);
  Serial.println(requestBody);

  http.begin(INFO_URL);
  http.addHeader("Content-Type", "application/json");
  int httpCode = http.POST(requestBody);
  delay(200);
  http.end();
}

/**
   データをLCDに出力する
*/
void printData(float si, float pga) {
  M5.Lcd.fillRect(0, 0, 320, 40, BLACK);
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.print("SI:");
  M5.Lcd.print(si);
  M5.Lcd.println("[m/s]");
  M5.Lcd.print("PGA:");
  M5.Lcd.print(pga);
  M5.Lcd.print("[m/s2]");
}

void loop() {
  static float oldSi = 0.0f;
  static float oldPGA = 0.0f;

  //checking if there is an earthquake occuring right now
  if (D7S.isEarthquakeOccuring()) {
    float si = D7S.getInstantaneusSI();
    float pga = D7S.getInstantaneusPGA();

    // 値が0から変化した際、ポルターガイスト検知を送信
    if (oldSi == 0.0f && oldPGA == 0.0f && (si > 0.0f || pga > 0.0f)) {
      postInfo(si, pga);
    }

    // 情報に変化があったら表示更新
    if (oldSi != si || oldPGA != pga) {
      printData(si, pga);
    }

    oldSi = si;
    oldPGA = pga;
  }
  delay(200);
}

IFTTT측



IFTTT 측은 이런 느낌
흔들림 정보를 받으면 LINE으로 휴대 전화에 알립니다.



시험 환경




이런 느낌으로 넣어 본다. 덧붙여서 여기는 wi-fi가 연결되기 때문에, 시험에는 뛰어난 환경입니다.

실행 결과




어디까지나 손으로 흔들어 본 결과입니다. 정말 유령이 나온 것은 아닙니다. 그 중 하룻밤 방치하고 실험합니다.

좋은 웹페이지 즐겨찾기