スクラッチで始めるロボットプログラミング:加速度センサーでコントロール

Pocket

みなさま、こんにちは。
前回は、DCモーターを2台使い、フォトリフレクタを用いたライントレースについて述べました。今回は、少し改造して、加速度センサーを使って車を操作する方法について述べます。

1.基本的な考え方

 前回作成したライントレースカーに加速度センサーを追加します。フォトリフレクタは使用せず、加速度センサーだけで車を操作します。車の操作は加速度センサーの向きによって行います。前に倒せば前に、後ろに倒せば後ろに、右に倒せば右に、左に倒せば左に移動するように作成します。

2.加速度とは何?

 加速度センサーの「加速度」とは何でしょうか?高校生の物理で勉強しているので、物理を履修されていればわかるかと思いますが、おさらいの意味も兼ねて書きます。

  • 速さ:  単位時間内にものが動く距離。例えば、1秒間で1メートル進む場合の速さは、1 m/s
  • 速度:  ものが動く方向とその速さ。速さはスカラ量なのに対し、速度はベクトルで表される
  • 加速度: 加速度は、速度がどれだけの割合で変化しているかを表した数値。ものの速度を変えるための力の大きさを意味している。例えば、1秒間で物体の速さが 1m/s 増える場合の加速度は、1 m/s2 。これも同じくベクトル量。

加速度センサーとは、動かす力(加速度)を検知するセンサーです。例えば、Wiiリモコンなどが分かりやすい例です。加速度センサーが入っているコントローラを右側に動かせば、右に動いたと検知しますし、左に動かせば左に動いたと検知します。また、スマートフォンなどで画面の向きを変えた場合に、向きに合わせて画面の絵が回転すると思いますが、これも加速度センサーによるものです。加速度センサーの役割として一つあるのが、重力を検知するというものです。みなさまご存知の通り、アイザックニュートンの「万有引力の法則」でも有名ですが、すべてのものには等しく引力があるというもので、その引力の中でも地球の引力が重力です。正確に言うと、万有引力以外に、地球の自転による遠心力がかかるため、引力と遠心力のベクトル和が重力となるのですが、高校物理では、引力に比べて遠心力の力が十分小さいため無視するという扱いで、万有引力=重力という言い方をしていたかと思います。
 話は脱線しましたが、重力を検知することでどちらの方向が地面に向かっているかがわかります。今回のプログラムは、重力の方向を検知するのを利用して車を動かしてみます。センサーを倒した方向に重力がかかるので、それを利用して移動する方向を決めます。

3.実際に調べてみよう

 では、実際にどういう動きをするか調べてみましょう。今回利用するセンサーは、3軸加速度センサーというもので、x, y, z 方向の3方向の加速度を検知することができます。加速度の検知できる範囲は2g (g は重力加速度、9.8 m/s2 ) となります。センサーの値としては、0 から 100 までの値を取り、50が加速度0、25で 1g となっています。加速度の方向によって値が増減します。

3.1. センサーを接続

センサーを接続

まずはセンサーを接続します。図では、A4, A5 の二つのポートにケーブルを差し込んでいます。

3.2. 設定を変更

入出力設定を変更して、加速度センサーを利用できるようにします。

入出力設定を変更

A4, A5 のポートのところを加速度センサーに変更します。

3.3. テストモードで測定

テストモードで測定

テストモードで測定してみます。写真のような方向の場合、Z方向に値が変わっており、センサーの値が26になっています。また、X、Yに関しては49戸なっています。写真ではうまくお見せできないのですが、微妙な値の変化を示していまして、50になるときもあれば、49になるときもあるといったように、微妙な角度で値が変わります。また、この加速度計の誤差の問題もあるので、あまり細かい値まで信じる必要はありません。50に近ければ加速度0、25に近ければ、重力加速度を受けているといったように判断すれば十分です。

4.アルゴリズム

 先ほど見ていただいて分かるように、微妙な角度の違いで値がぶれるため、厳密に 75 や25 の値を指定するのではなく、ある値より大きい、もしくはある値より小さいと記述する方がプログラムとしては良いことがわかるかと思います。
 そこで今回のコードでは、次に示すように70 と 30 を閾値(threshold) としてみました。閾値というのは、数値をみてある判定をする場合に、その判定の基準となる値、と思っていただければいいです。今回の例では、70よりも大きかったらアクションを起こす、30よりも小さかったらアクションを起こす、といった使い方をしています。このあたりの値の決め方は、絶対こうであるというものではないので、実際の環境に合わせて決めていくことになります。

  • もし X > 70 ならば、前に進む 
  • もし X < 30 ならば、後ろに進む 
  • もし Y < 30 ならば、右に回る
  • もし Y > 70 ならば、左に回る 
  • もし Z > 70 ならば、とまる

5.作ってみよう

 さあ、この方針にそって、プログラムを書いてみましょう。一つずつ詳細を示すことはせず、リストを載せます。この連載を全て読んでいただいているかたであれば、もう読み解けるレベルかと思います。

プログラム

これを動かしたのが次です。

6.まとめ

今回は、加速度センサーを使って、車を操作するプログラムについて説明しました。犬の散歩的に車が動いてくれるのでちょっと面白いですよ。センサーの値の履歴を取るなどして、もう少し複雑なスピードの制御をするとさらにいいと思いますが、少々レベルが上がりすぎるので、今回の内容には含めませんでした。次回は、違った内容で書きたいと思います。お楽しみに。


東京都文京区小石川で小学生、中学生、高校生を対象としたプログラミング&ロボット教室を開校しています。コース概要のページで説明しております。創造性や協調性などこれからの時代に必要となる素養を育てるコースです。ご興味ありましたらぜひお問い合わせください。

また、夏休みの企画として、サマースクールを実施します。ここで取り上げているスクラッチやロボットプログラミングを体験できる内容となっています。詳細はこちらでご確認ください。ご参加お待ちしております。

お問い合わせはこちら!

問い合わせをする

Pocket

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

  1. […] みなさま、こんにちは。前回、前々回とDCモーターやフォトリフレクタ、加速度センサーなどをつかって、ライントレース、車の操縦などを取り上げてきました。今回は、DCモーターでは […]

トラックバック URL