前回のServoクラスは、単に角度を変更するだけでした。ここで利用するAngularServoクラスは、最初にmin_angle値とmax_angle値を設定しておけば、その範囲の数値を指定して任意の角度の回転ができます。
●クラスAngularServo
class gpiozero.AngularServo(pin, *, initial_angle=0, min_angle=-90, max_angle=90, min_pulse_width=1/1000, max_pulse_width=2/1000, frame_width=20/1000, pin_factory=None)
Servoクラスに特定の角度に設定できるように拡張したクラス(有効な最小角度と最大角度がコンストラクタに提供されていると仮定)。
GPIOピンに接続されたPWM制御のサーボ・モータを使う。3本のケーブルは次の接続をする。
- 電源(バッテリ・パックや5Vピンなど)をサーボの電源ケーブル(通常は赤色)に
- サーボのアース・ケーブル(通常は黒または茶色)をバッテリ・パックのマイナスまたはGNDピンに
- 最後のケーブル(通常は白またはオレンジ色)を、サーボの制御に使用するGPIOピンに
パラメータ; pin (int or str) – サーボが接続されているGPIOピン。 有効なピン番号、ピン番号を参照。 これがNoneの場合、GPIODeviceErrorが発生する。 initial_angle(float) – サーボの初期角度を指定された値に設定する。デフォルトは0。指定する値はmin_angleとmax_angleの間でなければならない。Noneは制御されていないサーボを開始することを意味する( valueを参照)。
min_angle(float)–サーボが回転できる最小角度を設定する。デフォルトで-90に設定されているが、キャリブレーション中にサーボから測定した値に設定しなおす。 max_angle(float)–サーボが回転できる最大角度を設定する。デフォルトで90に設定されているが、キャリブレーション中にサーボから測定した値に設定しなおす。 min_pulse_width (float) – サーボの最小位置に対応するパルス幅。 デフォルトは1ms。 max_pulse_width (float) – サーボの最大位置に対応するパルス幅。 デフォルトは2ms. frame_width (float) – 秒単位で測定されたサーボ制御パルス間の時間の長さ。 デフォルトは20msであり、これはサーボの一般的な値。 pin_factory (Factory or None) – APIの解説を読む。
注意
角度の意味を逆にしたい場合は、min_angleをmax_angleより大きく設定できる(例)。これは、最小値と最大値の予想とは反対の方向に回転するサーボで役立つ。 min_angle=45, max_angle=-45
angle
度で測定された角度としてのサーボの位置。これは、コンストラクタで適切に設定されている場合にのみ正確なmin_angle、max_angleになる。
Noneはサーボが現在「制御されていない」こと、つまり制御信号が送信されていないことを示す特別な値にすることもできる。通常、これはサーボの位置は変更されないままだが、手動で移動できることを意味する。
|
is_active
複合デバイスは、その構成デバイスのいずれかに「真の」値がある場合、「アクティブ」と見なされる。
|
max_angle
max()が呼ばれるときにサーボが回転する最大角度。
|
min_angle
min()と呼ばれるときにサーボが回転する最小角度。
|
value
サーボの位置を-1(最小位置)から1(最大位置)までの値で表す。これは、サーボが現在「制御されていない」こと、つまり制御信号が送信されていないことを示す特別な値Noneにもできる。通常、これはサーボの位置は変更されないままだが、手動で移動できることを意味する。
|
|
●接続
前回と同じです。
●プログラム
さいしょに、gpiozero.AngularServo(pin, min_angle=-xx, max_angle=yy)のxxとyyを測定します。まず、ホーンを初期値0にセットします。本体と並行になる位置でよいと思います。
>>> from gpiozero import Servo
>>> s = Servo(17)
>>> s.min()
このとき、ホーンが左に回転します。角度を測ります。今回-50度でした。
>>> s.max()
このとき、ホーンが右に回転します。角度を測ります。今回50度でした。

プログラムです。角度20度に回転させました。
from gpiozero import Servo
s = AngularServo(17, min_angle=-50, max_angle=50)
s.angle = 20