ServoTimer2ライブラリ完全ガイド - サーボスイープ制御の基本
必要な部品と材料
| サーボモーター(Tower Pro MG996R等) | ×1 |
| Arduino UNO | ×1 |
| ジャンパーワイヤー | ×1セット |
プロジェクト概要
はじめに
最近ヒューマノイドロボットを作っていて、サーボモーターを多用していました。すべて順調でしたが、ロボットに「喋らせよう」としたとき問題が発生。TMRpcmライブラリ(音声再生用)を使おうとしたら、サーボが動かなくなったのです。
原因はタイマー競合。Servo.h(標準サーボライブラリ)もTMRpcmもVirtualWireも、すべてArduinoのTimer1を使用します。同じタイマーを2つのライブラリで同時に使うことはできません。
解決策はTimer2を使うサーボライブラリを使うこと。それがServoTimer2です。しかしネット上にわかりやすいチュートリアルが見つからなかったため、自分でまとめました。この記事では1つのサーボでシンプルなスイープ(往復運動)を実現します。
Step 1: 部品と組み立て
メイン部品はサーボモーター。ここではマイクロサーボSG90を使用しますが、どのモデルでもOKです。
サーボホーンを厚紙に貼り付け(角度が見やすくするため)、サーボに取り付けます。

Step 2: ServoTimer2ライブラリのインストール
- GitHubからダウンロード: https://github.com/nabontra/ServoTimer2
- Arduinoのライブラリフォルダに解凍して配置
- Arduino IDEで「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール」で追加
Step 3: 簡単な回路を作る
最も簡単な部分です。
- サーボの赤線 → Arduino 5V (VCC)
- 茶/黒線 → GND
- オレンジ/黄線 → デジタルピン6

Step 4: コードの解説
まず、標準のServo.hライブラリでのスイープコードを見てみましょう。
#include
Servo servo1;
void setup() {
servo1.attach(6);
}
void loop() {
servo1.write(0); delay(1000);
servo1.write(90); delay(1000);
servo1.write(180); delay(1000);
}
標準ライブラリではwrite(角度)で直接角度(0〜180度)を指定できます。
一方、ServoTimer2ではパルス幅(マイクロ秒)で指定します。一般的に:
- 750μs ≈ 0度(最小)
- 1500μs ≈ 90度(中立)
- 2250μs ≈ 180度(最大)
※ 正確な値はサーボによって異なります。実際に動かして確認してください。多少範囲外でもサーボが壊れることはありません。
ServoTimer2での同等コード:
#include "ServoTimer2.h"
ServoTimer2 servo1;
void setup() {
servo1.attach(6);
}
void loop() {
servo1.write(750); // 約0度
delay(1000);
servo1.write(1500); // 約90度
delay(1000);
servo1.write(2250); // 約180度
delay(1000);
}
Step 5: 実験と調整
Arduinoに電源を入れ、角度スケール(プロトラクター等)を当てて、どのパルス幅で何度動くか確認します。私のサーボでは2700μsまで行きました。各サーボで実測し、自分のプロジェクトに合う値を見つけてください。

スケッチ(標準Servo.h版とServoTimer2版)
標準 Servo.h スイープ
#include
Servo servo1;
void setup() {
servo1.attach(6);
}
void loop() {
servo1.write(0); delay(1000);
servo1.write(90); delay(1000);
servo1.write(180); delay(1000);
}
ServoTimer2 スイープ
#include "ServoTimer2.h"
ServoTimer2 servo1;
void setup() {
servo1.attach(6);
}
void loop() {
servo1.write(750); // 最小パルス幅 ≈ 0度
delay(1000);
servo1.write(1500); // 中央パルス幅 ≈ 90度
delay(1000);
servo1.write(2250); // 最大パルス幅 ≈ 180度
delay(1000);
}
回路図

GitHubリポジトリ: https://github.com/ashraf-minhaj/Arduino-ServoTimer2-basic-sweep-/tree/code-sweep
製造プロセス
- Raspberry Pi と Arduino を連携させてロボットを自作:ステップバイステップガイド
- シンプルPiロボット - Raspberry Piで2WD自律ローバーを構築
- サーミスタを使った温度測定: Arduinoステップバイステップガイド
- SolidWorksでプログレッシブカットアウェイアニメーションを作成: ステップバイステップチュートリアル
- カッターグラインダー技術の習得:実践ガイド
- 勝利するプロトタイプ構築:ラピッド製品開発ステップバイステップガイド
- モリブデンが現代産業を形作る仕組み:用途、利点、需給動向
- ガラス繊維製造の完全ガイド
- C言語のrealloc()活用ガイド:構文、ベストプラクティス、実例
- C言語free()関数完全マスター:実践ガイドと例
- VHDL関数マスター:効率的な設計のための実践ガイド