【第32回】では、GPIO制御ライブラリ”pigpio”のサーボモーター制御用関数”servo_pulsewidth”を使ってフルスイングさせましたが、”pigpio”には、これとは別にハードウェアPWMを発生させる関数もあり、今回は、この関数”hardware_PWM”を使って「サーボモーターをフルスイング」させてみようと思います。
今回使った部品
- 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"の"hardware_PWM"でサーボモーターをフルスイングさせる
Visual Studio Codeを起動し、【 第32回 】で作ったプログラム”pigpio_servo_servo.py”を開きます。
【 ワークスペースの設定 】で設定したワークスペース”/home/pi/Python”が開くので、「名前」の入力欄に新しいプログラム名を入力して「保存」ボタンをクリックします。
自動で入力される”()”内に”12, 50, 120000″と入力します。
サーボモーターに接続したGPIOの番号:12に続けて入力した”50″は、【 第25回 】で紹介したサーボモーター SG90のデータシートから制御信号の周波数;50Hz、最後の”120000″は、時計方向のフルスイング時のdutycycleを指定したものです。
関数”hardware_PWM”の場合、Range(分解能)が”1,000,000″に固定されているので、周波数:50Hzのパルス周期:1sec./50=0.02sec.=20msec.と時計方向のフルスイング時のパルス幅:2.4msec.の比(dutycycle):0.12を乗じると”120000″になります。
import pigpio import time pig = pigpio.pi() pig.set_mode(12, pigpio.ALT0) counter = 0 while (counter < 3): pig.hardware_PWM(12, 50, 120000) time.sleep(3) pig.hardware_PWM(12, 50, 72500) time.sleep(3) pig.hardware_PWM(12, 50, 25000) time.sleep(3) pig.hardware_PWM(12, 50, 72500) time.sleep(3) counter = counter + 1 pig.hardware_PWM(12, 50, 0) pig.ser_mode(12, pigpio.INPUT) pig.stop()
GPIO12の設定を既定に戻しておく
GPIOの設定状況を確認します。
今回は、Python上で既定に戻しておいたので、GPIO12の設定が”IN”になっていました。
gpio readall
コマンド”pigs mg”でも、設定状態が確認できます。
返ってきた値”0″は、pigpio libraryによると”Input”を示しているので、既定通りであることが確認できます。