注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。

参加する理由

  • 専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。

  • 学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。

  • 限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。

  • 特別割引: 最新製品を特別割引でお楽しみいただけます。

  • 季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。

👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!

1.7 サーボ

はじめに

このプロジェクトでは、Raspberry Pi を使用してサーボモーターを制御する方法を学びます。サーボモーターは、角度の動きを高精度に制御できるため、ロボティクスや自動化分野で広く使用されています。


必要なもの

このプロジェクトを完了するには、以下のコンポーネントが必要です。

COMPONENT

PURCHASE LINK

サーボ

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

以下の回路図は、サーボモーターを制御するために必要な接続を示しています。

../_images/1.3.2_sch.png

配線図

../_images/1.3.2_bb.png

サンプルの実行

このチュートリアルで使用するすべてのサンプルコードは、ai-lab-kit ディレクトリに用意されています。 以下の手順に従ってサンプルを実行してください。

cd ~/ai-lab-kit/python/
sudo python3 1.7_Servo.py

スクリプトを実行すると、PWM 0 に接続されたサーボが −90° から 90° まで 10 度刻みで滑らかに動き、各位置で短時間停止します。 その後、同じ方法で 90° から −90° へ戻ります。この往復動作が継続的に繰り返されます。


コード

以下の Python コードは、サーボモーターをさまざまな角度に動かして制御する方法を示しています。

#!/usr/bin/env python3
from fusion_hat.servo import Servo   # Import Servo class
from time import sleep               # Import sleep for delays

# Initialize servo on channel 0
servo = Servo(0)

try:
   while True:
      # Sweep from -90° to +90° in steps of 10°
      for angle in range(-90, 91, 10):
            servo.angle(angle)
            sleep(0.1)   # Smooth movement delay

      # Sweep back from +90° to -90° in steps of 10°
      for angle in range(90, -91, -10):
            servo.angle(angle)
            sleep(0.1)

except KeyboardInterrupt:
   # Stop the program safely when Ctrl+C is pressed
   servo.angle(0)        # Return servo to center position
   sleep(0.1)

この Python スクリプトは、PWM 0 に接続されたサーボモーターを制御します。実行すると次のように動作します。

  1. サーボは -90 度から 90 度まで、10 度刻みで移動します。

  2. 各動作の間に 0.1 秒の待機時間が入ります。

  3. その後、方向を反転し、90 度から -90 度まで 10 度刻みで移動します。

  4. この動作が無限ループで繰り返されます。


コードの解説

  1. ライブラリのインポート

    fusion_hat ライブラリは GPIO 操作を簡単に扱えるようにし、 time ライブラリは待機時間を実現するための関数を提供します。

    from fusion_hat.servo import Servo   # Import the Servo class for controlling servos
    from time import sleep               # Import sleep for timing delays
    
  2. サーボの初期化

    Servo オブジェクトは PWM 0 を指定して初期化されます。

    servo = Servo(0)
    
  3. サーボの動作

    サーボはループ内でさまざまな角度へ移動します。 angle メソッドはサーボの位置を設定し、 sleep は指定した時間だけ処理を一時停止します。

    while True:
       # Sweep from -90° to +90° in steps of 10°
       for angle in range(-90, 91, 10):
             servo.angle(angle)
             sleep(0.1)   # Smooth movement delay
    
       # Sweep back from +90° to -90° in steps of 10°
       for angle in range(90, -91, -10):
             servo.angle(angle)
             sleep(0.1)
    

トラブルシューティング

  1. サーボが動作しない

    • 原因: GPIO ピンの接続ミス、または電源供給の問題。

    • 解決方法: サーボが PWM 0 に正しく接続されていること、および電源供給が正常であることを確認してください。

  2. サーボの動作が不安定、または反応しない

    • 原因: サーボへの電源供給が不足している可能性があります。

    • 解決方法: Fusion HAT+ の電源が不足している場合は、サーボ用に外部電源を使用してください。


発展アイデア

  1. ユーザー操作によるサーボ制御

    キーボード入力を使用して、ユーザーがサーボの位置を対話的に制御できるようにします。

    while True:
       position = float(input("Enter position (-90 to 90): "))
       servo.angle(position)
    
  2. サーボ位置の記録

    時間経過に伴うサーボの位置を記録し、その軌跡をグラフとして表示します。

    positions = []
    for i in range(-90, 91, 10):
       servo.angle(i)
       sleep(0.1)
       positions.append(servo.angle())
    plt.plot(positions)
    plt.show()
    

まとめ

このプロジェクトでは、サーボモーターを制御する基本的な方法を紹介しました。サーボ制御を理解することで、ロボットやロボットアームなど、さまざまなモーション制御プロジェクトへ応用することが可能になります。