【加速度センサー入門】第13回 :加速度センサーで角度を測ってみよう(その1)

【加速度センサー入門】シリーズでは、アナログ・デバイセズ社の加速度センサーを中心に、基本的な使い方や応用方法を解説します。本記事では、ArduionoとADXL345を使って角度(傾斜角)を測定してみました。

【加速度センサー入門】シリーズ一覧はこちらから

角度(傾斜)検出の原理について

過去にご紹介した記事「第10回~重力加速度を取り除いてみよう~」ではADXL345のようなMEMSタイプ加速度センサーではDC成分(静的加速度)として重力加速度を検知できるという話をさせていただきました。そのため加速度センサーは重力加速度による軸の直交ベクトル変化量により、傾斜角度を求めることができます。身近なところでは、デジタルカメラの水平器やスマートフォン画面の縦横ローテーション、ゲーム機のモーション検知コントローラーなどで使われています。

下図にイメージ図を作成しました。図のようにデバイスを重力方向に置いた場合、X、Y軸が重力軸(z軸)に直行する水平軸となります。また、この水平面を基準とした、X軸、Y軸の角度変化をピッチ、ロールと呼びます。ここで、Y軸を固定して、X軸を回転させた場合のロール角は Ax[°]=ASIN(ax[g] / 1[g]) より求めることができます。この式により、0°から1°あたりの加速度変化は約17.4mgとなります。また、回転を+90°させた場合は+1.0g、-90°回転させた場合は-1.0gとなります。

詳細は下記アプリケーションノートが参考になりますのでご参照ください。
AN-1057: 加速度センサーによる傾きの検出
加速度センサーによる傾斜測定の精度を高める

ピッチ角/ロール角 イメージ図
ピッチ角/ロール角 イメージ図

次にどこまで細かい角度まで測れるのかについて考えてみます(角度分解能)。今回使用するADXL345の分解能は10bit(3.9mg/LSB@±2g)となります。1°辺りの変化加速度は約17.5㎎のため、理想的には3.9mg/17.5mg=約0.2°の角度分解能があることになります。しかし、実際はノイズの影響があるため、ノイズのスペックを考慮する必要があります。また角度の精度(真値からのずれ)としてはオフセット誤差や感度誤差などが影響します。そのため精度が要求される場合は、データシートのパラメーターを把握して設計をおこなう必要があります。

見積もり方法に関しては下記アプリケーションノートが参考になりますのでこちらをご確認ください。

アプリケーションに最適な MEMS 加速度センサー の選択【Part 1】

Arduinoを使って重力加速度から角度を測ってみよう

加速度センサー「ADXL345」とハードウェアのオープンプラットフォームである「Arduino」を使い重力加速度の変化量を計算し、傾斜角度を求めるサンプルプログラムを作成していきます。

 

準備するもの

今回、加速度センサーを評価するうえで準備したものはこちらです。

・Arduino IDE がインストール済みの PC (Arduino IDE のダウンロードはこちらから)
Arduino Nano 互換品ボード 
加速度センサー ADXL345 
・その他(USB ケーブル (Arduino と PC 接続用)、ブレッドボード、ワイヤー)

上記の部品を組み合わせて、下図のように回路を組んでいきます。Arduino Nano への電源は、PC からの USB バスパワーで供給します。ADXL345は、SPI インターフェースとI2C インターフェースに対応していますが、今回はI2C インターフェースを使用します。また割り込みピンのINT1ピンを使用します。

接続図
接続図

プログラムの内容

今回のプログラムでは計算式を Ax[°]=ASIN(ax[g] / 1[g]) として、ロール角、そしてピッチ角を求めていきます。プログラムの流れは、X軸、Y軸の加速度を取得します。その後、三角関数のASIN()を使い角度に変換するというシンプルなものとしました。なお、Arduino IDE で作成したプロジェクトファイルはダウンロードできますので、ご興味のある方は下記「資料ダウンロード」より入手ください。

 

 

動作確認

作成したプログラムの動作確認をおこないました。動画の通りデバイスの角度を変化させると、シリアルコンソール上のロール・ピッチ角度が変化していることが確認できました。
しかし、いくつ気になる部分がありました。

・水平に置いた場合の理想の角度は0°ですが、実際は0°とはなっていません
・角度が90°に近づくにつれて、角度検出の精度が出なくなりました
・置いた場所が振動している場合は、その振動を拾ってしまい、値に誤差がでてしまう

これらの点については別の機会で説明していきたいと思います。

今回は加速度センサーで角度(傾斜)を測定ししてみました。参考になれば幸いです。

今回検証したサンプルコードのダウンロード

今回実施したArduino のプロジェクトファイルを提供しています。こちらからお申し込みの上、ぜひお試しください。

加速度センサー ADXL345 について

今回使用したADXL345 は、3軸のデジタル出力加速度センサーです。主な特長は下記の通りです。

・ADC、演算機能ブロック、FIFO 内蔵で、非常に使いやすいスタンダードな加速度センサー
・加速度データは、デジタルシリアル方式で一般的なI2C/SPIを採用
・3軸タイプのセンサーは直交座標 (X, Y, Z) で、それぞれの軸に働く加速度を取得可能
・最大検出加速度を2g~16gの範囲で設定ができ、サンプリングも~3.2kHzと幅が広いので、衝撃、傾き、モーション検知など様々な用途に応用可能
・消費電流を減らすためのフレキシブルなモードを採用

ADXL345 の詳細は、データシートをご参照ください。また、この加速度センサーは非常に使いやすいので、これから加速度センサーを評価してみたいという方は、ぜひ評価ボードでお試しください。

 

最後に

本記事の内容に関してのご質問、または加速度センサーの選定や使い方にお困りのことがありましたら、以下からお問い合わせください。



アナログ・デバイセズ メーカー情報Topへ

アナログ・デバイセズ メーカー情報Topに戻りたい方は以下をクリックしてください。