スクラッチで始めるロボットプログラミング:サーボモーターでロボットアーム

Pocket

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

1.サーボモーターとは?

サーボモーターとは、フィードバック制御により、モーターの回転などがコントロールできるモーターのことです。語源としては、サーボ(Servo)というのがラテン語のservus という言葉、英語でいうと servant (奴隷)といった意味合いの単語からきているようです。要するに、いうことを聞くモーター、といった意味からきているようです。今回使うサーボモーターは、角度を指定するとその指定された角度に回転するというモーターです。主な用途としては、ロボットアームや二足歩行ロボで関節部分の動きを作るところで使われています。今回の記事では、典型的な用途でもあるロボットアームの簡易版を作ってみたいと思います。

2.サーボモーターを早速使ってみよう

2.1. サーボモーターを使って組み立てる

ブロックをくみ上げる

では、早速サーボモーターを使って組み立てていきましょう。まずは、上の図に示すように、青色のブロック5つ、水色のブロック3つ、サーボモーター一つを準備します。次に、右の写真のようにそれぞれブロックを組み上げます。

サーボモータにブロックを接続

次に、先ほど組み上げたブロックをつなげ、サーボモーターとそのブロックとを上の写真のようにつなげます。

コントローラにつなげる

そして、コントローラ本体につなげ、サーボモーターのケーブルをD9のコネクタにさします。以上で、接続は終わりです。

2.2. うごかしてみる

それでは、簡単なプログラムでまずは動きを確認しましょう。次に示すようなプログラムを準備します。今回の動きはつぎのような方針としました。

  • ボタンA3, A0を使って左右にサーボモーターを動かすようにする
  • A3を押したときは左に、A0を押した時には右に 5度動かして止める
  • ボタンを押していないときは、そのまま止まっている

ここで、右や左に5度動かして止めるとあるのですが、角度を操作の度に記憶しておく必要があります。角度を保持するためにはどうしたらいいでしょう?そうです、変数を使うとできます。

2.3.プログラムリスト

 上記の方針で作る場合、プログラムのリストは次のようになります。A0、A3のボタンを押したかどうかの判定は、ボタンの値が0かそうでないか、で確認しています。ボタン(A0からA3)は、押された時に0、押されていない時に1を示します。「もし◯◯なら」を使って、条件が成り立つ時に右、左と判定しています。

サーボモーターのプログラム1

最後に 0.1 秒待つという文を入れています。これを入れないと動きとしては期待通りにならないのですが、なぜだかわかりますでしょうか。プログラミング教室の場合は、宿題にしてしまうのですが、簡単に説明します。「ずっと」とかかれているループ文に待ちがない場合、基盤のクロックの速度で毎回同じ計算をすることになります。このコントローラで使われている、ATmega168PAのクロック周波数が、20MHz(メガヘルツ) です。1 Hz (ヘルツ)は、1秒間に1回ということです。M(メガ)は、キロの1000倍になります。20 MHzすなわち、1秒間に20,000,000 回のクロックになります。1クロックあたりの時間、すなわち、1周期は逆数になるので、0.05nsec(ナノ秒)。仮に、スタディーノの一つのブロックの処理に1000クロックかかるとした場合、0.05 msec(ミリ秒)必要ということになります。このスピードで動かした場合、人がボタンを指で押している時間と比べて非常に短いため、押しただけで一気に上限の180度もしくは、下限の0度になってしまいます。そのため、待ち時間を入れないとうまく動かないのです。

3.複数個のサーボモーターを使う

3.1. 複数のモーターとブロックをくみ上げる

 では、次にロボットアームらしく、複数のサーボモーターを使ってみましょう。

さらにくみ上げる

まず、上に示す図のように、追加で青いブロック4個、緑ブロック11個、サーボモーター2機を用意します。そして、右の写真のように二つ同じ形で組みます。

サーボモーターにつなげていく

次にサーボモーターにそれぞれつなげます。そして、残っているブロックを上の右の写真のように組みます。

手の部分を作る

サーボモーターの一つにその組み上げた部品を上の写真のようにつなげます。ちょうどロボットアームの手の部分になります。

サーボモーターを連結

次に、先ほど組み上げたモーターを三つつなげていきます。コントローラにつけたモーターともう一つのモーターを図の写真のようにつなげます。

さらに連結

そして、もう一つのサーボモーターを接続します。

最後にケーブルを付けて終了

最後に、真ん中のモーターと最後につけたモーターのケーブルをそれぞれD10、D11に接続して完成です。

3.2. プログラム

先ほど書いたプログラムに追加して、次のようなプログラムを追加します。考え方としては、A1で腕を下に、A2を押した時に掴みに行くという動きになります。

  • もしA1が押されたならば
    • サーボD10の角度を 120 度に
  • そうでなければ
    • サーボD10の角度を90度にする
  • もしA2が押されたならば
    • サーボD11の角度を50度に
  • そうでなければ
    • サーボD11の角度を150度にする

実際のプログラムリストは次のようになります。

最終的なプログラム

さあ、動かしてみましょう。次のような動きになるはずです。

4. まとめ

今回は、サーボモーターを使った簡易なロボットアームのプログラミングを紹介しました。凝った動きをさせようとすると、いろいろ試行錯誤がいることになりますが、基本的な動きや、動かし方は今回の内容で理解できるのではないでしょうか。また、違った内容で次回書きたいと思います。お楽しみに。


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

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

お問い合わせはこちら!

問い合わせをする

Pocket

この投稿へのコメント

コメントはありません。

コメントを残す

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

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

トラックバックはありません。

トラックバック URL