pigpioでサーボモーターを動かす。

たまたま,こんなサイトを見つけました。

Raspberry Pi でLチカする方法がたくさんありすぎる件について

確かに,ラズパイのGPIOを制御する方法はたくさんありますね。で,記事をながめていてpigpioの存在を知りました。

pigpioのオフィシャルページによると、µsオーダーで、レベル変化の検出ができたり、PWM制御できたり、サーボモータを制御できたり、とにかく、GPIOを高時間分解能で制御できそうです。その上,ネット越しにGPIO制御出来たりして,色々と捗りそうなライブラリです。

サーボモータ用のライブラリもあることですし,丁度試そうと思っていた手持ちのSG90で実験してみました。

1. pigpioのセットアップ

最近のRaspbianにはpigpioが組込済みです。それを有効にするためには、raspi-cofigを使います。

raspi-configの起動は次のとおり。

 

「9 Advanced Options」を選択し…

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-07-23-12-04

 

「AB GPIO Server」を選択し…

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-07-23-12-18

 

「はい」を選択します。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-07-23-12-27

以上でGPIO制御するデーモンpigpiodが起動します。以降、CUIコマンドpigs、あるいはC言語やpythonスクリプトから、GPIOをコントロールすることが可能になります。

例えば、GPIO4にHighを出力するpigsコマンドは…

GPIO4にLowを出力するpigsコマンドは…

 

pythonスクリプトならばこんな感じです。

その他、pigpioにはコマンドがてんこ盛りですので、公式をご参照ください。

 

2. サーボモーターとは

一般的なサーボモーターは±90°の可動範囲を持ち、入力信号のパルス幅で角度を制御します。
パルス幅が角度に直結するわけですから、パルス幅の設定分解能と安定性がキモです。

 

3. サーボモーターとラズパイの結線

SG90という一般的なサーボモーターは、5Vの電源で動作します。また、角度を制御するパルス入力は、電源電圧よりも低い3.3Vでも動作するようです。よって、ラズパイのピンヘッダから、5V、グランド、適当なGPIOピン、合計3本をサーボに接続すれば、制御可能です。

サーボモーターから伸びる信号線は、茶色がグランド、赤が+5V、オレンジが角度制御のパルス入力です。私はパルス入力をGPIO7(BCM)に接続しました。

 

4. サーボモーターをpythonで制御してみる

簡単な実験ですので、pythonを対話モードで起動し、サーボをコントロールしてみます。

まずは、pythonの起動。

 

pigpioの初期化。

 

次に、サーボの角度を中央(0°)に設定するために、GPIO7にパルス幅1500を設定します。

サーボが「シャー」と音を立てて動作し、0°の位置に止まりますので、ここでサーボの軸に十字のホーンをセットしました,ホーンと軸のかみ合わせの都合で,ちょっと曲がっていますけど。位置が分かりやすいように付箋を付けておきます。

パルス幅 1500±1000が±90°に相当するのですが、パルス幅の設定精度やサーボのばらつきで誤差があります。変なパルス幅を設定してしまうと、サーボの可動範囲を逸脱し、「ジジジ…」と変なうなり音がしたり、最悪故障する可能性があります。よって、パルス幅の設定を、1500±500ぐらいから徐々に広げていき,±90°に相当するパルス幅を探ります。

私の実験では、540〜2450ぐらいでサーボが±90°の範囲で振れました。

 

パルス幅540の時の位置

img_5610

 

 

パルス幅2450のときの位置

img_5608

 

続けて,540と2450のちょうど中間の1495をパルス幅に設定してみました。ホーンが0°びったりの位置…とはいかず、やっぱりずれてます。これ以上の直線性は望めないのでしょう。

パルス幅1495の時の位置

 

img_5609

5. おしまい

さて,pigpioのおかけでサーボの制御があっという間に達成できたことだし,いよいよ2軸のカメラマウンタを組み上げ,Piカメラのパン及びチルトに取りかかろうと思います。

 

この前,わざわざサーボモーター制御モジュール買ったのに不要かも。