Arduinoで加速度センサを使う方法【傾きを検出できる】

どうも、なかしーです。

普段は自動車の組み込みエンジニアとして働きつつ、YouTubeでArduinoの解説動画を投稿しています。

Arduino初心者
Arduino初心者

電子工作で傾きを検出するにはどうしたらいいの?

という悩みを解決します。

電子工作で物体の傾きを調べたいときに使えるセンサは次の2つです。

  1. チルトセンサ
  2. 加速度センサ

チルトセンサは傾きに応じて回路が閉じたり、開いたりするスイッチのような働きをします。

加速度センサはX軸、Y軸、Z軸の重力加速度を調べることができるセンサです。

加速度センサの写真
加速度センサ

チルトセンサと違い、重力加速度に応じた電圧を出力するので、傾きをアナログ値で調べることができます。

この記事では「Arduinoで加速度センサを使う方法」について紹介します。

秋月電子さんの加速度センサモジュールを使っているので、他のメーカーから販売されている加速度センサと動きが違う可能性があります。

ちなみに、動画でもArduinoで加速度センサを使う方法について解説しています。

Arduinoを持ってない人はこちらの入門キットがおすすめです!

【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】

加速度センサとは?

加速度センサはスマートフォンや家庭用ゲーム機といった身近なものに利用されています。

例えば、

  • スマートフォンの傾きに応じて画面の表示を回転させる
  • 歩いた歩数をカウントする(万歩計)

電子工作では、ロボットの姿勢制御でよく使われています。

加速度センサは3軸の重力加速度を調べることができます。

MEMO
重力加速度とは、物体を落としたときにその物体の速度が単位時間あたりにどれだけ早くなるか示した量のこと

地球は中心に向かって常に重力が発生していて、

重力加速度は「1G = 9.81m/s2」で表されます。

加速度センサは3軸の重力加速度を電圧として出力します。

Arduinoと加速度センサの繋ぎ方

加速度センサから出力される電圧をArduinoでA/D変換するためにアナログピンに接続しましょう。

加速度センサは左上が1ピンになっていて、反時計回りに番号が振ってあります。

ピンの機能とArduinoへの繋ぎ方は次の表をご覧下さい。

ピン番号機能Arduinoのピン
1VDD(電源入力)+5V
2Enable(イネーブル)+5V
3GNDGND
4Vmux(未使用)未接続
5セルフテストGND
6X軸出力アナログピン(A0~A5)
7Y軸出力アナログピン(A0~A5)
8Z軸出力アナログピン(A0~A5)

こちらのデータシートから機能を抜粋しています。

Arduinoで傾きを検出するプログラム

加速度センサから重力加速度に応じた電圧が出力されるので、その電圧をA/D変換して取得しましょう。

プログラム
float data_x = 0;
float data_y = 0;
float data_z = 0;

data_x = analogRead(A0);
data_y = analogRead(A1);
data_z = analogRead(A2);

加速度センサを傾けてない状態なら2.5Vが出力されるので、A/D変換した値は512になっているはずです。

では、X軸やY軸方向にそれぞれ傾けた場合はどうなるのか考えてみましょう。

加速度センサは最大で±1g分の傾きを検出し、1gあたり1V分変化します。
(1gあたりの電圧の変化量は、電源電圧によって変わります)

つまり、加速度センサから出力される電圧は1.5V~3.5Vの範囲で変化するということが分かります。

角度は±90°まで検出可能なので、傾きを計算するには次の式を使います。

角度 = (((加速度センサの電圧 – 1.5V) / 2V) * 180°) – 90°

式の電圧をA/D変換した上で表すとこうなります。

角度 = (((加速度センサの電圧 – 307) / 409) * 180°) – 90°

A/D変換がよく分からない方は「ArduinoでA/D変換する方法」を読むか、こちらの動画を見てください。

シリアルプロッタで傾きをグラフ化しよう

Arduino IDEにはデータをグラフ化するシリアルプロッタという機能があります。

シリアルプロッタは、ArduinoとパソコンをUSBで接続し、シリアル通信でデータを定期的に送るだけで使うことができます。

次のプログラムを追加します。

プログラム
void setup() {
  Serial.begin(9600);
}
プログラム
Serial.print("X");
Serial.print(",");
Serial.println("Y");

Serial.print(angle_x);
Serial.print(",");
Serial.println(angle_y);

改行コードを送るとデータの送信が一巡したと処理してくれます。

文字列データを送るとグラフの凡例として表示することが可能です。

シリアル通信でprintlnでデータを送ると自動で改行コードを付加してくれるので便利です。

プログラム
void setup() {
  Serial.begin(9600);
}

プログラムをArduinoに書き込んで、シリアルプロッタを起動するとX軸とY軸の傾きが表示されます。

シリアルプロッタはArduino IDEのツールタブもしくは「Ctrl+Shift+L」で起動します。

Arduinoのシリアルプロッタを使い方は「Arduino IDEのシリアルプロッタの使い方【グラフを表示】」をご覧ください。

Arduinoで加速度センサを使う方法|まとめ

この記事では「Arduinoで加速度センサを使う方法」について紹介しました。

加速度センサは3軸の重力加速度を検出することが出来ます。

Arduinoのアナログ入力ピンに3軸の出力ピンを繋ぎ、A/D変換することでデータとして取り込むことができます。

加速度センサの重力加速度に応じた電圧から物体の傾きを計算することが可能です。

Arduinoの使い方をYouTubeで解説しています!
>>エンジニアが教えるArduino入門シリーズを見る

Arduinoの人気記事

>>【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】

>>Arduinoをゼロから勉強する方法【参考書は不要】

>>Arduinoのプログラムの書き方【基本的なルールは4つある】

当ブログで人気のArduino入門キット

第1位:Arduino UNO スターターキット
Arduino UNOのスタータキットです。電子工作でよく使う部品が一式揃っており、バラバラで購入するより格段に安いです。
第2位:ELEGOO Arduino用のUNO R3 最終版スタータキット
こちらも電子工作によく使う部品が第一位のスタータキットよりたくさん入っています。とてもお買い得です。
第3位:ELEGOO Arduino MEGA 2560 R3
UNOの上位互換版MEGAのスターターキットです。これだけ入っていれば十分に電子工作の基本をマスターできることでしょう。
エンジニアが教えるArduino入門講座のまとめ【解説動画付き】