扉の傾きで検知――「加速度センサー」を使ったポスト投函の検知術:身近な課題から学ぶ「IoT手法」(2)(4/4 ページ)
複数の実装手法があるIoT。今回は、身近な課題として、ポストの開閉検知を「加速度センサー」で実現する方法を紹介していきます。
プログラム
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に通知する仕組みを実装します。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
IoTの実装手法は1つじゃない!――磁気スイッチを使ってポストの開閉をメールで通知
「IoT」(Internet of Things)におけるデータ取得は、さまざまなハードウェアやセンサーを組み合わせることで実現できます。また、取得したデータを使い、価値に結び付けるための実装手法も1つではありません。本連載では、いろいろな手法を使って身近な課題を解決していきます。1回目は、「磁気スイッチを使ったポストの開閉検知」です。
発情期や疾病リスクを検知、「牛のウェアラブル」開発に立ちふさがった壁とは
IoTがさまざまな業界で活用されている。酪農や畜産業も、例外ではない。本稿では、IoTで牛の健康管理を実現したファームノートに、サービス開発秘話を聞いた。
猛暑の中、30秒に1件の注文をどうさばく?――“海の家”が最適なIT活用の実証実験場である理由
海に行くと、さまざまなIT企業の“のぼり”が増えている。なぜなのか。2013年から海の家を運営しているセカンドファクトリーに、その理由を聞いた。