流れる数字が意味するところは......?センサー1つでも夢は広がるばかりピンの出力をarduinoのアナログ入力に繋ぎ、簡単なプログラム(arduinoではスケッチと呼ぶ)を転送。アナログ入力値をシリアル転送でパソコン側に流すようにする。加速度センサーへの電力供給はarduinoの出力、そしてarduinoへの電力供給、プログラム転送もUSBケーブル1本で済む。ブレッドボード(たくさんの端子穴の開いた板)に加速度センサーを挿し込み、対応する穴とarduinoのアナログ入力端子をジャンパ線で繋ぐ。奥側の端子は電力供給arduinoのスケッチ(プログラム)はC言語をベースとしたもので、プログラムエディター/コンパイラ/arduinoへの転送機能が1つのアプリにまとまっていて無料で提供されている。プログラムの詳細は省くが、要するにアナログ端子の電圧をシリアル出力して、USBで接続しているパソコンに送るというもの。シリアルモニターを起動すると、パラバラバラと数字が流れる。動かさなければ数値のX軸Y軸は(0G)平常値の出力、Z軸は1G加速度(地球重力)の出力のはず。ここでセンサーを傾ければ、Z軸のぶんの数値がちょっと減って、X/Y軸の数値が若干上がる。姿勢が変わったせいでそれぞれの軸にかかる重力の値が変わるためだ。組んだ簡単なプログラム(左のウィンドウ)。右のウィンドウはシリアルモニターで、数字がすごい勢いでスクロールするとはいえ、数値が流れるだけでそれがなんだかわからない。センサーのスペックシートを読むと、供給した電圧と加速度(重力加速度)によって出てくる電圧がどう変わるかが書かれているので、この式に沿って計算すれば加速度は出るのだが、実際に前後左右90度傾けた値を一度出し、その数値を下限/上限として扱いにしている(厳密には正確な角度ではない)。arduinoごとブレッドボード上にセット。arduinoはボードの上にセットする拡張基板「シールド」があるので本格的に動かすならばそちらを使うプログラムでは、最初に100回ほど読み出した数字の平均をとってオフセット値とし、以降は読み出した数値からオフセットを引いた値を使って各加速度としている。電源を入れたときは水平に置かれていて動いていないことが前提だ。次はちょっと面倒だが、出力数値を-90~90の間に割り振ってから三角関数を使うことで角度を計算できる。単なる端子からの数値をいじるだけなのでプログラム行数にすれば数行で済むのだが、シリアルモニターを流れる数字を見ると電気ノイズや微細な振動などによって細かく変動している。平滑化のため、10回分の計測結果を平均した値を角度にしている。スケッチに手を入れて角度を表示できるようにした。データを平滑化する処理に幾分手間がかかっているが、もっとスマートに組む方法もあるはずパソコンの画面上に流れる文字だけではちょっとさびしいので、キャラクタ液晶も付けてみた。キャラクタ液晶はarduinoでは一般的に用いられており、プログラムも数行足すだけで済む。X軸/Y軸の傾きの数値に加え、下段が空いていたので水平ゲージ(X軸のみ)を表示させてみた。ブレッドボードが傾くと中央に表示された■が左右に移動する。ブレッドボードに装着した2行キャラクタ液晶に出力してみた。USB給電のままだが、単3×4本などを用意すればパソコンがなくても使える。ちなみに液晶は800円前後とかなり手頃ブレッドボードのまま横方向に傾けるとX軸の値が変化して下段の■が移動する。横着なプログラミングしているので表示文字が若干ちらついているここでは重力加速度を使って傾きだけを見ている。姿勢センサーとしてのみの利用だ。ジャイロセンサーなどと併用し、回転の動きと移動の動きを区別することで、6軸のモーションセンサーとして活用できるわけだ。姿勢の変化を考えに入れず、回転加速度を無視すれば各方向への加速度が出るわけで、加速度の変化分を積算すれば移動速度になり、それに時間を掛ければ出発地点からの大まかな距離が分かることになる。これはGPSが受信できないところでも位置表示を継続するカーナビなど自律航法の基本的な機能だ。今回使用した加速度センサーは出力される電圧というアナログ出力だが、デジタル出力のものもある(価格はさほど変わらない)。3軸だけでなく6軸/9軸といったセンサーも販売されており、そのぶんお高くなる。加速度センサーがどう動くのかは分かったが、ここからマルチコプターを制御するまでには、飛ばしては落とし、修理しては飛ばしをかなり繰り返す必要がありそうだ。いえ、角度が表示されるだけでは物足りないので、次回はとりあえずなにか動くものを作ってみよう。スマホお気に入り一覧マイページ。