本記事はソラコムが提供する「SORACOM公式ブログ」に掲載された「在宅勤務でも眼を大事に!通知付き光量測定システムを作ってみた【SORACOM Discovery 2023 展示レポート】」を再編集したものです。
こんにちは、プロダクトマネージャーの小林(ニックネーム tau)です。
この記事では SORACOM Discovery 2023の「ソラコム社員による IoT プロトタイピングコーナー」で展示した私の制作物「通知付き光量測定システム」の作り方(+ 制作の動機)を解説します。
「通知付き光量測定システム」制作の背景
ソラコムではリモートワークを主体に、各自が最も生産的に活動できる場所を選んで働くことができます。私もこの制度を活用して柔軟な働き方で業務に当たっているのですが、ときに仕事に没頭するあまり日没に気付かず、部屋が真っ暗になっても照明を点け忘れてしまうことがありました。
部屋の明るさが足りないと眼精疲労を起こしたり、文字を読むために不適切な姿勢を続けることによる上肢障害等の健康障害を起こしかねません(※1)。厚労省は、一般的な事務作業を行う場所の照度の基準を 300ルクス以上と省令で定めています。きっと日没後の作業環境はこの基準を下回っていたでしょう。
自宅に健康で快適なリモートワーク環境を整備するために、通知付きの光量測定システムをプロトタイプしてみました。使用したのは SORACOMサービスのみ(+ 通知先として Slack)と、シンプルな構成です。エンジニアの背景を持たない人(私自身がそう)でも、SORACOMを利用すれば簡単に IoTシステムを作れることを、以降の節でお伝えできればと思っています。
パンフレット『職場における労働衛生基準が変わりました』(厚労省 2022-03-01 公布)
装置の外観
使用した機材は Grove IoT スターターキット for SORACOM (Wio LTE JP Version) と GROVE – 光センサ v1.2です。本体は Discovery当日の展示ではデモを容易にするため基板が見える状態でしたが、実使用では半透明の名刺ケースに格納します。公式ドキュメントによると利用されている光センサの型番は LS06-MΦ5で、データシートからは出力値と照度(ルクス)との対応が分かりませんでした。そのため今回は厳密な照度測定を目指す代わりに、センサを筐体内部に収納した状態で測定される光量の値を使って通知する明るさの閾値を決めていきます。
照度(LUX)を測定できるセンサ(例えば GROVE – I2C デジタル光センサ)を使用する案も検討しましたが、今回の目的に照らして費用面も考慮するとオーバースペックと考えて採用を見送りました。今回は「どうしても省令準拠の仕事環境が不可欠!」というわけでもないですし、大まかな傾向を知るには先述のセンサでも十分な性能があるためです。
電源ケーブルを外に逃がす必要から、ケースの蓋に切り欠きを入れました。
当初、光量測定器は作業机の上に設置しました。厳密な照度が測定できるのが理想ですが、このセンサを使う限りは難しいです。このような設置場所の条件を踏まえて明るさの閾値を経験的に調整しました。
通知付き光量測定システムの作り方
下図が今回製作したシステムの構成図です。Wio LTEに接続した光センサーの値が、あらかじめ設定した閾値を下回ったとき SORACOM Lagoonから Slackへ Alertを発報します。また、閾値以上の明るさに復帰したときにも Alertを発報します。
Wio LTEに書き込むプログラムは、サンプルプログラムを微修正して作成しました。まず Wio LTE の開発環境を準備するを参考に Arduino IDEをセットアップします。次に [File] > [Examples] > [Wio LTE for Arduino] > [soracom] > [soracom-harvest] を選択し、SORACOM Harvesrtにデータを送信するサンプルプログラムが表示します。最後に、コードのいくつかの箇所を修正します。
GROVE – 光センサ v1.2 はアナログセンサのため、Wio LTEのアナログピン(今回は A4)にセンサを接続します。公式ドキュメント によると、A4ピンは 12bitの Analog to Digital Converterです。
// use analog pin to measure light
#define LIGHT_SENSOR_PIN (WIO_A4)
setup()
関数に Groveコネクタへの給電と Pin Modeの定義を追加します。
// Light Sensor Pin set
Wio.PowerSupplyGrove(true);
pinMode(LIGHT_SENSOR_PIN, INPUT_ANALOG);
loop()
関数に Groveピンからアナログ値を取得するコードを実装します。リファレンスを参考に、サンプルコード中の条件コンパイルのブロック #ifdef SENSOR_PIN
を次のように書き換えました。
// measure light
LightSensor:
int light = 0;
light = analogRead(LIGHT_SENSOR_PIN);
char data[100];
sprintf(data, "{\"light\": %d}", light);
SerialUSB.print("data: ");
SerialUSB.println(data);
SORACOM側では SORACOM Harvest Dataと SORACOM Lagoonを使用します。グループ設定で Harvest Dataを有効にし、Lagoonで Alertを設定しました。今回の Alert条件は「15分ごとに過去 15分間のセンサ値の平均を評価し、150を下回ったら即座に Alert」です。この「150」は照度(LUX)と異なる値となりますが、私が自宅で過ごして「暗いな。電気点けたいな」と感じる明るさです。ここは、皆さんの環境で調整いただく値になります。
SORACOM Lagoon 3 で強化された Alert 機能の Alert ruleでは、上図のように 3つの時間概念「評価範囲」「評価間隔」「Firingに変化するまでの Alert ruleの継続時間」の組み合わせで柔軟なアラート条件を作成できます。なお図中に示されていませんが、Alertの設定の際には Lagoonが Harvest Dataからデータを取得する間隔(Makerプランでは 30秒)にも注意しましょう。
Lagoonの Contact Pointには、Slackの Incoming Webhookの URLを設定します。Lagoonの設定を行う前に Slack APIでアプリを作成し、[Features] > [Incoming Webhooks] で Webhook URLを発行しておきましょう。
ここまで設定すると、Alert ruleの定義に従って Lagoonが Alertを発報してくれます。下の画像は Discovery 2023当日の「ソラコム社員による IoTプロトタイピングコーナー」のデモで、無事に Alertが発報されている様子です。当日も問題なく動作してくれて良かったです。
実際に IoT機器を自作したことで、ハードウェアを触る楽しさ、ソフトウェアを組み立てる楽しさ、そして IoTの便利さをこれまで以上に実感できました。ぜひ皆さんも気軽に手を動かしてみて、エキサイティングな IoTを肌で感じてみてください!
― ソラコム 小林(tau)
投稿 在宅勤務でも眼を大事に!通知付き光量測定システムを作ってみた【SORACOM Discovery 2023 展示レポート】 は SORACOM公式ブログ に最初に表示されました。
この連載の記事
-
第503回
デジタル
SMS 本文設計ガイド:文字数節約やアクセス分析の実装 -
第502回
デジタル
IoTがトラック輸送業界をどのように変えているのか -
第501回
デジタル
簡単に構築、カメラ+SORACOM Flux+生成AIによる映像監視システムの解説 -
第500回
デジタル
位置情報トラッキングシステムのIoTレシピを公開、日経CNBC「トップに聞く」出演動画公開、他 ほぼ週刊ソラコム 01/04-01/24 -
第499回
デジタル
3Gのサービス終了に向けたIoTデバイスの準備方法 -
第498回
デジタル
【保存版】 ここから始める IoT 、基礎から学べる入門向けコンテンツガイド -
第497回
デジタル
総勢31名の執筆陣!SORACOM アドベントカレンダー 2024とソラコムサンタの振り返り -
第496回
デジタル
SORACOM Flux の Webhook アクションが認証ヘッダーに対応、AWS Signature V4 も使用可能に。より広がる IoT アプリの自動化へ! -
第495回
デジタル
2025/1/29(水) オンラインセミナー「まだ間に合う!3G停波後のIoT通信」を無料開催! -
第494回
デジタル
SORACOM Flux グランプリ開催!セールスメンバーの挑戦と成果