【初めてのArduino】7.サーボモータ|ハンズオンで学ぶ初心者向け入門コース

YouTube

目次

0:00 サーボモータについて
0:51 今回作るもの
0:58 使う材料の準備
1:03 回路図
1:27 回路を組む
1:55 プログラムの作成
4:07 ボードに書き込む
4:30 まとめ

7.サーボモータ

電子工作を初めて見たけど、繰り返し構文についてよく分からなくてつまづいているんだ

それじゃあこのコースで繰り返し構文について一緒に学んでいこう

このレッスンでは、サーボモータを使って、以下のような内容を学んでいきます。

今回のレッスンで学べる事
  • 繰り返し構文:for
  • ライブラリの読み出し
  • シリアルモニター(グラフ)

特にfor文は汎用性が高く、何をするにしても必ずと言っていいほど登場するプログラムなので、必ず抑えておいてください。

使用したコード

動画内で使用したコードです。ご自由にご使用ください。

サーボモータについて

サーボモータとは回転角度や速度を制御できるモータのことで、ロボットの関節や踏切の開閉など、ある決まった角度の範囲で精度良く物を動かしたい時に広く使われています。

構造は以下のように、通常のブラシ付きDCモータに加え、いくつかのギヤと、制御基板、回転量を検知するポテンショメータという部品からできています。

こちらは、サーボモータの簡単なシステムを表したものです!

Arduinoなどのコントローラから回転角度の指示が来ると、DCブラシモータが回転します。

その回転量をポテンショメータで検知し、指示された角度に来たらモータを停止する仕組みになっています。

なおこのように、変化量を検知して次の動作を決めるシステムは一般的にフィードバック制御と呼ばれます。

今回作るもの

以下の画像は今回作成した回路で、5秒おきに180度回転するように動作させています。

それではこの回路を作っていきましょう。

使う材料の準備

今回使う材料は、Arduino Uno・サーボモータ・オスオスのジャンパーワイヤ3本です。

以下の画像は、今回作成する回路図になります。

サーボモータの電源は、Arduinoの5V出力端子から供給しています。

Arduinoの場合、5Vの出力端子の電源はUSBポートに直接つながっているので、USB規格である500mAまで電流を流すことができます。
大きなモータは動かすことができませんが、今回使っているようなホビー用の小さなサーボモータであれば問題なく使用することができます。

回路図

次に回路図にならって、ブレッドボード図を作成したのが以下の画像です。

今回使用しているタイプも含めて、多くのサーボモータはオレンジ、赤、茶色の3本の線が出ています。

この場合、オレンジは信号、赤は電源、茶色はGNDラインを表しているので、間違えないようにしてください。

回路を組む

それではこの図にならって、回路を組んでみたのがこちらです。

プログラムの作成

それではコーディングを行っていきます。

Arduino IDEを起動して、ファイル→新規ファイルをクリックし、この画面にあるプログラムを入力してください。

ここではまず、最初の行で「include」というコードを使って、Servo.hというサーボモータ制御用のライブラリをインポートしています。

ライブラリとは
あるモジュールを動作するために用意されたコードの集まりのこと。

ArduinoにはこのServo.hを始め、いくつかのライブラリがデフォルトで用意されています。

ライブラリを活用すると、ゼロからコードを書くより簡単にコードが書けるので、積極的に活用していきましょう!

ちなみに今回使うservo.hには、以下のような6個の機能が用意されているので使う前に軽く目を通しておいて下さい。

そして読み出したライブラリを使えるようにするために、下準備として以下の部分でオブジェクトを作成しています。

オブジェクトというのは少し概念が難しいですが、実際にその機能を使えるようにするために、設計図の状態から現実世界に呼び出したものを言います。

 

Setup関数内では、servoライブラリの中にあるattachという機能を使い、9ピンを信号用のピンに割り当てています。

また今回はシリアルプロッタという機能を使って値をモニタするために、シリアルモニタ機能と同様にSerial.begin関数を使用しています。

 

次にloop関数内では、for文を使って繰り返し行う処理を書いています。

for文では波括弧の中で囲まれた部分を、{}内の条件が成立している限り繰り返すようにプログラムが動作します。

{}の中は、初期化処理、条件式、増分という3つのセクションに分かれています。

増分はいくつか書き方がありますが、全て同じ意味なので頭に入れておきましょう!

 

今回の場合で言うと、サーボモータの回転角度を表したangleという変数に最初に0を代入し、180に到達するまでは1ずつ追加していきながら処理を繰り返すという動きになります。

そしてその処理の部分では、servoライブラリのwriteという関数を使って各angleの角度になるように回転させています。

その後30msの時間待機すると共に、現在のangleの値をシリアルプロッタで見れるようにしています。

これは簡単に言うと、0〜180度までを1度ずつ回転させていることになります。

そしてその回転時間は、1度あたり30msなので180度で5秒程度ということになるんです。

180度まで回転させた後は、1秒待機した後でまた0度から同じ動作を繰り返します。

ボードに書き込む

最後にファイルを保存し、ツールバーの「マイコンボードに書き込む」のボタンを押して書き込みます。

問題なくプログラムが作れていたら、5秒ごとに180度回転するのが確認できると思います。

またメニューバーのツールからシリアルプロッタを起動すると、以下の画像のように0から180まで徐々に増加し、180に到達した時点でまた0からスタートという動作を繰り返している様子が分かると思います。

まとめ

ということで今回は、このような内容を学んできました。

今回のレッスンで学んだこと
  • 繰り返し構文;for
  • ライブラリの読み出し
  • シリアルモニター(グラフ)
やってみよう!
今度はサーボモータを逆向きに動かすプログラムを作成してみてください。

当サイトでは、最低限身につけるべき知識やツールの解説など、電子工作を 0 から体系的に学べる動画や記事を投稿しています。

さらに電子工作について学びたい方は、他の動画や記事もぜひ見てみてください。