今回はRaspberryPiに「pigpio」をインポートしてサーボモータ(MG996R)を動かしてみましたので、そのときの情報を記載しておきます。
「wiringpi」のソフトウェアPWMを使用するとサーボがかなりガタガタしてしまいましたので、今回は「pigpio」のハードウェアPWMを使用して揺れを無くすようにしてみました。
なお、「wiringpi」のハードウェアPWMを使いたい場合はこちらの記事を見てみてください↓
wiringpiのハードウェアPWMでサーボモータ(MG996R)を動かす
使用しているサーボはMG996Rです。今回も下記の範囲で設定していきます。
***************************************
・周期:20[ms]、周波数:50[Hz]
・パルス幅:0.5~2.4[ms]
・Duty:2.5~12[%](パルス幅/周期×100)
***************************************
参考サイト
今回は以下の記事を参考にさせていただきました。
Raspberry PiのハードウェアPWMをpigpioで出力する
Raspberry PiのGPIO制御の決定版 pigpio を試す
pigpioのインストール
まずはpigpioをインストールしておきます。(動くようになりました!)
1 2 |
sudo apt-get update sudo apt-get install pigpio |
デーモンの立ち上げ
pigpioを使う前にはデーモンを立ち上げておく必要があるみたいです。よって、以下も実行しておきます。
1 |
sudo pigpiod |
Pythonファイルの作成
以下のようなPythonファイルを作成してサーボを動かすことができました。気をつける点として、ファイル名は「pigpio.py」以外で保存してください。インポートで使っているライブラリ名をファイル名にするとエラーになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import pigpio import time gpio_pin0 = 18 pi = pigpio.pi() pi.set_mode(gpio_pin0, pigpio.OUTPUT) # GPIO18: 50Hz、duty比2.5% pi.hardware_PWM(gpio_pin0,50,25000) time.sleep(2) # GPIO18: 50Hz、duty比7.25% pi.hardware_PWM(gpio_pin0,50,72500) time.sleep(2) # GPIO18: 50Hz、duty比12% pi.hardware_PWM(gpio_pin0,50,120000) time.sleep(2) pi.set_mode(gpio_pin0,pigpio.INPUT) pi.stop() |
上記のハードウェアPWMを使用すると振動は少なくなりました。いろいろと調べてみた結論として、「wiringpi」を使うにしろ「pigpio」を使うにしろ、ハードウェアPWMを使ったほうが正確なPWM制御ができることが分かりました。