M5Stackにセンサを付けて、リモート環境を快適に
第1回:M5Stackでリモートワーク作りに必要なもの
第2回:M5StackでWeb会議システムと電球を操作する
こんにちは、ヨシケンです!
日頃からArduino互換モジュールのM5Stackシリーズを使って、さまざまな電子工作をしていますが、今回はM5Stackを使ってリモートでの勉強や仕事を便利にするデバイスを作っていきます。
第3回となる今回は、超小型のM5Atomにセンサを追加して、デスク周りの明るさを測定、それに応じてLEDを点けたいと思います。また部屋の電気などとも連動していきますよ。
[M5Stackシリーズを使って、リモート環境を快適、便利に!]
今回の記事の流れ
このデバイスを作るのに必要なもの:
名前、説明 | デバイス |
---|---|
M5Atom M5Atomのうち5×5のマトリックスLEDが付いたもの |
|
M5Atom Battery M5Atomにバッテリを追加するモジュール |
|
TP-Link Plug コンセントに挿して、電源オンオフをコントロールできるスマートデバイス |
|
ローム照度・近接センサ 赤外線を発し、その反射光を測定して、光の強度や近接度を計測します。 |
|
M5Stackを接続する為のケーブル、外装部品など | 適宜必要に応じて |
これらの部品をそろえて、リモートワーク便利デバイスを作っていきます。
1. M5Atomに明るさセンサを付ける
今回はデスク周りの明るさを測って、暗かったら自動でライトを点けることにします。そのために超小型でマトリックスLEDが付いたM5Atom Matrixを使っていきます。基本的な使い方はM5Stackと同じですが、M5Atom用のライブラリを入れておきましょう。
[ 超小型のM5Atom Matrix ]
Arduinoのメニューから、「ライブラリを管理」を選んで、M5Atomを検索して、インストールしてください。
[ M5Atomのライブラリをインストール ]
ではこのM5Atom Matrixに、明るさセンサを付けて測定できるようにしていきましょう。今回はロームセンサ評価キットの照度・近接一体型センサモジュール(RPR-0521RS)を使います。このセンサは、赤外線LEDを発し、その反射光を検知することにより、その明るさを測定します。
このセンサを使うために、ローム・センサのページからzipファイルをダウンロードし、Arduino IDEメニューからRPR-0521RS用のライブラリをインストールします。
ライブラリをインストールしたら、RPR-0521をM5Atomに接続しましょう。このセンサはI2C通信のためのピンにつなぐ必要があります。M5Atomだと写真のように裏面の、SDA(ピンG25)とSCL(ピンG21)に接続します。
センサ側端子 (上から) | M5Atom側 |
---|---|
VDO | 5V (赤) |
GND | GND (黒) |
SDA | G25 (青) |
SCL | G21 (黄) |
INT | NA(接続無) |
センサとM5Atomをつないだら、Arduino IDEのスケッチ例のところから、サンプルのPRP-0521RSスケッチを選んで試してみましょう。そのスケッチに以下の黄色の部分を追加して、流し込みます。Wire.begin(25,21)の部分が、M5AtomでI2Cを使う定義になります。
[PRP-0521RS.ino]
#include <M5Atom.h>
#include <Wire.h>
#include <RPR-0521RS.h>
RPR0521RS rpr0521rs;
void setup() {
byte rc;
Serial.begin(9600);
while (!Serial);
Wire.begin(25,21);
rc = rpr0521rs.init();
}
void loop() {
Wire.begin(25,21);
byte rc;
unsigned short ps_val;
float als_val;
byte near_far;
rc = rpr0521rs.get_psalsval(&ps_val, &als_val);
if (rc == 0) {
Serial.print(F("RPR-0521RS (Proximity) = "));
Serial.print(ps_val);
Serial.print(F(" [count]"));
near_far = rpr0521rs.check_near_far(ps_val);
if (near_far == RPR0521RS_NEAR_VAL) {
Serial.println(F(" Near"));
} else {
Serial.println(F(" Far"));
}
if (als_val != RPR0521RS_ERROR) {
Serial.print(F("RPR-0521RS (Ambient Light) = "));
Serial.print(als_val);
Serial.println(F(" [lx]"));
Serial.println();
}
}
delay(500);
}
これでPRP-0521RSにより、室内の明るさをルクスで表示して、照度が計測できるようになりました。
2. M5AtomのマトリクスLEDを光らせる
それでは、計測した照度がある一定の値以下だったら、M5AtomのLEDを光らせて明るくするようにします。まず、M5Atomのライブラリに入っている、サンプルのLEDを光らせるスケッチを実行してみましょう。Arduinoのメニューのスケッチ例から、LEDDisplayを選んで走らせてみます。
サンプル・スケッチを流すとこのようにLEDが光って、順にATOMの文字が表示されます。
次に、明るさセンサの値とLEDを連動させます。先ほど紹介したサンプル・スケッチ中の照度als_vaの値が100以下だったら、LEDを全面光らせるようなロジックを追加します。以下、水色の部分が追加の記述です。
[M5Atom_PRP_LED.ino]
#include <M5Atom.h>
uint8_t darkness = 0;
…
void setup() {
M5.begin(true, false,true);
delay(10);
for (int i = 0; i < NUM_LEDS; i++){M5.dis.drawpix(i, 0x00f000);} //Green
delay(1000);
M5.dis.clear();
…
}
void loop() {
…
if (als_val != RPR0521RS_ERROR) {
if ( (als_val < 100) and (darkness == 0) ) {
Serial.printf("Dark !");
darkness = 1;
for (int i = 0; i < NUM_LEDS; i++){M5.dis.drawpix(i, 0xf0f0f0);} //White
delay(1000);
} else {
Serial.printf("Bright");
M5.dis.clear();
darkness = 0;
}
}
…
M5Atomにはバッテリが付いていないので、パソコンなどにつなげていないと動かすことができません。M5Atomにピッタリ接続できる小型バッテリがあるので、これを付けておきましょう。それではバッテリをセットした状態で、このスケッチを実行してみます。
明るさを検知して、それに合わせてM5Atom Matrixが白色に光ったと思います。
3. M5Atomから部屋のライトを光らせる
さらに部屋の電気も点けましょう。前回の記事で使用したライトもありますが、そちらは廊下を青く光らせるために使ってしまったので、別の方法でデスク周りを明るくします。
Wi-Fi経由で電気のオンオフをするのに、TP-LinkのPlugというものがあります。これはIFTTTなどのウェブサービスからも操作できるIoTデバイスです。
Plugを設定するために、TP-Linkのアプリから、このプラグ・デバイスの登録をします。https://apps.apple.com/jp/app/kasa-smart/id1034035493
M5Atomからこの電気をオンオフするように、IFTTTのアプレットを作成します。
IFTTTから新しいアプレットの作成を選んで、トリガーとしてWebhookを選択。M5Atomから送信するイベント名を指定します(この時は、”M5Plug”としています)。
次に、そのイベントを受け取ったら、アクションとして”TP-Link Kasa”を選びます。実行される機能の中で”Turn on”を使います。そこで先ほどアプリから登録した、TP-Link Plugのデバイスが出てきたらそれを選んでください。
これでIFTTTの設定ができましたが、前回同様WebhookのSettingという所を押して、IFTTTトークンを取得しておきます。
ここで以下コマンドをブラウザなどで実行すると、オンにしたTP-Link Plugと、そこに繋いだライトを点けることができるようになります(ここでEvent_Nameは先ほどの”M5Plug”、ZZZZはIFTTTトークン)。
https://maker.ifttt.com/trigger/Event_Name/json/with/key/ZZZZ
では、このコマンド実行をM5Atomと連動させます。まず、M5AtomからWifiに接続してください。その後、明るさがある一定値以下の場合に先ほどのIFTTTコマンドを実行し、ライトを点けます。以下、赤色で記述した部分が追加の設定です。XXXX/YYYYはWifiのID/パスワード、ZZZZはIFTTTトークンです。
[ M5Atom_PRP_LED_Plug.ino ]
#include <M5Atom.h>
…
#include <WiFi.h>
#include <HTTPClient.h>
static char* ssid = "XXXX”;
static char* pass = "YYYY";
static char* ifttt_token= "ZZZZ";
static char* ifttt_link = "https://maker.ifttt.com/trigger/M5Plug";
const int MAX_RETRY = 5;
static void initialize_wifi() {
Serial.print("SSID:"+String(ssid));
WiFi.begin(ssid, pass);
int count = 0;
while( WiFi.status() != WL_CONNECTED && count < MAX_RETRY) {
Serial.print(".");
delay(500);
count++;
}
if( WiFi.status() == WL_CONNECTED ){
Serial.println("Connected.");
for (int i = 0; i < NUM_LEDS; i++){M5.dis.drawpix(i, 0x0000f0);}
delay(2000);
M5.dis.clear();
}else{
Serial.println("WiFi error.");
}
}
void http_get(String url){
if(WiFi.status() == WL_CONNECTED){
Serial.println("Wifi Connected");
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
}
http.end();
}
}
void setup() {
…
initialize_wifi();
}
void loop() {
…
if (als_val != RPR0521RS_ERROR) {
if ( (als_val < 100) and (darkness == 0) ) {
Serial.printf("Dark !");
darkness = 1;
for (int i = 0; i < NUM_LEDS; i++){M5.dis.drawpix(i, 0xf0f0f0);} //White
String url = String(ifttt_link) + "/json/with/key/" + String(ifttt_token);
Serial.println(url);
http_get(url);
delay(1000);
} else {
Serial.printf("Bright");
M5.dis.clear();
darkness = 0;
}
}
…
それではこれを実行してみます。部屋が暗かったら、以下のようにIFTTTコマンドが発信されます。
それによりIFTTTのTPLink PlugがONになりました。
これでLEDと合わせて、部屋の電気も点け、明るさを調節することができました。
4. まとめ
今回の連載では、M5Stackとセンサを使って、自宅でのリモートワークを快適にするデバイスの製作を紹介しています。
今回は、M5Atom Matrixを使って、センサと繋いでデスク周りの明るさを計測したり、明るさセンサの状況に応じて、LEDマトリクスを光らせました。また、スマートデバイスのPlugを使って、Wifi経由でコンセントにも接続します。パソコン周りが暗かったら、そこにつけた電球などを光らせて、手元やZOOM環境を明るく照らせるようになりました。
次回はM5StackとM5Atomの両方を組み合わせて、快適リモートワーク環境を完成させます。
お楽しみに!
今回の連載の流れ
第1回:M5Stackでリモートワーク作りに必要なもの
第2回:M5StackでZOOMを操作する
第3回:M5Stackとセンサを接続して快適環境作り(今回)
第4回:全てを組み合わせてリモートワーク・デバイスを作り上げる