1.3.2 サーボ¶
はじめに¶
このプロジェクトでは、サーボを回転させる方法を学びます。
必要なコンポーネント¶
このプロジェクトでは、以下のコンポーネントが必要です。
回路図¶
実験手順¶
ステップ1: 回路を組み立てます。
ステップ2: コードのフォルダに移動します。
cd ~/davinci-kit-for-raspberry-pi/python-pi5
ステップ3: 実行可能ファイルを実行します。
sudo python3 1.3.2_Servo_zero.py
プログラムが実行されると、サーボは0度から90度、180度まで回転し、次に180度から90度、0度まで回転します。これが繰り返されます。
コード
注釈
以下のコードは変更/リセット/コピー/実行/停止ができます。ただし、コードを変更する前に davinci-kit-for-raspberry-pi/python-pi5
のようなソースコードのパスに移動する必要があります。コードを変更した後、直接実行して効果を確認できます。
#!/usr/bin/env python3
from gpiozero import Servo
from time import sleep
# サーボモーターを接続するGPIOピン番号を設定
myGPIO = 18
# サーボのパルス幅を微調整するための補正係数を定義し、それを使用して最大および最小パルス幅を計算します
myCorrection = 0.45
maxPW = (2.0 + myCorrection) / 1000 # 最大パルス幅を計算
minPW = (1.0 - myCorrection) / 1000 # 最小パルス幅を計算
# カスタムパルス幅でサーボオブジェクトを初期化
servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)
try:
while True:
# サーボを中央に位置させて待機
servo.mid()
print("mid") # 現在の位置を表示
sleep(0.5) # 0.5秒の一時停止
# サーボを最小位置に移動させて待機
servo.min()
print("min") # 現在の位置を表示
sleep(1) # 1秒間位置を保持
# サーボを中央の位置に戻して待機
servo.mid()
print("mid") # 現在の位置を表示
sleep(0.5) # 0.5秒の一時停止
# サーボを最大位置に移動させて待機
servo.max()
print("max") # 現在の位置を表示
sleep(1) # 1秒間位置を保持
except KeyboardInterrupt:
# キーボード割り込み(Ctrl+C)でスクリプトを正常に終了する
pass
コードの説明
これらのインポート文は、サーボ制御のための
Servo
クラスとタイミングのためのsleep
関数を取り込みます。#!/usr/bin/env python3 from gpiozero import Servo from time import sleep
サーボモーターを接続するためのGPIOピン番号を18に設定します。
# サーボモーターが接続されているGPIOピン番号を設定します myGPIO = 18
これらの行は、補正係数を定義し、それを使用してサーボの最大および最小パルス幅を計算します。これにより、サーボの動きの範囲を微調整できます。
# サーボのパルス幅を微調整するための補正係数を定義し、最大パルス幅と最小パルス幅を計算します myCorrection = 0.45 maxPW = (2.0 + myCorrection) / 1000 # 最大パルス幅を計算 minPW = (1.0 - myCorrection) / 1000 # 最小パルス幅を計算
カスタムパルス幅でサーボオブジェクトを初期化します。
# カスタムパルス幅でサーボオブジェクトを初期化します servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)
try
ブロックには、サーボを連続的に動かすためのwhile True
ループが含まれています。サーボは中間位置、最小位置、最大位置に配置され、各位置が表示され、指定された期間保持されます。try: while True: # サーボを中間位置に配置し、待機 servo.mid() print("mid") # 現在の位置を表示 sleep(0.5) # 0.5秒の短い休憩 # サーボを最小位置に移動し、待機 servo.min() print("min") # 現在の位置を表示 sleep(1) # 1秒間位置を保持 # サーボを中間位置に戻し、待機 servo.mid() print("mid") # 現在の位置を表示 sleep(0.5) # 0.5秒の短い休憩 # サーボを最大位置に移動し、待機 servo.max() print("max") # 現在の位置を表示 sleep(1) # 1秒間位置を保持 except KeyboardInterrupt: # キーボード割り込み(Ctrl+Cなど)でスクリプトを正常に終了します pass