Raspberry Pi でサーボ モーターを制御する方法: ステップバイステップ ガイド_カスタム ドライブ_業界の洞察_Kpower
家 > 業界の洞察 >カスタムドライブ
テクニカルサポート

製品サポート

Raspberry Pi でサーボモーターを制御する方法: ステップバイステップガイド

発行済み 2026-04-18

このガイドは、標準の制御のための完全で実践的なチュートリアルを提供します。サーボRaspberry Pi シングルボード コンピューターを使用したモーター。実際のテストと公式のハードウェア ドキュメントに基づいて、正確な角度制御を実現するために必要な正確な配線、Python コード、PWM 設定を学びます。

01必要なもの – 共通コンポーネント (ブランドは不要)

Raspberry Pi (GPIO ピンを備えた任意のモデル (例: 3B+、4B、または 5))

Raspberry Pi OS を搭載した MicroSD カード (Bookworm 以降)

標準5Vサーボモーター (ホビーロボットで一般的に使用されます)

外部 5V 電源 (2A 以上) – ほとんどのサーボ大電流が流れる

ジャンパー線 (メス-メス)

小型ポテンショメータ (オプション、手動制御の例)

> 現実世界のメモ: 典型的な教室や趣味のセットアップでは、ユーザーは 5V ピンから直接サーボに電力を供給することで Raspberry Pi を損傷することがよくあります。このガイドでは、正しい電源絶縁方法を示します。

02基本原理: サーボ位置の制御方法

標準的なサーボモーターは連続回転しません。代わりに、PWM (パルス幅変調) 信号に基づいて特定の角度 (通常は 0° ~ 180°) に移動します。 Raspberry Pi は、GPIO ピンでこの信号を生成します。

重要なパラメータ (サーボ データシートおよび Raspberry Pi の公式ドキュメントから):

信号周波数:50Hz(周期=20ms)

0°のパルス幅: 0.5 ms (デューティサイクル = 2.5%)

90°のパルス幅: 1.5 ms (デューティサイクル = 7.5%)

180°のパルス幅: 2.5 ms (デューティサイクル = 12.5%)

これらの値は、ほとんどのアナログおよびデジタル サーボの業界標準です。常にサーボのデータシートで確認してください - 小さな差異が存在します。

03ステップ 1: 配線 – 安全で正しい接続

Raspberry Pi の 5V ピンから直接サーボに電力を供給しないでください。一般的なサーボは動作中に 200 ~ 800 mA を消費する可能性があり、ピーク電流は 1A を超えます。 Raspberry Pi の 5V ピンは USB 入力に直接接続されており、確実に供給できる電流は約 500 mA のみです (古いモデルではこれより少ない)。より多くの電流を引き出すと、電圧降下、システムのフリーズ、または永久的な損傷が発生する可能性があります。

正しい配線 (一般的なセットアップでテスト済み):

サーボワイヤー 繋がり
ブラウン(グランド) 共通グランド: Raspberry Pi GNDに接続そして外部電源GND
赤(電源、5V) 外部5V電源プラス端子
オレンジ/イエロー (信号) Raspberry Pi GPIO ピン (例: GPIO18 – 物理ピン 12)

共通点が必須である理由:サーボの制御信号 (Pi からの 0 ~ 3.3 V) とサーボの電源 (外部電源からの 5 V) は基準電圧を共有する必要があります。共通のグランドがないと信号が不定になり、サーボがジッターしたり動かなくなったりします。

04ステップ 2: Raspberry Pi で PWM を有効にする

Raspberry Pi OS には Python がプリインストールされています。正確な PWM 信号を生成するための信頼できる方法が 2 つあります。初心者に推奨される方法は、RPi.GPIO特定のピンでハードウェア PWM を使用します。

Raspberry Pi 40 ピン ヘッダー上のハードウェア PWM 対応 GPIO ピン:

GPIO12 (ピン 32) – PWM チャネル 0

GPIO13 (ピン 33) – PWM チャネル 1

GPIO18 (ピン 12) – PWM チャネル 0 (最も一般的に使用される)

GPIO19 (ピン 35) – PWM チャネル 1

树莓派pca9685多路舵机_树莓派控制舵机_树莓派控制360度舵机转动

PWM インターフェイスを有効にします (ハードウェア PWM を使用している場合)。追加の手順は必要ありません。ハードウェア PWM はいつでも利用できます。ソフトウェア PWM (任意のピン) の場合、設定は必要ありませんが、タイミングが不安定になる可能性があります。

05ステップ 3: Python コード – 正確な位置制御

以下は、サーボを 2 秒の一時停止を挟んで 3 つの角度 (0°、90°、180°) に移動させる、テスト済みの完全な Python スクリプトです。このコードは、RPi.GPIO の公式ドキュメントに従っています。

import RPi.GPIO as GPIO import time # BCM ピン番号付けを使用 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # GPIO18 を PWM 出力として設定 servo_pin = 18 GPIO.setup(servo_pin, GPIO.OUT) # 50 Hz で PWM インスタンスを作成 pwm = GPIO.PWM(servo_pin, 50) pwm.start(0) # デューティ サイクル 0% で開始します def set_servo_angle(angle): """ 角度 (0 ~ 180) をデューティ サイクル (2.5 ~ 12.5) に変換します 式: デューティ = (角度 / 180)10 + 2.5 角度 180 の場合、複数のサーボ データシート """ で検証: 角度 = 180 デューティ = (角度 / 180.0)10.0 + 2.5 pwm.ChangeDutyCycle(duty) # サーボが位置に到達できるようにします time.sleep(0.5) # ジッターを減らすために信号の送信を停止します (オプション) pwm.ChangeDutyCycle(0) time.sleep(0.1) try: while True: print("0°への移動") set_servo_angle(0) time.sleep(2) print("移動中90°まで") set_servo_angle(90) time.sleep(2) print("180°への移動") set_servo_angle(180) time.sleep(2) KeyboardInterruptを除く: print("ユーザーによる停止") pwm.stop() GPIO.cleanup()

主要な詳細:各位置の後、コードはデューティ サイクルを 0% に設定し、0.1 秒待機します。これにより、継続的な電力消費が防止され、サーボのジッターが軽減されます。多くのオンライン例ではこれが省略されており、不必要な電流の浪費が発生します。

06ステップ 4: 実行とテスト

スクリプトを次の名前で保存しますサーボコントロール.py。ターミナルで次を実行します。

python3 サーボコントロール.py

予想される動作:サーボシャフトは 0°まで回転し、2 秒間停止し、90°まで移動し、一時停止し、180°まで移動し、これを繰り返します。

サーボが動かない場合:

共通点を確認 – 最もよくある間違い

外部電源がオンになっていて、少なくとも 5V が供給されていることを確認します。

GPIO ピン番号を確認します (BCM 18 = 物理ピン 12)

その後の睡眠時間を減らすデューティサイクルの変更?いいえ – サーボが位置に到達するまでに約 300 ~ 500 ミリ秒必要です

07現実世界の一般的な問題と解決策

問題 最も考えられる原因 検証済みの修正
サーボがピクピクするが回転しない 電源からの電流不足 5V/2A 以上の電源を使用してください。電源レール間に1000μFのコンデンサを追加します
サーボは極端な方向 (0° または 180°) にのみ動きます。 間違ったデューティサイクル範囲 オシロスコープで実際のパルス幅を測定します。式を調整する
サーボが動くとRaspberry Piが再起動する サーボはPiの5Vピンから電力供給されます サーボ電源を直ちに外部電源に移します。
特定の角度でのジッター 信号ラインまたはソフトウェア PWM タイミングのノイズ ハードウェア PWM ピン (GPIO12/18) を使用します。信号線と直列に1kΩの抵抗を追加します
サーボが非常に熱くなります 位置決め後にデューティサイクルが0%に戻らない 追加pwm.ChangeDutyCycle(0)例に示すように

08上級: ポテンショメータを使用した手動制御

インタラクティブなプロジェクトの場合、MCP3008 ADC を使用してアナログ ポテンショメータを読み取ることができます (Raspberry Pi にはアナログ入力がないため)。ただし、より簡単なテスト方法は、キーボード入力を使用することです。

GPIOインポート時間としてRPi.GPIOをインポート GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) pwm = GPIO.PWM(18, 50) pwm.start(0) def angle_to_duty(angle): return (angle / 180.0) * 10.0 + 2.5 try: while True: cmd = input("角度(0-180)を入力または'q' で終了: ") if cmd == 'q': ブレーク試行: angle = float(cmd) if 0

09結論と実行可能な推奨事項

核心点を繰り返します:Raspberry Pi でサーボを安全かつ正確に制御するには、(1) サーボに外部 5V 電源を使用し、(2) Pi、サーボ、電源の間に共通アースを接続し、(3) 0.5 ~ 2.5 ms のパルスに対応するデューティ サイクルを持つ 50 Hz の PWM 信号を生成し、(4) ジッターと電力消費を削減するために各動作後に PWM 信号を停止します (デューティ 0%)。

このガイドを適用するためのアクション ステップ:

1. 上記のコンポーネントを集めます。特定のブランドは必要ありません。標準的な 5V サーボであればどれでも動作します。

2. 共通アース接続を再確認して、図のように正確に配線します。

3. Python スクリプトをコピーして実行します。サーボが 0°、90°、180° に移動するのを観察します。

4. プロジェクトのニーズに合わせてスクリプト内の角度の値を変更します。

5. 実稼働プロジェクトまたは長期にわたるプロジェクトの場合は、常にハードウェア PWM を使用し、電圧スパイクを平滑化するためにサーボ電源ラインの両端に 100 ~ 470 µF の電解コンデンサを追加します。

さらなる検証のための信頼できる情報源:Raspberry Pi の公式ドキュメント (/documentation/computers/os.html#gpio-and-the-40-pin-header)、およびサーボ モーターのデータシート (通常はメーカーの Web サイトから入手可能)。特定のサーボのパルス幅範囲を常に参照してください。標準は 0.5 ~ 2.5 ms ですが、一部のサーボは 0.7 ~ 2.3 ms を使用します。サーボをスイープして実際の限界を記録する簡単なキャリブレーション スクリプトにより、完璧な精度が得られます。

更新時間:2026-04-18

未来に力を与える

お客様の製品に適したモーターまたはギアボックスを推奨するには、Kpower の製品スペシャリストにお問い合わせください。

Kpowerにメールする
お問い合わせを送信
WhatsApp メッセージ
+86 0769 8399 3238