スマートフォンを測定器にする

JavaScript/HTML

スマートフォンを各種の測定器にする方法についてまとめておきます。
以下の環境で動作確認をしています。
環境:
・ Android スマートフォン
・ Windows パソコン/Wi-Fi ネットワーク(自宅)

背景 ~ 使えるものは、最大限に活用しましょう!

これまでこのサイトでは、メロディーを鳴らしたり、お絵描きをするプログラムなどを作ってきています。

こういったものを作っていると、作ったプログラムやデバイスの動きを測定したくなることがよくあります。

たとえば、ドレミファソラシドを鳴らすプログラムを作ったら、鳴っている音(周波数 Hz、音名)が実際に意図したとおりになっているのか、測定して確認したくなります。
圧電スピーカーを鳴らしたら、音が小さすぎる、大きすぎるといった感覚的な表現ではなく、音量 dB がどれくらいか、数値で定量的に言えるようにしたいものです。
カラーでお絵描きができるプログラムを作ったら、モニター上の表示色(色空間:色相、彩度など)を測りたくなってきます。
Raspberry Pi を使って LED の明るさを微調整したら、周囲の照度 lx を確認したくなりますし、モーターを回したら、モーターの回転数 rpm を測りたくなります。

先日、スマートフォンの設定をしていたところ、phyphox (フィーフォックス)というアプリを見つけました。2017年頃にドイツのアーヘン工科大学で作られたスマートフォン用の物理実験アプリとのことです。
最近のスマートフォンには、マイク、スピーカー、明るさセンサー、磁気センサー、加速度センサー、GPS、カメラなど、多くのセンサーが搭載されています。これらを使って、照度、音量、磁気(磁束密度)、加速度、周波数などの測定が可能になります。
また、ローカルネットワーク経由で他のパソコンからもアクセスできます。
スマートフォンがネットワーク対応のモバイル測定器になります。

アプリをインストールしてみたところ、ちょっとした測定などで使えそうでしたので、設定方法や概要をまとめておくことにします。

設定手順

スマートフォンで phyphox アプリを検索し、インストールします。

Android の場合、以下の手順となります。
① 「Play ストア」アイコン → 「検索」を順次クリックする
② 検索欄に “phyphox” と入力して検索する
③ ”phyphox” が見つかったらインストールをクリックする

活用例

照度 lx を測定するとき

スマートフォンでアプリを起動します。
アプリのトップ画面から「光」の項目をタップします。
「▶」ボタンをタップすると、照度 Ev, lx (ルクス)を測定できます。
停止ボタンで測定を停止できます。
ゴミ箱ボタンで測定したグラフのデータを消去できます。
三点のマークから、データの保存など、その他の操作が可能です。

音量 dB を測定するとき

トップ画面から「音波振幅」をタップします。
マイクの許可を求める画面が出てきたら、「今回のみ」(一例)を選択します(以下、同様)。
「▶」ボタンをタップすると、音圧レベル SPL, dB (デシベル)を測定できます。
上記と同様に停止やデータの保存等が可能です。

※ 音量測定をする場合、キャリブレーションをするようになっています。
キャリブレーション用の音源がない場合は、測りたい音の出力を ON/OFF して差分を取ることで概算での音量を見積もることができます。測定対象の音の大きさが10dB 以上であれば、差分がほぼ測定値となるとみてよいと考えられます。詳細は、音量の定義の式から測定誤差などを見積もることが可能です。

※ 音量 dB のめやすをまとめておきます。

騒音レベル, dB 感覚的な表現の例 具体的な音の事例
120 耐え難い・痛みを感じる 雷、飛行機エンジン(近く)
100 電車のガード下、カラオケ(室内)
80 うるさい 地下鉄の車内、ピアノ演奏(正面)
70 掃除機、セミの鳴き声
60 普通 通常の会話、洗濯機
50 換気扇
40 静か 図書館内、しとしと降る雨
30 ささやき声、深夜の住宅街
20 ほとんど聞こえない 雪の降る音

音の高さ Hz を測定するとき

トップ画面から、「オーディオスペクトル」をタップします。
「▶」ボタンをタップすると、横軸を周波数 Hz、縦軸を周波数成分の強度として測定ができます。
「履歴」をクリックすると、縦軸を時間として、周波数スペクトルの変化が表示されます。

※ スペクトルの画面では、ピーク周波数 Hz と、その周波数に対応する音名(C4, D4, … など)が表示されます。

※ 各音階の音を発生させて周波数と音名を測定する手順
このサイトでは以前に、ブラウザでメロディーを鳴らすプログラム(下記関連リンク参照)を作って公開しています。
同サイト上に、ドレミファソラシドを鳴らすサンプルが貼ってあり、サイト上の操作で各音階がそのまま鳴るようにしてあります。
同サンプルで、テンポを 30 BPM、波形をサイン波(sine: waveform)、damping のチェックを外す、などと設定して音を鳴らしてみてください。
同時に、その再生中の音を、スマートフォンに入れた上記の「オーディオスペクトル」で分析してみてください。
再生中のドレミファソラシドの各音階に対応して、ピークとなる周波数 Hz の測定値と、該当する音名(C4, D4, E4, … C5)が表示されます。

上記の設定で、音源の波形をサイン波とすると/波形がサイン波に近いと、音名や周波数の測定結果が安定します。矩形波やのこぎり波などでは、高周波数成分が含まれているので、測定値が安定しづらくなります。
また、周波数に関しては、ブラウザで鳴らしている音の周波数と、測定される周波数には数%のずれがあることがわかります。
パソコンとスマートフォンの機差といった要因もありますが、スペクトルを求める際のフーリエ変換での分解能による要因がけっこう大きいです。
アプリの画面を確認すると、サンプリング数(分割数)の初期値は 2048 となっています。
また、私のスマートフォンでは、Resolution が 23.44 Hz、動作時間が 42.67 ms と表示されています。
23.44 Hz x 2048 ≒ 48,000 Hz となりますので、スマートフォンのアプリ内ではサンプリングレートを 48,000 Hz としていると推測できます。
一般に、分析対象の2倍を超える程度の周波数でサンプリングをする必要があるので、分析対象として想定されている周波数の上限(ナイキスト周波数)は、48,000 Hz / 2 = 24,000 Hz となります。人の耳の可聴範囲は 20 Hz ~ 20,000 Hz ですので、アプリを作るにあたり、可聴範囲をカバーするようにサンプリングレートが設定されているものと推測できます。
加えて、分解能 Resolution の 23.44 Hz について、ピアノ中央のドレミファソラシドのラ(A4, 440Hz)を例にとると、 23.44 Hz / 440 Hz ≒ 5% となります。
12平均律では、約 6% の周波数の増減があると、1つ隣の音階に相当(半音1つ分)します。
音楽に興味がある方や楽器を扱っている方は、音階1つ分のバラツキはかなり大きいと感じると思います。こういった場合は、アプリの「設定」欄でサンプル数を 2048 の初期値から、16384、32768 あたりに変更してスペクトル分析を実行してみてください。分析の精度(値の確度や繰り返し再現性)を改善できると思います。データのダウンロードは可能そうなので、繰り返し再現性さえ改善できれば、日頃使っている任意の基準音に一致するようにデータを補正するなど、キャリブレーションなども可能になると思います。

色空間を測定するとき

トップ画面から、「Color (Hue Saturation Value)」をタップします。
「▶」ボタンをタップすると、カメラが起動し、カメラ画像の枠内の領域での Hue, Saturation, Value (色相、彩度、明度)の測定ができます。

※ このサイトでは以前に、ブラウザ上でお絵描きをするプログラム(下記関連リンク参照)を公開しています。
同サイト上で、任意の Hue, Saturation, brightness (Value) (色相、彩度、明度)を設定して、お絵描きができるようにしてあります。お絵描きソフト上で、たとえば、左側の円環の部分をクリックし、任意のカラーで画面上を塗りつぶしてください。

塗りつぶしたモニター上の色の部分を、上記の「Color」のアプリで計測してみてください。描画した色相や彩度などの値に応じて、測定結果が表示されます。
測定をしてみると、モニターやスマートフォンのハードウェアとしての色空間などの影響が入るため、設定値と測定結果の間にはいくらかのずれが生じます。しかしながら、色相、彩度などの変化に応じて計測値が動くため、必要によりキャリブレーションを行うことで再現性のある計測ができるであろうことがわかります。なお、明度は撮影環境の明るさにより影響を受けるため、あまり意味のないパラメータとなります。

磁気を測定するとき

トップ画面から、「磁力計」をタップします。
「▶」ボタンをタップすると、XYZ方向の磁束密度 B, μT (マイクロテスラ)の測定結果が表示されます。
スマートフォンの画面を縦長に持ち、長手方向を上下方向としたとき、画面右方向が +X 軸、画面上方向が +Y 軸、液晶画面に垂直方向で手前の向きが Z軸(右手系)となっています。

※ ためしに地磁気を測ってみることにします。
スマートフォンの長手方向(+Y方向)を北向きにします。すると、磁力計 y の値が大きくなります。逆の南に向けると値がマイナス側になります。同様に、スマートフォンの短辺方向(+X方向)を北向きにすると、磁力計 x の値が大きくなります。南向きにすると、磁力計 x の値がマイナス側となります。
東京の緯度は 35.7度程度であって、地球は球状にカーブしています。すると、磁力線の向きは北方向で、なおかつ、地中の向きとなっています。
そこで、スマートフォンの長手方向を北向きにし、さらに液晶画面を水平方向から下向きに45度前後に傾けると、磁力計 y の値が最大となります。
また、東京での北極の向きと磁極の向きには7度の差があるそうです。地図アプリなどではこの角度を補正しているとのことです。
※ XYZ 全体での磁力の強度を測定するには、「絶対値」をタップします。すると、スマートフォンの向きに依存せず、磁束密度の絶対値(ベクトルの長さ)を計測できます。
日本では地磁気の強さは 46μT 程度とのことです。建物の内部では鉄筋などに遮蔽されて 40μT 等に下がってきます。
※ 同様に、身近にある磁石の磁束密度を計測することも可能です。ためしに、冷蔵庫などにくっつける磁石(フェライト磁石)を測定してみると、数cm 離した状態で、数100μT 等の数値となっています。
また、絶対値が最大となる位置を探すことで、スマートフォンのどのあたりに磁気センサー(ホール素子)が実装されているか推測することができます。私のスマートフォンでは、電源ボタンのある端部の上方の角近辺で測定値が最大となっています。
なお、ネオジム磁石はスマートフォンに近づけると内部を壊す可能性があるので、10cm、20cm など距離を置いた状態で測定するのみとし、理論式にベストフィットさせて磁束密度 μT を求めるのがよさそうです。カタログスペックで、だいたい、2000ガウス = 200mT 程度とのことで、フェライト磁石の 2~4 倍程度となるとのことです(10000ガウス = 1T)。

リモートで測定するとき

スマートフォンを自宅などのローカルネットワークの Wi-Fi につなげて使っている場合は、ネットワーク経由で上記のプログラムを操作することが可能です。
一例を以下にまとめておきます。なお、この機能は、自宅の Wi-Fi ネットワークなど確実に管理できているネットワークで使うようにしてください。

スマートフォンでアプリを起動します。
アプリのトップ画面から、一例として、「光」の項目をタップします。
右上の三点のアイコンをクリックし、「遠隔アクセスの許可」の欄にチェックを入れます。
ネットワークのセキュリティを確認し、問題がなければ「OK」をタップします。
すると、画面下に URL (http://(IPアドレス): (ポート番号))が表示されます。
同じネットワーク内にあるパソコンでブラウザを起動し、上記の URL にアクセスします。
すると、スマートフォンと同様のアプリの画面が表示されます。ブラウザ上で、上記と同様の要領で測定を行うことが可能となります。
測定後、三点のアイコンから、測定データを CSV ファイル等としてパソコンにダウンロードすることが可能です。

なお、ネットワーク内のパソコンに Python などをインストールしている方は、上記のスマートフォンのポートのチェックをすることが可能です。興味のある方は下記の関連リンクを参照してみてください。スマートフォンがサーバーとして動いており、ポートをオープンにしていることを確認できます。「遠隔アクセス」の機能では外部からのアクセスが可能になるため、信頼できるネットワークでのみ使うよう注記されている理由がわかるかと思います。

まとめ

これでスマートフォンが各種の測定器として使えるようになりました。

磁束密度 T(テスラ)、音量 dB(デシベル)、CDEFGABC などの音名、加速度などが手軽に測定できるようになりました。アイディアとしてよくできているなと思います。日本にはスマートフォンを作ってきているメーカーもあるので、本来ならこのドイツの大学を超える研究機関や大学などがあってもよいのにと思います。
すでに身の回りにあるものはふんだんに活用すべしということですよね。

関連リンク
・ ブラウザでメロディーを鳴らす 【JavaScript】
・ ブラウザで動くお絵描きアプリ 【JavaScript】
・ 一括で音声データの音量調整をする 【Python】
・ ポートの状態を確認する 【Python】

外部リンク
・ Physics Experiments with Smart Phones | RWTH Aachen University | EN
・ https://github.com/phyphox
   ※ GPL version 3 のオープンソースで公開されています。

タイトルとURLをコピーしました