今回使った部品
- 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
"pigpiod"を常駐させる
PythonでGPIO制御ライブラリ”pigpio”を実行できるようにするデーモン“pigpiod”自体は、Raspbianにプリインストールされているのですが、常駐している訳ではないので、インポートする前にあらかじめ起動しておかなくてはなりません。
そこで、Raspbianと同時に起動しておくように設定します。
LXTerminalを起動し、コマンド”systemctl“で”pigpiod”の自動起動を有効にします。
再起動したら、コマンド”systemctl“で”pigpiod”の起動状態を確認します。
項目「Active」が”active(running)”で起動中だということが確認できました。
“pigpio”をインポートしてみます。
【 第30回 】では、デーモン”pigpiod”を起動していなかったのでインポートできませんでしたが、今回はプロンプトが返ってきたのでインポートできたようです。
"pigpio"でサーボモーターをフルスイングさせる
Visual Studio Codeを起動し、【 第29回 】で作ったプログラム”servo.py”を開きます。
【 ワークスペースの設定 】で設定したワークスペース”/home/pi/Python”が開くので、「名前」の入力欄に新しいプログラム名を入力して「保存」ボタンをクリックします。
“pigpio”ではPWMの周波数を指定するので、【 第25回 】で紹介したサーボモーター SG90のデータシート通り50Hzとします。
“range”も【 第25回 】と同じで既定の10bit”1024″とします。
反時計方向のフルスイング時の”dutycycle”も【 第25回 】のデータシートから、1024 × 0.5 / 20 ≒ 25とします。
右ペインの14行目を削除し、時計方向のフルスイング時の”dutycycle”を【 第25回 】のデータシートから、1024 × 2.4 / 20 ≒ 123とします。
右ペインの19行目を削除し、GPIOを初期化して終わります。
import pigpio import time pig = pigpio.pi() pig.set_PWM_frequency(12, 50) pig.set_PWM_range(12, 1024) counter = 0 while (counter < 10): pig.set_PWM_dutycycle(12, 25) time.sleep(1) pig.set_PWM_dutycycle(12, 123) time.sleep(1) counter = counter + 1 pig.set_PWM_dutycycle(12, 0) pig = pigpio.pi()
さてはサーボモーターも酷使に耐えかねて、いよいよお釈迦か?とも思いましたが、【 番外編 】のサーボテスターに接続したところ、ちゃんとフルスイングするではありませんか。
但し、よく観察してみると回転速度が、それも反時計回りのときが特に遅くなっていることに気付きました。そこで待機時間を時計回り:3秒、反時計回り:12秒で、繰り返し回数も10回 → 3回に変更しました。
import pigpio import time pig = pigpio.pi() pig.set_PWM_frequency(12, 50) pig.set_PWM_range(12, 1024) counter = 0 while (counter < 3): pig.set_PWM_dutycycle(12, 25) time.sleep(3) pig.set_PWM_dutycycle(12, 123) time.sleep(12) counter = counter + 1 pig.set_PWM_dutycycle(12, 0) pig = pigpio.pi()
GPIO12の設定を既定に戻しておく
GPIOの設定状況を確認します。
gpio readall
GPIO12の設定を既定の”IN”に戻しておきます。
gpio -g mode 12 in
「↑」キーを押して、もう一度、設定を確認します。
gpio readall
ホームディレクトリに戻ります。
cd
このコマンドで”pigpiod”を停止します。
sudo killall pigpiod
コマンド”systemctl”で”pigpiod”の起動状態を確認しておきます。
sudo systemctl status pigpiod