【第33回】では、GPIO制御ライブラリ”pigpio”のハードウェアPWMを発生させる関数”hardware_PWM”を使って「サーボモーターをフルスイング」させましたが、今回は、別のGPIO制御ライブラリ”Gpiozero”で同じことをしてみたいと思います。ライブラリによる書式や終了時のふるまいの違いに注目してください。
今回使った部品
- 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
Gpiozeroのインストール状況を確認する
タスクバー左端のメニューアイコンから「設定」→「Add / Remove Software」をクリックし、起動します。画面左上の検索枠に”gpiozero”と入力して「Enter」キーを押すと、しばらくして右ペインに検索結果が表示されます。
検索結果を見ると、Python 2?とPython 3両方で”gpiozero”をインポートできる環境が、既にプリインストールされていました。
"Gpiozero"でサーボモーターをフルスイングさせる
Visual Studio Codeを起動し、【 第33回 】で作ったプログラム”pigpio_h_ware_servo.py”を開きます。
メニューバーから「ファイル」→「名前を付けて保存」をクリックします。
【 ワークスペースの設定 】で設定したワークスペース”/home/pi/Python”が開くので、「名前」の入力欄に新しいプログラム名を入力して「保存」ボタンをクリックします。
エディター画面右上のアイコン「エディターの分割」をクリックします。
分割されたエディター画面の左ペインにカーソルを移動してから、サイドバーのプログラム”pigpio_h_ware_servo.py”をクリックします。
アクティビティーバーのエクスプローラーアイコンをクリックして閉じます。
左ペインの”pigpio_h_ware_servo.py”と見比べながら、右ペインの”pigpiozero_servo.py”を上書きします。
右ペインの1行目を削除して、”f”と入力すると、入力候補が現れるので、「↓」キーを押して”from”を選択し、「Enter」キーを押します。
続けて”(半角スペース)gp”と入力すると入力候補が表示されるので、「↓」キーを押して”gpiozero”を選択して「Enter」キーを押します。
続けて”(半角スペース)i”と入力すると入力候補が表示されるので、「↓」キーを押して”import”を選択して「Enter」キーを押します。
続けて”(半角スペース)s”と入力すると入力候補が表示されるので、「↓」キーを押して”Servo”を選択して「Enter」キーを押します。
右ペインの2行目を削除して、”f”と入力すると、入力候補が現れるので、「↓」キーを押して”from”を選択し、「Enter」キーを押します。
続けて”(半角スペース)t”と入力すると入力候補が表示されるので、「↓」キーを押して”time”を選択して「Enter」キーを押します。
続けて”(半角スペース)i”と入力すると入力候補が表示されるので、「↓」キーを押して”import”を選択して「Enter」キーを押します。
続けて”(半角スペース)s”と入力すると入力候補が表示されるので、「↓」キーを押して”sleep”を選択して「Enter」キーを押します。
すると、”sleep”の後に”()”まで自動入力されてしまうので、「Backspace」キーで削除しておきます。
4行目の”pigpio.pi()”を削除して”s”と入力すると入力候補が表示されるので、「↓」キーを押して”Servo”を選択して「Enter」キーを押します。
自動で入力される”()”内にサーボモーターに接続したGPIO番号の”12″を入力します。
Gpiozeroでは、5行目は不要なので削除します。
8行目の”hardware_PWM(12, 50, 120000)”を削除して”m”と入力すると入力候補が表示されるので、「↓」キーを押して”min”を選択して「Enter」キーを押します。
自動で入力される”()”内には何も入力しません。
9行目の”time.”を削除します。
10行目の”hardware_PWM(12, 50, 72500)”を削除して”m”と入力すると入力候補が表示されるので、「↓」キーを押して”mid”を選択して「Enter」キーを押します。
自動で入力される”()”内には何も入力しません。
11行目の”time.”を削除します。
12行目の”hardware_PWM(12, 50, 25000)”を削除して”m”と入力すると入力候補が表示されるので、「↓」キーを押して”max”を選択して「Enter」キーを押します。
自動で入力される”()”内には何も入力しません。
13行目の”time.”を削除します。
14行目の”hardware_PWM(12, 50, 72500)”を削除して”m”と入力すると入力候補が表示されるので、「↓」キーを押して”mid”を選択して「Enter」キーを押します。
自動で入力される”()”内には何も入力しません。
15行目の”time.”を削除します。
18,19,20行目も不要なので、行頭に”#”を入力してコメントアウトします。
左ペインの”pigpio_h_ware_servo.py”と比べると、とてもシンプルな書式になっています。
from gpiozero import Servo from time import sleep pig = Servo(12) counter = 0 while (counter < 3): pig.min() sleep(3) pig.mid() sleep(3) pig.max() sleep(3) pig.mid() sleep(3) counter = counter + 1 #pig.hardware_PWM(12, 50, 0) #pig.ser_mode(12, pigpio.INPUT) #pig.stop()
左ペインのタブ2箇所の「×」をクリックして閉じます。
アクティビティーバーの「デバッグ」アイコンをクリックします。
サイドバーに現れたデバッグ右の「▶」ボタンをクリックします。
1行目でデバッグが中断するので、画面上部デバッグ用ツールバーの「↓」ボタンをクリックして続行します。
デバッグが終わったら、統合ターミナルのタブ「問題」をクリックします。
今回は何も問題がなかったので、右ペインのエディター画面の何もないところで右クリック→「Run Python File in Terminal」をクリックします。
スイングの中央(mid)から時計方向に45°、反時計方向に45°しか回転しませんでした。サーボモーターの電源はちゃんと別に供給しているのですが、Gpiozeroの仕様なのでしょうか?
とりあえず、メニューバーから「ファイル」→「保存」をクリックしておきます。
GPIO12の設定を既定に戻しておく
GPIOの設定状況を確認します。
今回は、Python上で特に終了処理をしていないのですが、GPIO12の設定がちゃんと”IN”に戻っていました。大変、お行儀のいいライブラリです。
gpio readall
コマンド”pigs mg”でも、設定状態が確認できます。
返ってきた値”0″は、pigpio libraryによると”Input”を示しているので、既定通りであることが確認できます。
pigs mg 12