扉の傾きで検知――「加速度センサー」を使ったポスト投函の検知術:身近な課題から学ぶ「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年から海の家を運営しているセカンドファクトリーに、その理由を聞いた。