はじめに (対象読者・この記事でわかること)

この記事は、Arduinoを使った電子工作やプログラミングに挑戦し始めたばかりの初心者の方、特にサーボモーターの制御で「なぜかうまくいかない」「突然誤作動する」といった経験がある方を対象としています。

この記事を読むことで、Arduinoとサーボモーターを接続する際に、DC電源のマイナス(GND)を直接サーボモーターのGNDに繋ぐことによって発生する誤作動の原因が明確に理解できるようになります。さらに、その誤作動を防ぐための正しい接続方法と、安定した動作を実現するための具体的な対策についても学ぶことができます。

Arduinoでのプロジェクトを成功させたい、サーボモーターを思い通りに動かしたいと考えている方は、ぜひ最後までお読みください。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。

  • Arduino IDEの基本的な使い方(スケッチの書き込みなど)
  • Arduinoのデジタルピンとアナログピンの役割
  • 基本的な電子回路の概念(電源、GND)

サーボモーター誤作動の意外な原因:DC電源 (-) の直結

Arduinoでサーボモーターを動かす際、多くの人が最初に試すのは、Arduinoからサーボモーターへ電源(VCC)、信号線、そしてGNDを接続する方法でしょう。しかし、外部からDC電源をサーボモーターに供給する場合、そのDC電源のマイナス(GND)をArduinoのGNDと共通化せずに、直接サーボモーターのGNDに接続してしまうと、しばしば誤作動や予期せぬ挙動を引き起こします。

なぜ直接接続すると誤作動するのか?

サーボモーターは、特に動作中に大きな電流を消費する場合があります。ArduinoのGNDピンは、Arduinoボード自体の基準電位(0V)を保つためのものであり、外部からの大きな電流が流れることを想定していません。

DC電源のGNDをサーボモーターのGNDに直接接続し、かつArduinoのGNDと接続しない場合、以下の問題が発生する可能性があります。

  1. 電位差の発生: サーボモーターのGNDとArduinoのGNDの間に電位差が生じます。サーボモーターが消費する電流によって、サーボモーター側のGNDがArduino側のGNDよりもわずかに高い電位になることがあります。
  2. 信号の不安定化: Arduinoからサーボモーターへ送られる信号線は、ArduinoのGNDを基準としています。しかし、サーボモーターのGNDとArduinoのGNDに電位差があると、この信号がArduino側で意図した通りの電位として認識されなくなり、サーボモーターが正確な位置を認識できなくなったり、指示とは異なる動きをしたりします。
  3. ノイズの増幅: サーボモーターの動作によって発生するノイズが、ArduinoのGNDへと伝わりにくくなり、信号線を通してArduino本体に影響を与え、他の処理に干渉する可能性があります。

これらの要因が複合的に作用し、サーボモーターの誤作動、停止、予期せぬ回転といった現象を引き起こします。特に、複数のサーボモーターを同時に駆動させる場合や、トルクの高いサーボモーターを使用する場合には、この問題は顕著になります。

正しい接続方法:GNDの共通化

サーボモーターの誤作動を防ぎ、安定した動作を実現するための最も重要かつ基本的な対策は、「すべてのGNDを共通化する」ことです。具体的には、以下の3つのGNDをすべて接続する必要があります。

  • ArduinoボードのGNDピン
  • 外部DC電源のマイナス端子 (GND)
  • サーボモーターのGND端子

これらのGNDをすべて一本の線で接続することで、すべての機器の基準電位が0Vに統一され、信号のやり取りが安定します。

具体的な配線例

以下に、一般的なSG90サーボモーターをArduino Unoに接続し、外部DC電源(例: 5V 2A)で駆動させる際の正しい配線例を示します。

必要なもの:

  • Arduino Uno(または互換ボード)
  • サーボモーター(例: SG90)
  • 外部DC電源(サーボモーターの要求電圧・電流を満たすもの)
  • ジャンパーワイヤー
  • (必要であれば)ブレッドボード

接続手順:

  1. サーボモーターへの電源供給:
    • サーボモーターのVCC(通常は赤色)を、外部DC電源のプラス (+) 端子に接続します。
    • サーボモーターのGND(通常は茶色または黒色)を、外部DC電源のマイナス (-) 端子に接続します。
  2. Arduinoとの接続:
    • 外部DC電源のマイナス (-) 端子を、ArduinoボードのGNDピンに接続します。
    • (これで、外部DC電源、サーボモーター、ArduinoのGNDがすべて共通化されました。)
    • サーボモーターの信号線(通常はオレンジ色または黄色)を、ArduinoのPWM対応デジタルピン(例: ピン9)に接続します。
  3. Arduinoへの電源供給:
    • Arduino Unoには、USBケーブルまたはDCジャックから別途電源を供給してください。

配線図のイメージ:

(外部DC電源)
  (+) ----> サーボモーター VCC
  (-) ----> サーボモーター GND
     |
     +-----> Arduino GNDピン

(Arduino Uno)
  GNDピン <---- (外部DC電源の (-) 端子)
  デジタルピン 9 ----> サーボモーター 信号線

(サーボモーター)
  VCC <---- (外部DC電源の (+) 端子)
  GND <---- (外部DC電源の (-) 端子)
  信号線 ----> Arduino デジタルピン 9

追加の対策:コンデンサの活用

さらに安定した動作を目指す場合、サーボモーターの電源ラインにコンデンサを追加することも有効です。

  • 電源ラインへのパスコンデンサ: サーボモーターの電源(VCC)とGNDの間に、電解コンデンサ(例: 100μF~470μF程度)を並列に接続します。これにより、サーボモーターが瞬間的に大きな電流を必要とする際に、一時的な電圧降下を緩和し、Arduinoへの影響を軽減できます。コンデンサのプラス極をVCCに、マイナス極をGNDに接続してください。

ハマった点やエラー解決

筆者自身も、初めてサーボモーターを外部電源で動かした際に、このGNDの共通化を怠り、サーボモーターがプルプルと震えたり、意図しない角度で止まってしまったりといった問題に悩まされました。最初はコードに問題があるのか、サーボモーター自体が故障しているのかと疑っていましたが、テスターで各部の電圧を測定したところ、GND間の電位差に気づき、この接続方法の重要性を痛感しました。

特に、外部電源の容量が不足している場合や、配線が長くなると、このGNDの電位差はより顕著になります。

まとめ

本記事では、Arduinoでサーボモーターを外部DC電源で駆動させる際に発生しがちな誤作動の原因と、その解決策について解説しました。

  • 誤作動の主な原因: 外部DC電源のGNDとArduinoのGNDを共通化せずに、サーボモーターのGNDに直接接続することによる電位差の発生。
  • 解決策: 外部DC電源のGND、ArduinoのGND、サーボモーターのGNDをすべて一本の線で接続し、共通化する。
  • さらなる安定化: 電源ラインにコンデンサを追加することも有効。

この記事を通して、サーボモーターの誤作動に悩まされていた方が、その原因を理解し、正しく接続できるようになることを目指しました。Arduinoを使った電子工作は奥深く、基本的な接続方法を正しく理解することが、プロジェクト成功への第一歩となります。

今後は、より複雑なサーボモーターの制御や、複数のサーボモーターを同時に動かす方法、ラジコンカーのような応用例についても記事にする予定です。

参考資料