はじめに
筆者は、日常的にノートPCを使っていますが、気が付くと画面を近くで見続けており、眼精疲労に加齢も加わり視力も落ちてきたと感じる今日この頃です。
予防には、目と画面を30cm以上離して、30分に1回は画面から視線を外して遠くを見るのが良いとされています。そこで、予防を促すユニットを測距モジュール GP2Y0E03 を使って作製しました。
概要
GP2Y0E03(SHARP)は、アクティブ型光学式測距センサーで、アナログとデジタル(I2C)の両出力に対応しています。下は、外観とコネクタのピンアサインです。サイズは11×16.7×5.2mmとコンパクトです。

下図は、測距の概要です。センサーモジュールは、LED(赤外線発光ダイオード)とDetector(検出器)から成り、LEDから発射された赤外線は、Reflectorに反射してDetectorのCMOSイメージセンサーで検出され、検出した受光スポット位置から三角測量法(※2)を基にReflectorまでの距離Dを計算します。測距距離(仕様値)は4~50cmで、リニアなセンサー出力特性です。
※2) 三角測量法とは、距離が既知の2点間の両端から測量点に対する角度を求めて三角形を確定して測量する方法(一言でいうと三角関数です)

内容
本作品は、センサーまでの距離が30cm以内(過接近)になったときブザーを連続鳴動して注意喚起し、センサーが検知してから30分経過したらブザーを間欠鳴動して休憩を促します(休憩時報)。マイコンは手持ちのPIC16F18313、センサーとはI2Cで通信します。下は、GP2Y0E03のI2C通信フォーマット(抜粋)です。

距離データは12ビットで、レジスタアドレスの0x5Eに上位8ビット(11:4),0x5Fに下位4ビット(3:0)が格納されます。また、データの距離換算は次式で与えられます。
距離[cm] = ((上位データ*16 + 下位データ) / 16) / 4
下は回路図です。電源は、USBバスパワーから5Vを給電します。また、ブザーの他に2色LEDの発光色で状態を表示します。表示色と状態は、緑点灯が検知あり,赤点灯が過接近,橙(赤+緑)点滅が休憩時報,消灯が検知なし。

下は、ソースコードのメインループ部です(MCCを使用)。センサー測距値から検知あり/無しの処理を行います。

下は、タイマー2割り込み処理関数です。休憩時報の30分を生成する関数で、1分毎の周期割り込みを30回カウントした後ブザーとLEDを動作します。

下は、GP2Y0E03の制御コードです。前述のI2C通信フォーマットの内容です。

結果
下は、完成したユニットとノートPCに取り付けた様子です。ポップ・クリップを使うことで、センサーの向きを調整できます。(最近のノートPCは画面の縁が細く、変な物が着けづらいようになっています)

感想
使ってみたところ、センサーから30cm以上離れた状態では、顔を動かすと検知しない場面もありますが、30cm以下では問題なく検知しました。また、ブザー音は画面との距離の意識づけに効果があります。しかしながら、ノートPCの画面にセンサーを取り付けると、画面を閉じる際に取り外す必要があり面倒です。セカンドモニターに固定して使う方がいいかもしれません。
– 以上 –