【第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
実体配線図
回路は【第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