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