.. note::
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
**参加する理由は?**
- **エキスパートサポート**:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
- **学び&共有**:ヒントやチュートリアルを交換してスキルを向上させましょう。
- **独占的なプレビュー**:新製品の発表や先行プレビューに早期アクセスしましょう。
- **特別割引**:最新製品の独占割引をお楽しみください。
- **祭りのプロモーションとギフト**:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[|link_sf_facebook|]をクリックして今すぐ参加しましょう!
.. _1.3.2_py_pi5:
1.3.2 サーボ
=======================
はじめに
-----------------
このプロジェクトでは、サーボを回転させる方法を学びます。
必要なコンポーネント
------------------------------
このプロジェクトでは、以下のコンポーネントが必要です。
.. image:: ../python_pi5/img/1.3.2_servo_list.png
回路図
--------------------
.. image:: ../img/image337.png
実験手順
-----------------------
**ステップ1:** 回路を組み立てます。
.. image:: ../img/image125.png
**ステップ2**: コードのフォルダに移動します。
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/python-pi5
**ステップ3**: 実行可能ファイルを実行します。
.. raw:: html
.. code-block::
sudo python3 1.3.2_Servo.py
プログラムが実行されると、サーボは0度から90度、180度まで回転し、次に180度から90度、0度まで回転します。これが繰り返されます。
コード
.. note::
以下のコードは変更/リセット/コピー/実行/停止ができます。ただし、コードを変更する前に ``davinci-kit-for-raspberry-pi/python-pi5`` のようなソースコードのパスに移動する必要があります。コードを変更した後、直接実行して効果を確認できます。
.. raw:: html
.. code-block:: python
#!/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
**コードの説明**
1. これらのインポート文は、サーボ制御のための ``Servo`` クラスとタイミングのための ``sleep`` 関数を取り込みます。
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import Servo
from time import sleep
2. サーボモーターを接続するためのGPIOピン番号を18に設定します。
.. code-block:: python
# サーボモーターが接続されているGPIOピン番号を設定します
myGPIO = 18
3. これらの行は、補正係数を定義し、それを使用してサーボの最大および最小パルス幅を計算します。これにより、サーボの動きの範囲を微調整できます。
.. code-block:: python
# サーボのパルス幅を微調整するための補正係数を定義し、最大パルス幅と最小パルス幅を計算します
myCorrection = 0.45
maxPW = (2.0 + myCorrection) / 1000 # 最大パルス幅を計算
minPW = (1.0 - myCorrection) / 1000 # 最小パルス幅を計算
4. カスタムパルス幅でサーボオブジェクトを初期化します。
.. code-block:: python
# カスタムパルス幅でサーボオブジェクトを初期化します
servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)
5. ``try`` ブロックには、サーボを連続的に動かすための ``while True`` ループが含まれています。サーボは中間位置、最小位置、最大位置に配置され、各位置が表示され、指定された期間保持されます。
.. code-block:: python
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