【 第36回 】Gpiozeroならサーボモーターの回転を角度で指定できるゾ!

0
1149

【第35回】で「サーボモーターをフルスイング」させたGPIO制御ライブラリ”Gpiozero”にはサーボモーターの回転を任意の角度で指定する関数”AngularServo”もあります。今回はこの関数を使って180°のフルスイングをさせてみたいと思います。

今回使った部品

  • Raspberry Pi 3 Model B × 1
  • 40Pinフラットリボンケーブル
  • 40Pin T型GPIO拡張ボード
  • ブレットボード × 1
  • サーボモーター SG90 × 1
  • 電源アダプター5V 2.5A × 1
  • microUSB用変換基板 × 1
  • ジャンプワイヤー(オス/オス) × 5
デジタル・マイクロサーボ SG90
梅本合同会社
売り上げランキング: 11,230
サンハヤト USB用変換基板 CK-37
サンハヤト
売り上げランキング: 36,117

実体配線図

回路は【第25回】と同じで、サーボモーターSG-90の電源は、Raspberry Piの電源アダプターとは別の電源アダプターを用意し、microUSB用変換基板を介して供給します。

・モーター端子(茶色) → GND

・microUSB用変換基板(GND) → GND

・モーター端子(赤色) → microUSB用変換基板(VCC)

・モーター端子(橙色) → GPIO12

"AngularServo"でサーボモーターをフルスイングさせる

Visual Studio Codeを起動し、【 第35回 】で作ったプログラム”gpiozero_servo_full.py”を開きます。

メニューバーから「ファイル」→「名前を付けて保存」をクリックします。

【 ワークスペースの設定 】で設定したワークスペース”/home/pi/Python”が開くので、「名前」の入力欄に新しいプログラム名を入力して「保存」ボタンをクリックします。

エディター画面右上のアイコン「エディターの分割」をクリックします。

分割されたエディター画面の左ペインにカーソルを移動してから、サイドバーのプログラム”pigpiozero_servo_full.py”をクリックします。

アクティビティーバーのエクスプローラーアイコンをクリックして閉じます。

左ペインの”pigpiozero_servo_full.py”と見比べながら、右ペインの”gpiozero_servo_angle.py”を上書きします。

右ペインの1行目の”Servo”を削除して、”a”と入力すると、入力候補が現れるので、「↓」キーを押して”AngularServo”を選択し、「Enter」キーを押します。

右ペインの4行目の”Servo()”を削除して、”a”と入力すると、入力候補が現れるので、「↓」キーを押して”AngularServo”を選択し、「Enter」キーを押します。

自動で入力される”()”内に”12,(半角スペース)mと入力すると、入力候補が現れるので、「↓」キーを押して”min_angle=-90″を選択し、「Enter」キーを押します。

続けて”,(半角スペース)mと入力すると、入力候補が現れるので、「↓」キーを押して”max_angle=90″を選択し、「Enter」キーを押します。

右ペインの8行目の”min()”を削除して、”a”と入力すると、入力候補が現れるので、「↓」キーを押して”angle”を選択し、「Enter」キーを押します。

何故かangleの後に”()”が自動入力されてしまいますが、削除して、”(半角スペース)=(半角スペース)90″と入力します。

右ペインの10行目の”mid()”を削除して、”a”と入力すると、入力候補が現れるので、「↓」キーを押して”angle”を選択し、「Enter」キーを押します。

自動で入力される”()”を削除して、”(半角スペース)=(半角スペース)0.0″と入力します。

右ペインの12行目の”max()”を削除して、”a”と入力すると、入力候補が現れるので、「↓」キーを押して”angle”を選択し、「Enter」キーを押します。

自動で入力される”()”を削除して、”(半角スペース)=(半角スペース)-90″と入力します。

同じように、右ペインの14行目の”mid()”を削除して”angle”を選択し、”(半角スペース)=(半角スペース)0.0″と入力します。

左ペインのタブ2箇所の「×」をクリックして閉じます。

アクティビティーバーの「デバッグ」アイコンをクリックします。

サイドバーに現れたデバッグ右の「▶」ボタンをクリックします。

1行目でデバッグが中断するので、画面上部デバッグ用ツールバーの「↓」ボタンをクリックして続行します。

デバッグが終わったら、統合ターミナルのタブ「問題」をクリックします。

いつもの”イチャモン”以外、問題がなかったので、右ペインのエディター画面の何もないところで右クリック→「Run Python File in Terminal」をクリックします。

角度で”90°”から”-90°”と指定したのに、時計方向に45°、反時計方向に45°しか回転しませんでした。

エディター画面に戻って、4行目の”()”内の”12,(半角スペース)”以降を削除して”m”と入力すると入力候補が表示されるので、「↓」キーを押して”min_pulse_width”を選択して「Enter」キーを押します。

“min_pulse_width”を選択すると、続けて既定値の”=1/1000(1msec.)”が自動的に入力されてしまいますが、サーボモーターSG90の時計方向の最小パルス幅:”=0.5/1000″で上書きします。

続けて”,(半角スペース)m”と入力すると入力候補が表示されるので、「↓」キーを押して”max_pulse_width”を選択して「Enter」キーを押します。

“max_pulse_width”を選択すると、続けて既定値の”=2/1000(2msec.)”が自動的に入力されてしまいますが、サーボモーターSG90の反時計方向の最大パルス幅:”=2.4/1000″で上書きします。

ターミナル画面で「↑」キーを押すと、直前のコマンドが入力されるので、もう一度、実行します。

今度はちゃんと90°から-90°まで180°のフルスイングをさせることができましたが、90°が反時計方向で、-90°は時計方向の回転になっていることとsleep時のジャダーが残念でした。

from gpiozero import AngularServo
from time import sleep

pig = AngularServo(12, mini_pulse_width=0.5/1000, max_pulse_width=2.4/1000)

counter = 0
while (counter < 3):
    pig.angle = 90
    sleep(3)
    pig.angle = 0.0
    sleep(3)
    pig.angle = -90
    sleep(3)
    pig.angle = 0.0
    sleep(3)
    counter = counter + 1

メニューバーから「ファイル」→「保存」をクリックして上書き保存します。

コマンド”pigs mg”で設定状態を確認します。

返ってきた値”0″は、pigpio libraryによると”Input”を示しているので、既定通りの設定に戻っていることが確認できました。

pigs mg 12