注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。
参加する理由
専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。
学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。
限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。
特別割引: 最新製品を特別割引でお楽しみいただけます。
季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。
👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!
1.7 サーボ
はじめに
このプロジェクトでは、Raspberry Pi を使用してサーボモーターを制御する方法を学びます。サーボモーターは、角度の動きを高精度に制御できるため、ロボティクスや自動化分野で広く使用されています。
必要なもの
このプロジェクトを完了するには、以下のコンポーネントが必要です。
COMPONENT |
PURCHASE LINK |
|---|---|
- |
|
Raspberry Pi |
- |
回路図
以下の回路図は、サーボモーターを制御するために必要な接続を示しています。
配線図
サンプルの実行
このチュートリアルで使用するすべてのサンプルコードは、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 に接続されたサーボモーターを制御します。実行すると次のように動作します。
サーボは -90 度から 90 度まで、10 度刻みで移動します。
各動作の間に 0.1 秒の待機時間が入ります。
その後、方向を反転し、90 度から -90 度まで 10 度刻みで移動します。
この動作が無限ループで繰り返されます。
コードの解説
ライブラリのインポート
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
サーボの初期化
Servoオブジェクトは PWM 0 を指定して初期化されます。servo = Servo(0)
サーボの動作
サーボはループ内でさまざまな角度へ移動します。
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)
トラブルシューティング
サーボが動作しない
原因: GPIO ピンの接続ミス、または電源供給の問題。
解決方法: サーボが PWM 0 に正しく接続されていること、および電源供給が正常であることを確認してください。
サーボの動作が不安定、または反応しない
原因: サーボへの電源供給が不足している可能性があります。
解決方法: Fusion HAT+ の電源が不足している場合は、サーボ用に外部電源を使用してください。
発展アイデア
ユーザー操作によるサーボ制御
キーボード入力を使用して、ユーザーがサーボの位置を対話的に制御できるようにします。
while True: position = float(input("Enter position (-90 to 90): ")) servo.angle(position)
サーボ位置の記録
時間経過に伴うサーボの位置を記録し、その軌跡をグラフとして表示します。
positions = [] for i in range(-90, 91, 10): servo.angle(i) sleep(0.1) positions.append(servo.angle()) plt.plot(positions) plt.show()
まとめ
このプロジェクトでは、サーボモーターを制御する基本的な方法を紹介しました。サーボ制御を理解することで、ロボットやロボットアームなど、さまざまなモーション制御プロジェクトへ応用することが可能になります。