扉の傾きで検知――「加速度センサー」を使ったポスト投函の検知術身近な課題から学ぶ「IoT手法」(2)(4/4 ページ)

» 2019年01月10日 05時00分 公開
[トボリdotstudio]
前のページへ 1|2|3|4       

プログラム

 PCのUSBポートにUSBケーブルを使ってM5Stackを接続します。Arduino IDEを開き、表示されたエディタに下記のプログラムを貼り付けます。なお、「ssid」「password」は、使っている無線LANルーターのSSIDとパスワードを、「keycode」は、先ほどメモしたSecret Keyをそれぞれの「XXX」に入力してください。

 このプログラムは、SparkFun Electronicsが公開しているMMA8452Q用のサンプルコードを、M5Stack用に一部変更したものです。

#include <M5Stack.h>
#include <WiFi.h>
#include <Wire.h>
#include <SparkFun_MMA8452Q.h>
const char* ssid = "XXX";
const char* password = "XXX";
const char* host = "maker.ifttt.com";
const char* keycode = "XXX";
MMA8452Q accel;
float prevState = 0;
void setup()
{
  M5.begin();
  Serial.begin(115200);
  beginWifi();
  Serial.println("MMA8452Q Test Code!");
  accel.init();
  delay(1000);
}
void printCalculatedAccels()
{ 
  Serial.print(accel.cx, 3);
  Serial.print("\t");
  Serial.print(accel.cy, 3);
  Serial.print("\t");
  Serial.print(accel.cz, 3);
  Serial.print("\t");
}
void loop() {
  if (accel.available())
  {
    accel.read();
    printCalculatedAccels();
    
    Serial.println(); // Print new line every time.
  }
  float currentState = accel.cx;
  if(currentState > prevState+0.20){
    sendRequest("M5Stack_acceleration");
  }
  prevState = currentState;
  delay(1000); 
}
void beginWifi() {
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}
void sendRequest(String M5Stack_acceleration) {
  Serial.println(M5Stack_acceleration);
  Serial.print("connecting to ");
  Serial.println(host);
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  String url = "/trigger/";
  url += M5Stack_acceleration;
  url += "/with/key/";
  url += keycode;
  Serial.print("Requesting URL: ");
  Serial.println(url);
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  Serial.println();
  Serial.println("closing connection");
}

 次に、[ツール]→[シリアルポート]を開き、M5Stackが接続されたポートを選択します。

 [→]ボタンをクリックしてプログラムを書き込みます。「ボードへの書き込みが完了しました。」と表示されたら、右上の虫眼鏡ボタンをクリックし、シリアルモニターを開きます。加速度センサーを傾けたときのxyz軸の値を取得できました。

設置

 ポストの蓋が閉じているときは加速度センサーが平行になり、開いたらx軸が上がるように、位置を調整して設置します。今回は、ポスト内の様子が分かりやすいように、透明の容器を使用しています。

動かしてみる

 以下のように、ポストに郵便物が投函(とうかん)されると、センサーが傾きます。

 スプレッドシートを確認すると、ポストの開いた日時が記録されていました。

まとめ

 今回は、加速度センサーとブレッドボードを使用しました。加速度センサーは汎用性が高く、さまざまなIoT開発に活用できます。また、ブレッドボードを使用できれば、扱えるセンサーも多くなり、IoT実装の幅が広がります。

 IoT開発は一見難しそうですが、前回紹介した「Nefry BT」や今回のM5Stackのように、初心者でも扱いやすいマイコンボードが増えています。このようなマイコンボードで気軽にスタートし、少しずつ扱えるセンサーやアクチュエーターを増やしていくのがお勧めの学び方です。

 第3回では、光センサーを使ってポストに手紙が投函されたらLINEに通知する仕組みを実装します。

著者プロフィール

トボリ[dotstudio

独学で電子工作を学び、ブログや外部媒体で記事執筆を行っている。dotstudioライター。


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。