M5Stack

M5Stackとセンサで快適なリモート環境を整備しよう!【第3回】

M5Stackにセンサを付けて、リモート環境を快適に

 

第1回:M5Stackでリモートワーク作りに必要なもの
第2回:M5StackでWeb会議システムと電球を操作する

 

こんにちは、ヨシケンです!

日頃からArduino互換モジュールのM5Stackシリーズを使って、さまざまな電子工作をしていますが、今回はM5Stackを使ってリモートでの勉強や仕事を便利にするデバイスを作っていきます。

第3回となる今回は、超小型のM5Atomにセンサを追加して、デスク周りの明るさを測定、それに応じてLEDを点けたいと思います。また部屋の電気などとも連動していきますよ。

[M5Stackシリーズを使って、リモート環境を快適、便利に!]

 

今回の記事の流れ

  1. M5Atomに明るさセンサを付ける
  2. M5AtomのマトリクスLEDを光らせる
  3. 明るさチェックから電気も点ける
  4. まとめ

このデバイスを作るのに必要なもの:

名前、説明 デバイス
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回:全てを組み合わせてリモートワーク・デバイスを作り上げる

アバター画像

普通の会社に勤めるサラリーマンですが、モノ作りが好きな週末メイカーで、電子書籍MESHBOOKを出したり、ブログを書いたりしています!

http://blog.ktrips.net

Arduinoでスマートウォッチを作ろう