Arduinoでサーボモーターを動かす|パルス幅での角度指定、電源の分け方と震えるときの直し方
小型RCサーボをArduinoで初めて動かす人へ、内部の位置制御と約20ms周期の信号、Servoライブラリの使い方を説明します。外部電源と共通GNDの配線、角度を順に変える・ゆっくり動かす・ボリュームで操作するコード例、震えやリセットの切り分け、可動域と複数台の電流の考え方まで整理しました。

小さな腕を左右に振る、ふたを決まった位置まで開く。こうした動きには、角度の指令を受け取って軸の位置を保つRCサーボが使えます。マイクロサーボと呼ばれる小型品もありますが、小さいからArduinoの電源だけで無理なく動くとは限りません。配線は三本でも、信号と動力の電源を分けて考える必要があります。
ここでは、一般的な位置制御型の趣味用サーボを一台動かすところから始めます。コードは5V動作で、analogReadが標準設定で0〜1023を返すAVR系ArduinoとServoライブラリを前提にしています。サーボの動作電圧、入力できる信号電圧、パルス幅、可動角は製品ごとに確認し、初回は何も持ち上げず、中央付近の小さな動きだけを試してください。
サーボの中では、指令と現在の位置を比べている
DCモーターに位置を確かめる仕組みが加わります
一般的な小型RCサーボには、DCモーター、減速ギア、位置を検出する部品、制御回路が入っています。DCモーターの速い回転をギアで遅くして、出力軸を回す力に変えます。位置の検出には可変抵抗を使うものがあり、軸が回ると抵抗値に応じた電圧が変わり、制御回路が現在の位置を読み取れます。製品によっては別の検出方式も使われます。
制御回路は、受け取った指令が示す位置と、検出した位置との差を見ます。差があればモーターを回し、近づいたら駆動を弱めたり止めたりします。このように、動かした結果を次の調整へ反映する制御をフィードバックと呼びます。Arduinoが内部のモーターへ直接電流を流し、止める時刻を細かく決めているわけではありません。

止まっている間も、力を出すことがあります
目標位置へ着いた後でも、腕の重みなどで軸がずれると補正が働きます。重い物を支える状態では、静止していてもモーターが力を出し続け、発熱する場合があります。電源は回す場面と支える場面の両方から考えます。
トルクは軸を回そうとする力の大きさで、腕の長さにも関わります。同じ物でも、軸から遠い位置に付けるほど支えるためのトルクが必要です。最初は短いホーンだけで試し、長い棒や重りを付けない方が、電源不足と機構の無理を取り違えずに済みます。ホーンは出力軸に取り付ける腕状の部品です。
また、サーボの内部で位置を検出していても、一般的な三本線の接続では、その測定値はArduinoへ返ってきません。プログラムが90という指令を出したことと、実際にそこへ到着したことは別です。位置がずれると危険な装置や、人や物を支える装置には、この記事の簡単な構成をそのまま使わないでください。
角度を伝えるのは、約20msごとの短いパルス
周期とパルス幅を分けて読みます
一般的なRCサーボの制御では、約20ms周期で信号を繰り返し、その中でHighになっている時間を変えます。20msは0.02秒で、毎秒約50回に相当します。Highの時間がパルス幅で、目安として約1〜2msの範囲がよく使われます。1msは1000µs、つまり1000マイクロ秒です。
中央付近の指令には約1.5msが使われることが多く、そこから短くすると一方へ、長くすると反対側へ動きます。ただし「1msで0度、2msで180度」という対応は共通規格ではありません。対応する角度や回転方向、使える範囲には違いがあります。より広いパルス幅を受け付ける製品もありますが、資料を見ずに広げないでください。サーボ制御信号の解説でも、パルス幅と実際の角度の対応が一律ではないことを説明しています。
対応する更新周期は製品によって異なり、許容外の信号は動作不良や発熱の原因になります。最初はライブラリの標準的な周期を使い、高速更新は対応が明記された製品と制御方法で行います。
analogWriteの数値を角度としては使えません
LEDの明るさを変えるPWMでは、一定の周期の中で、オンの時間が占める割合を変えます。この割合がデューティ比です。LEDは繰り返す点灯の平均として明るく見えます。一方、RCサーボが位置の指令として読むのは、基本的にはHighの時間そのものです。同じ割合でも周期が違えばパルス幅が変わり、同じ角度の指令にはなりません。
サーボの信号も広い意味でPWMと呼ばれますが、analogWriteの0〜255をそのまま角度へ対応させることはできません。Servoライブラリが、サーボ向けの時間幅と繰り返しを作ります。対応するボードでは、PWMの印がないデジタル端子も通常は使用できます。端子名の印だけで選ばず、ボードとライブラリの対応を確認します。

三本線の配線と、外部電源の選び方
色を手がかりにして、資料で確定します
三本線は、電源のプラス、GND、制御信号です。一般的には赤が電源、黒や茶がGND、黄・橙・白などが信号ですが、この色だけで接続先を決めないでください。コネクターをどちらから見た図かも含め、製品の配線図を確認します。逆向きに挿せる形のコネクターもあり、赤い線の位置だけを見ていると信号とGNDを取り違えます。
ArduinoをUSBで動かし、サーボには別の低電圧電源を使う場合、接続は次のように分けます。すべての電源を切ってから作業します。
- サーボの電源線を、仕様に合う外部電源のプラスへつなぎます。
- サーボのGND線を、外部電源のマイナスへつなぎます。
- ArduinoのGNDを、その外部電源のマイナスと共通にします。
- サーボの信号線を、コードで指定するデジタル端子へつなぎます。
- 外部電源のプラスをArduinoの5Vピンへつないでいないことを確認します。
共通GNDは、信号のHighとLowを同じ基準で読むために必要です。サーボの大きな電流は外部電源へ直接戻し、細い配線やArduinoの基板を経由させない構成にします。USBの電源と外部電源のプラスを直結すると、意図しない逆流につながります。
電流容量を増やしても、電圧は上げません
モーターは動き始めや負荷が重いときに多くの電流を必要とします。Arduinoの5Vピンから取ると、USB、保護回路、基板上の電源回路などの制約に左右され、サーボが回り始めた瞬間に電圧が下がる場合があります。一度動いた配線でも、ホーンを付けるとArduinoが再起動することがあります。Arduino公式のサーボ入門も、サーボの負荷に合う電源と電源安定化の必要性を扱っています。
電源はまず動作電圧の範囲を合わせ、その電圧で必要な電流を供給できるものを選びます。電流容量に余裕がある電源でも、サーボへ常にその最大電流が流れるわけではありません。反対に、電流不足を直すために電圧を上げると、サーボを壊すおそれがあります。電池は新品時や充電直後の電圧も確かめます。電圧と容量の違いは、電子工作の電源の選び方|乾電池・電池ボックス・USB給電の違いと、電圧と電流の考え方で整理しています。
実験には、出力が明記され、保護機能のある完成品の低電圧電源と、定格に合う接続用品を使います。家庭用コンセント側や電源内部の改造は避け、最新の仕様と使用条件はメーカーの公式サイトで確認してください。
パスコンは配線と電源を整えてから考えます
パスコンは、電源とGNDの間へ入れて、電源の急な変化や雑音を抑えるためのコンデンサーです。サーボに近い位置の小容量のセラミックコンデンサーや、少し長い時間の変動を補う大容量のコンデンサーが使われます。必要な種類と容量は、電源、配線、サーボの条件で変わり、どの構成にも使える一律の値はありません。
電源の容量不足や細く長い配線を、大きなコンデンサーだけで補うことはできません。まず電源と接触を見直し、メーカーの回路例に沿って追加します。極性のある部品はプラスとマイナス、耐圧を確認し、通電したまま差し替えないでください。電源を切った後にも電荷が残る場合があるため、端子を工具で短絡して放電するような扱いは避けます。
ホーンと機構の間には指を入れず、いつでも電源を切れる場所で試してください。異常な発熱、焦げたにおい、強い唸りや歯が飛ぶような音が出たら電源を切ります。手で軸を止めて力を試したり、無理に回したりせず、破損が疑われる部品は交換してください。










