マイコンボードの基礎を学ぼう!
本日の流れ(各章へはリンクをクリック)
- 第0章 使用するもの
- 第1章 コース共通:Arduinoを使おう
- Arduinoとは
- Arduinoを使って見よう!- 基板LED点灯プログラムの実行
- 第2章 機械コース:サーボモータを制御しよう!
- サーボモータとは
- サーボモータを動かしてみよう!
第2章 機械コース:サーボモータを制御しよう!
2−1.サーボモータとは
サーボモータとは、指定した角度に動かせるモータのこと。
サーボモータは、主に「回転させる」用途ではなく「角度を変える」用途で使われる。
ロボットの腕や手を支えるのによく利用される。
サーボモータの特徴:
内部にギア・センサ・制御回路が入っている。
そのため、制御信号を受けて、センサが現在の角度を監視、必要に応じて補正(フィードバック制御)を行う。
・角度制御:たとえば「90度にして」と命令すると、すぐにその角度にピタッと止まる
・トルク保持:動かそうとしてもその位置をキープする → ロボットの腕が「ぶらん」とならない!
図 サーボモータの使用例(引用:近藤科学)
表 モータの種類と違い
種類 | 外観 | 特徴 | 用途 |
---|---|---|---|
DCモータ | ![]() | ・回転速度を制御しやすい ・角度制御はできない | 扇風機、おもちゃの車 など |
サーボモータ | ![]() | ・指定した角度に「ピタッ」と動く | ロボットの関節、ラジコンの舵 など |
ステッピングモータ | ![]() | ・精密に動かせる ・制御が複雑 | 3Dプリンタ、コピー機の紙送り装置 |
本授業では、Arduinoが使用できる電力・信号で制御可能なマイクロサーボ 「SG90」を用います。
「SG90」は、3本の電線をArduinoと繋ぐだけで動作可能です。
図 マイクロサーボモータ「SG90」(引用元:SG90マニュアル)
2−2.サーボモータを動かしてみよう!
1.Arduinoとサーボモータを接続する
電源1本、信号1本、グラウンド1本の計3本を繋ぎます。
Arduinoに搭載されたマイコンには機能が割り振られた端子があり、基板の外側にソケットとして差し込めるように準備されています。
各ソケットの機能は分かりやすいように図として配布されています。
図 各ピンソケットに割り振られている機能
表 サーボモータとArduinoを繋ぐ際のサーモモータのケーブルの色と各ケーブルの接続先
サーボモータ | サーモモータのケーブル | ジャンパ線 | Arduino |
VCC | 赤 | 各自で決めた線 | +5V |
GND | 茶 | 各自で決めた線 | GND |
PWM | 黄 | 各自で決めた線 | ~D9 |

2.プログラムを開く
上部のメニューから ファイル → スケッチ例 → Servo → Sweep を開く
下記は開いたプログラムの説明を日本語に翻訳し、イメージしやすいような解説を付けたもの
/* Sweep(スイープ:往復動作)
BARRAGAN による作成 <http://barraganstudio.com>
このサンプルコードはパブリックドメインにあります。・・・「誰でも自由に使って良いよ!」って言っています。
2013年11月8日 修正:Scott Fitzgerald
https://www.arduino.cc/en/Tutorial/LibraryExamples/Sweep
*/
#include <Servo.h> // サーボモータ制御用のライブラリを読み込み・・・サーボを動かす方法が書かれた魔法の辞典(この中に書かれた命令文を使う)
Servo myservo; // サーボを制御するためのServoオブジェクトを作成・・・「myservoという名前のサーボ用のリモコンを作る」という感じ
// ほとんどのArduinoボードでは、最大12個のServoオブジェクトを作成できます
int pos = 0; // サーボの角度を保持するための変数・・・変数を初期化(初期化しないとどんな動きをするのか不明な状態が発生するのでそれを回避)
void setup() { //最初に一回だけ動かす命令を書くところ(初期設定とか)
myservo.attach(9); // サーボをデジタルピン9に接続・・・さっき作ったリモコンからの命令は9ピンに出すように設定
}
void loop() { //ずっと動かす命令を書くところ
for (pos = 0; pos <= 180; pos += 1) { // 角度を0度から180度まで1度ずつ増やすループ
myservo.write(pos); // 'pos'の角度にサーボを動かす・・・リモコンを使って命令出している
delay(15); // サーボがその位置に到達するまで15ミリ秒待つ
}
for (pos = 180; pos >= 0; pos -= 1) { // 角度を180度から0度まで1度ずつ減らすループ
myservo.write(pos); // 'pos'の角度にサーボを動かす
delay(15); // サーボがその位置に到達するまで15ミリ秒待つ
}
}
3.Arduino をPCに繋ぐ
4.プログラムをアップロードする
5.サーボモータが作動するのを確認
観察:プログラムでは0度から180度、180度から0度に戻るという動作を指定しています。その通りに動きましたか?
⇒ 動いたけれど、180度は動いていないという人が沢山いると思います。
今回のサーボは大量生産されたものなので個体差があるのです。
これを組み込んで商品を作ろうとすると工夫が必要になります。
例えば、個体ごとにプログラムで調整、全数検品をするなど。
ちゃんと動くものを作るのは手間暇がかかるのです。
ものをつくるのは簡単ではないですね。
応用:出来た人は次のようにプログラムを書き換えてどうなるか試してみよう。