発行済み 2026-04-08
このガイドは、最大 20 台のデバイスを制御するための実践的な、フィールドでテストされたソリューションを提供します。サーボRaspberry Pi のようなシングルボード コンピュータを同時に使用します。 2台以上を直接接続する場合サーボGPIO ピンに電圧が印加されると、電圧降下、PWM タイミングの競合、およびボードの損傷が発生します。信頼性の高い方法は、専用の PWM ドライバー モジュール (PCA9685 など) を使用することです。以下に、正確なハードウェアのセットアップ、配線図、電力計算、Python コード、トラブルシューティングの手順を示します。これらはすべて、一般的な現実世界のロボット工学およびアニマトロニクス プロジェクトに基づいています。
電流制限: 各 GPIO ピンは最大 16mA を供給しますが、標準的なサーボは移動時に 150 ~ 500mA を消費します。 20 個のサーボには 10A 以上が必要で、ボードの 3.3V/5V レール容量をはるかに超えています。
PWMハードウェア制限: Raspberry Pi には 2 つのハードウェア PWM チャネル (GPIO 18 および 19) しかありません。他のピンのソフトウェア PWM により、20 個のサーボにジッターと CPU 過負荷が発生します。
電圧崩壊: ボードの 5V ピンから 20 個のサーボを動作させると、すぐに電圧降下が発生し、システムがリセットされます。
を使用してくださいI²C ベースの PWM ドライバー モジュール(16 チャンネル PCA9685 が業界標準です)。このようなモジュールを 2 つ (それぞれ最大 16 個のサーボを処理)、または 1 つのモジュールとマルチプレクサを接続します。このガイドでは、2 枚の PCA9685 ボードを使用します (合計 32 チャネル、20 個のみを使用)。
シングルボードコンピュータ 1 台 (Raspberry Pi 3B+ 以降)
PCA9685 16 チャネル 12 ビット PWM ドライバー ボード 2 枚
20 個の標準 5V サーボ (例: SG90、MG90S、または MG996R – トルクのニーズに基づいて選択)
1 つの外部 5V DC 電源 - 電流の計算: 20 サーボ × 0.5A = 最小 10A。を使用してください10A ~ 15A の安定化 5V 電源.
コンデンサ: 電力平滑用の 2x 1000µF 電解 (≥10V)
ジャンパー線 (I²C の場合はメス対メス、サーボ接続の場合はオス対メス)
配電用のブレッドボードまたは端子台
ステップ 1 – Raspberry Pi と最初の PCA9685 間の I²C 接続
Pi 3.3V → PCA9685 の VCC (注: 一部のモジュールは 5V ロジックを受け入れます。モジュールを確認してください。5V ロジック モジュールの場合、モジュールが 3.3V 耐性がある場合にのみ Pi の 3.3V を使用してください。より安全: モジュールのデータシートで 5V 耐性が確認されている場合にのみ、VCC を Pi の 5V ピンに接続してください。ほとんどの PCA9685 ボードは 3.3V I²C ロジックで動作しますが、5V が必要です。サーボ V+ – 次のステップを参照してください。)
正しい標準配線 (PCA9685 ボードの 99% の場合):
Pi 5V (ピン 2 または 4) → PCA9685 VCC (チップのロジック用の電源 - はい、多くは 5V ロジックで動作します)
Pi GND → PCA9685 GND
Pi SDA (GPIO 2) → PCA9685 SDA
Pi SCL (GPIO 3) → PCA9685 SCL
ステップ 2 – サーボ用の外部電源
外部 5V 電源 (10A+) プラス (+) → PCA9685 V+ 端子 (多くの場合「V+」または「サーボ電源」というラベルが付いています)
外部電源 GND → PCA9685 GND (Pi と共通グランドを共有する必要があります – すでに上記で行ったように Pi GND を PCA9685 GND に接続します)
逆起電力スパイクを吸収するために、PCA9685 の近くの V+ と GND の間に 1000µF のコンデンサを配置します。
ステップ 3 – サーボの接続
各サーボの赤 (電源) → PCA9685 V+ レール (ブレッドボード電源レールを使用)
サーボ茶/黒(GND) → PCA9685 GNDレール
サーボオレンジ/イエロー(信号)→PCA9685 PWM出力端子(1枚目のボードは0~15、2枚目のボードは0~3)
ステップ 4 – 2 番目の PCA9685
2 番目のボードの I²C アドレスを設定します。アドレス ジャンパーをはんだ付けします。 PCA9685 のデフォルトのアドレスは 0x40 です。 2 番目のボードの場合: A0 ジャンパをはんだ付け → アドレスは 0x41 になります。
2 番目のボードの SDA/SCL/GND/VCC を 1 番目のボード (同じ I²C バス) と並列に接続します。
その V+ を同じ外部 5V 電源に接続します。
Pi で I²C を有効にします。
sudo raspi-config # インターフェイスオプション → I2C → はい sudo 再起動
必要なライブラリをインストールします。
sudo apt update sudo apt install python3-pip python3-smbus i2c-tools sudo pip3 install adafruit-circuitpython-pca9685
I²C デバイスを確認します。
sudo i2cdetect -y 1
0x40 と 0x41 が表示されるはずです (2 番目のボードが正しくアドレス指定されている場合)。
ファイルを作成するサーボコントロール.py:
import time import board import Busio from adafruit_pca9685 import PCA9685 # I2C バスを初期化します i2c = Busio.I2C(board.SCL, board.SDA) # アドレス 0x40 の最初の PCA9685 pca1 = PCA9685(i2c, address=0x40) pca1.frequency = 50 # 標準サーボの場合は 50Hz # 2 番目アドレス 0x41 の PCA9685 pca2 = PCA9685(i2c, address=0x41) pca2.frequency = 50 # サーボ パルス幅範囲 (通常 500 ~ 2500 マイクロ秒) # デューティ サイクルに変換:duty =pulse_us / 2000065535 def angle_to_duty(angle, min_us=500, max_us=2500): パルス = min_us + (角度 / 180.0)(max_us - min_us) return int((pulse / 20000.0) * 65535) # ボードとチャネルによって任意のサーボを制御します def set_servo(board, channel, angle): if angle 180: angle = 180 board.channels[channel].duty_cycle = angle_to_duty(angle) # 例: 20 個のサーボすべてを 90° に移動します servo = [(pca1, i) for i in range(16)] + [(pca2, i) for i in range(4)] # サーボのボード、ch の合計 20: set_servo(board, ch, 90) time.sleep(0.01) # 電流サージを減らすためにスタッガー # ボード 1 チャネル 0 のサーボを 0 から 180 までスイープ print("ボード 1 ch0 のサーボをスイープ") 範囲 (0, 181, 10): set_servo(pca1, 0, angle) time.sleep(0.05) # すべてのサーボを解放します (PWM の送信を停止します) - ジッターを防ぐために重要です pca1.deinit() pca2.deinit()
実際のケース: ある愛好家は、10 個のサーボを 5V/3A 電源に直接接続しました。同時動作中に電圧が 3.8V に低下し、サーボが停止し、Raspberry Pi が再起動しました。解決:5V/15Aの安定化電源を使用してください(例: LED 電源またはコンピュータ ATX 電源の 5V レール)。追加大きなコンデンサ(5 ~ 8 サーボあたり 1000μF) 各ドライバーボードの近く。
実用的なルール: 最大同時電流を計算します。 20 個すべてのサーボが同時に動く場合、10A と仮定します。安全のため30%の余裕を持たせてください→最小13A。配電には 14AWG 以上の太いワイヤを使用してください。
すべてのサーボが同じ最小/最大パルスを持つわけではありません。一般的な値:
アナログサーボの場合は 500 μs (0°) – 2500 μs (180°)
多くのデジタルサーボの場合、600 μs (0°) – 2400 μs (180°)
キャリブレーションするには: 300 ~ 2700 μs でスイープするテスト スクリプトを作成し、機械的限界を見つけて更新します。マイナスそしてmax_us上記の関数で。
よろめき動作: すべてのサーボに、まったく同じマイクロ秒で角度を変更するように命令しないでください。追加時間.睡眠(0.005)それぞれの間セットサーボ電話。これにより、負荷が分散されてピーク電流が低減されます。
更新速度:50Hz(20ms周期)が標準です。周波数を 100Hz を超えて上げないでください。ほとんどのサーボは過熱します。
CPU使用率: PCA9685 ハードウェアは独自に PWM を生成します。 Python スクリプトは、角度を変更するたびに I²C コマンドのみを送信します。静的な位置の場合、スクリプトは終了できます。サーボは、電力が供給されている限り最後の位置を保持します。
1. コンポーネントを注文する– PCA9685 ボード 2 枚、サーボ 20 個、5V/15A 電源、1000µF コンデンサ。
2. 1 つのサーボでテストする– 単一のサーボを最初の PCA9685 に配線し、スイープ コードを実行します。
3. 電源を追加する– 外部 5V/15A を V+ レールに接続し、サーボが強く動くことを確認します。
4. 5 つのサーボにスケール– 電源ワイヤーの温度を監視しながら、サーボを徐々に追加します。
5. 2 番目の PCA9685 を追加– アドレスを 0x41 に設定し、4 つのサーボを接続してテストします。
6. 20 サーボのフルテスト– 提供されたコードを実行してすべてのサーボを 90° に移動し、すべてのチャネルをゆっくりスイープします。
Raspberry Pi の GPIO から 20 個のサーボを直接制御することはできません。専用の高電流 5V 電源を備えた PCA9685 PWM ドライバー ボードを使用してください。この方法は、何千もの実際のアニマトロニクス、六脚ロボット、自動化プロジェクトで使用されています。信頼性が高く、拡張性があり、十分に文書化されています。小規模なテストから始めて電力の安定性を確認し、その後スケールアップします。成功は適切な接地と十分なアンペア数にかかっています。どちらも交渉の余地はありません。
ここでアクションを実行します。1 つの PCA9685 を 1 つのサーボと外部 5V 電源に配線します。それが機能したら、残りを追加します。組み立てから 2 時間以内に、安定した 20 サーボ システムが完成します。
更新時間:2026-04-08