発行済み 2026-04-01
を制御するサーボモーターはまさにロボット工学とエレクトロニクスの基本的なスキルです。このガイドでは、中心となる動作原理について説明します。サーボモーターをサポートし、明確で段階的なプログラミング手順を提供します。必要な制御信号を生成し、コマンドを実行するコードを作成する方法を学びます。サーボあらゆる角度に調整できるので、プロジェクトが意図したとおりに正確に動くようになります。
すべての標準サーボ モーターは、以下を使用して単一の信号線によって制御されます。パルス幅変調 (PWM)。サーボの位置は電圧レベルではなく、20 ミリ秒 (50 Hz) ごとに送信されるパルスの幅によって決まります。
パルス幅範囲:通常、制御パルスの範囲は次のとおりです。1.0ms~2.0ms.
角度マッピング:このパルス幅はサーボの角度位置に直接マッピングされます。
あ1.0msパルス通常、サーボに次のように命令します。0度.
あ1.5msパルスに命令します中心(90度)位置。
あ2.0msパルスに命令しますフルスイープ(180度) .
一般的なシナリオ:ロボット アームでは、グリッパーを制御するサーボがしっかりと閉じる必要があります。一貫した 1.0 ms パルスを送信することで、アームはサイクルごとに確実に同じ位置に閉じます。パルスが少しでもずれると、グリッパが対象物を保持できなくなる可能性があります。
コードを記述する前に、サーボをマイクロコントローラー (Arduino など) に接続します。すべての標準サーボは 3 線式インターフェースを使用します。サーボのデータシートと照らし合わせて配線を確認してください。ここでのエラーは、失敗の最も一般的な原因です。
| ワイヤーの色 (標準) | 関数 | 繋がり |
|---|---|---|
| ブラウンまたはブラック | グランド(GND) | システムの共通アースに接続します。 |
| 赤 | 電源 (Vcc、4.8V ~ 6V) | 外部5V電源に接続します。非常に小型のマイクロサーボでない限り、マイクロコントローラーの 5V ピンからサーボに直接電力を供給しないでください。 |
| オレンジまたはイエロー | 信号(PWM) | PWM 対応のデジタル ピン (ピン 9 など) に接続します。 |
一般的なシナリオ:ラジコンカーを組み立てる初心者は、サーボをマイクロコントローラーの 5V ピンに直接接続することがよくあります。テスト中はこれは機能しますが、負荷がかかるとマイクロコントローラーが繰り返しリセットされます。解決策は常に、サーボ用に別個の適切な電源を使用し、マイクロコントローラーとサーボが共通のグランドを共有するようにすることです。
プログラムの中核は、20 ms ごとに 1.0 ms ~ 2.0 ms の正確なパルスを生成することです。ピンを切り替えるための低レベル コードを作成することもできますが、ほとんどのプロジェクトではライブラリを使用することが最も信頼性が高く効率的な方法です。
これは、初心者およびほとんどのアプリケーションにとって推奨される方法です。ライブラリはすべての複雑なタイミングをバックグラウンドで処理します。
#含むサーボmyServo; // サーボオブジェクトを作成 void setup() { myServo.attach(9); // サーボをピン 9 に接続します } void loop() { myServo.write(0); // 0 度へのコマンド遅延(1000); // 1 秒待ちます myServo.write(90); // 90 度のコマンド遅延(1000); // 1 秒待ちます myServo.write(180); // 180 度のコマンド遅延(1000); // 1秒待ちます }
説明:
#含む: ライブラリをインポートします。
myServo.attach(ピン): 信号にどのピンを使用するかをマイクロコントローラーに指示します。
myServo.write(角度): 位置を指示する最も簡単な方法。ライブラリは角度 (0 ~ 180) を正しいパルス幅 (1.0 ~ 2.0 ms) に自動的に変換します。
使用するmyServo.write()便利ですが、角度とパルス幅の関係は必ずしも完全に線形であるとは限りません。カメラ安定化ジンバルなど、正確な位置決めが必要なアプリケーションの場合、パルス幅をマイクロ秒単位で直接設定できます。
一般的なシナリオ:アクションカメラのジンバルは完全に水平でなければなりません。サーボ ライブラリのマッピングがわずかにずれていると、カメラは一定の傾きを持ちます。を使用することで、writeマイクロ秒()機能を使用すると、完璧な 0 度および 180 度の位置に必要な正確なパルス幅を手動で校正できます。
#含むサーボmyServo; void setup() { myServo.attach(9); } void loop() { // パルス幅をマイクロ秒単位で直接命令します myServo.writeMicroseconds(1000); // 1.0 ミリ秒 -> 0 度の遅延(1000); myServo.writeMicro秒(1500); // 1.5 ミリ秒 -> 90 度遅延(1000); myServo.writeMicroseconds(2000); // 2.0 ミリ秒 -> 180 度遅延(1000); }
自然な動きを実現するには、サーボが新しい位置に即座にスナップする必要はありません。むしろスムーズに動くはずです。これは、指令された角度を短い遅延で段階的に変更することによって実現されます。
一般的なシナリオ:人を見つめるロボットの頭。サーボが瞬時に新しい位置にスナップすると、動きが不自然で機械的に見えます。スムーズ モーション アルゴリズムを使用すると、ロボットがよりインテリジェントで本物のように見えます。
#含むサーボmyServo; int pos = 0; // 現在位置を格納する変数 void setup() { myServo.attach(9); } void loop() { // 0 度から 180 度まで一度に 1 度ずつスイープします for (pos = 0; pos = 0; pos -= 1) { myServo.write(pos);遅延(15); } }
コードが正しい場合でも、問題が発生する可能性があります。ここでは、実際の経験に基づいた、最も頻繁に発生する問題とその解決策を示します。
| 問題 | 最も考えられる原因 | 解決 |
|---|---|---|
| サーボが動かないか、ジッターがありません。 | 電力供給が不十分です。 | 専用の外部電源を使用してください。電源のグランドがマイクロコントローラのグランドに接続されていることを確認してください。 |
| サーボが間違った角度に移動します。 | パルス幅の校正またはライブラリの仮定が正しくありません。 | 使用writeマイクロ秒()特定のサーボの最小および最大パルス値を手動で校正します。 |
| サーボは反応しませんが、動作していました。 | 信号ピンまたは配線が損傷している。 | 簡単なスイープ スケッチを使用してサーボをテストします。機能する場合、問題は新しいコードにあります。そうでない場合は、配線を検査し、別の信号ピンを試してください。 |
連続回転サーボは動きますが、書く(90)それを止めません。 |
これは連続回転サーボであり、標準位置サーボではありません。 | 連続回転サーボの場合、パルス幅によって速度と方向が制御されます。 1.5 ms は停止、1.0 ms は一方向のフルスピード、2.0 ms は反対方向のフルスピードです。 |
サーボ モーターを確実に制御するには、次の 3 つの基本原則を常に覚えておいてください。
1. シグナルが鍵です:サーボの位置は、20 ms フレーム内の 1.0 ms ~ 2.0 ms のパルス幅によってのみ決定されます。
2. 電源は別です:マイクロコントローラーは論理デバイスです。サーボは動力装置です。必ずサーボ専用の電源をご使用ください。
3. ライブラリは以下を簡素化します。確立されたサーボ ライブラリを使用して迅速なセットアップを行い、高精度が必要な場合は直接マイクロ秒制御に切り替えます。
実行可能な次のステップ:
1. スイープから始めます。外部電源を使用して単一のサーボをマイクロコントローラーに配線し、スイープ コードを実行します。これにより、ハードウェアのセットアップと基本的な制御が検証されます。
2. サーボを校正します。を使用します。writeマイクロ秒()サーボの 0° および 180° 位置の正確なパルス幅を見つけて、これらの値をメモする機能を使用します。
3. 段階的に構築します:一度に 1 つのサーボをプロジェクトに追加します。マルチサーボ調整に移行する前に単一のアクチュエータの制御をマスターして、トラブルシューティングを簡素化します。
更新時間:2026-04-01