【第31回】では、GPIO制御ライブラリ”pigpio ( ぴぐぴお ? )”をインポートして「サーボモーターをフルスイング」させましたが、”pigpio”には通常のソフトウェアPWMの他にサーボモーター用のPWMを発生させる関数があることが分かりました。今回は、この”servo_pulsewidth”を使って「サーボモーターをフルスイング」させてみようと思います。
今回使った部品
- 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
"pigpio"の"servo_pulsewidth"でサーボモーターをフルスイングさせる
Visual Studio Codeを起動し、【 第31回 】で作ったプログラム”pigpio_servo.py”を開きます。
【 ワークスペースの設定 】で設定したワークスペース”/home/pi/Python”が開くので、「名前」の入力欄に新しいプログラム名を入力して「保存」ボタンをクリックします。
“servo_pulsewidth”ではPWMのパルス幅を指定するので、【 第25回 】で紹介したサーボモーター SG90のデータシート通り、反時計方向のフルスイング時は”500(μsec.)”とします。
時計方向のフルスイング時も【 第25回 】で紹介したサーボモーター SG90のデータシート通り、”2400(μsec.)”とします。
PWM出力を止める為、パルス幅を”0″にします。
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_servo_pulsewidth(12, 500) time.sleep(3) pig.set_servo_pulsewidth(12, 2400) time.sleep(12) counter = counter + 1 pig.set_servo_pulsewidth(12, 0) pig = pigpio.pi()
サーボテスターに接続すると、ゆっくり回転させれば、どうにかフルスイングできるようです。
左ペインのタブ2箇所の「×」をクリックして閉じます。
フルスイングの両端をいきなり往復させるのが無理に見えたので、一旦、中間で停止させる為、10行目の”pulsewidth”を【 第25回 】で紹介したサーボモーター SG90のデータシートにあるPosition”0″のパルス幅:1450(μsec.)で上書きします。
11行目と15行目の待機時間を”3″で上書きします。
import pigpio import time pig = pigpio.pi() counter = 0 while (counter < 3): pig.set_servo_pulsewidth(12, 2400) time.sleep(3) pig.set_servo_pulsewidth(12, 1450) time.sleep(3) pig.set_servo_pulsewidth(12, 500) time.sleep(3) pig.set_servo_pulsewidth(12, 1450) time.sleep(3) counter = counter + 1 pig.set_servo_pulsewidth(12, 0) pig = pigpio.pi()
GPIO12の設定を既定に戻しておく
GPIOの設定状況を確認します。
gpio readall
GPIO12の設定を既定の”IN”に戻しておきます。
gpio -g mode 12 in
ホームディレクトリに戻ります。
cd
コマンド”systemctl”で”pigpiod”の起動状態を確認しておきます。
sudo systemctl status pigpiod
項目「Active」が”active(running)”で起動中だということが確認できました。
【 第31回 】で”pigpiod”を自動起動する設定にしたので、コマンド”systemctl killall”で強制終了しない限り、OS起動中はpigpiod”が常駐しています。
“q”キーで起動状態の表示モードを終了します。
q