どうも、なかしーです。
普段は自動車の組み込みエンジニアとして働きつつ、YouTubeでArduinoの解説動画を投稿しています。
電子工作で傾きを検出するにはどうしたらいいの?
という悩みを解決します。
電子工作で物体の傾きを調べたいときに使えるセンサは次の2つです。
- チルトセンサ
- 加速度センサ
チルトセンサは傾きに応じて回路が閉じたり、開いたりするスイッチのような働きをします。
加速度センサはX軸、Y軸、Z軸の重力加速度を調べることができるセンサです。
チルトセンサと違い、重力加速度に応じた電圧を出力するので、傾きをアナログ値で調べることができます。
この記事では「Arduinoで加速度センサを使う方法」について紹介します。
秋月電子さんの加速度センサモジュールを使っているので、他のメーカーから販売されている加速度センサと動きが違う可能性があります。
ちなみに、動画でもArduinoで加速度センサを使う方法について解説しています。
Arduinoを持ってない人はこちらの入門キットがおすすめです!
【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】タップできるもくじ
加速度センサとは?
加速度センサはスマートフォンや家庭用ゲーム機といった身近なものに利用されています。
例えば、
- スマートフォンの傾きに応じて画面の表示を回転させる
- 歩いた歩数をカウントする(万歩計)
電子工作では、ロボットの姿勢制御でよく使われています。
加速度センサは3軸の重力加速度を調べることができます。
地球は中心に向かって常に重力が発生していて、
重力加速度は「1G = 9.81m/s2」で表されます。
加速度センサは3軸の重力加速度を電圧として出力します。
Arduinoと加速度センサの繋ぎ方
加速度センサから出力される電圧をArduinoでA/D変換するためにアナログピンに接続しましょう。
加速度センサは左上が1ピンになっていて、反時計回りに番号が振ってあります。
ピンの機能とArduinoへの繋ぎ方は次の表をご覧下さい。
ピン番号 | 機能 | Arduinoのピン |
1 | VDD(電源入力) | +5V |
2 | Enable(イネーブル) | +5V |
3 | GND | GND |
4 | Vmux(未使用) | 未接続 |
5 | セルフテスト | GND |
6 | X軸出力 | アナログピン(A0~A5) |
7 | Y軸出力 | アナログピン(A0~A5) |
8 | Z軸出力 | アナログピン(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°まで検出可能なので、傾きを計算するには次の式を使います。
式の電圧をA/D変換した上で表すとこうなります。
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のプログラムの書き方【基本的なルールは4つある】
当ブログで人気のArduino入門キット