Raspberry PI でサーボを動かす

※2015/5/5 追記
Raspberry Pi2 では ServoBlaster は正常に機能しません。公式フォーラム「Pi2 B and Pi-Pan (ServoBlaster)」に添付されているServoBlaster-20150219.tgzを使うことで機能することを確認しています。

Chinachu 録画システムをマザーボード H61M-VG3 を使って構築したのですが、残念なことに Wake-On-LAN が使えない。だけど、サスペンド後に USB キーボード を触ると復帰することが確認出来たので「Raspberry PIでキーボードを触ればいいじゃん」と言うことで、Raspberry PI でサーボを動かすことにした。

servo & keyboard

Raspberry PI でサーボを動かすには幾つか方法があるみたいですが、私的には ServoBlaster が簡単でお勧めです。

$ git clone git://github.com/richardghirst/PiBits.git
$ cd PiBits/ServoBlaster/user
$ make servod
$ sudo make install

make install することでサービス起動時にオプションとして –idle-timeout=2000 が指定されて、2秒間何も動作が無かった場合にパルスの発生が停止されます。これでサーボの寿命が延びるのでしょうか。

$ # 動作確認 echo サーボ番号=周波数 > /dev/servoblaster
$ echo 0=140 > /dev/servoblaster # 水平にする
$ echo 0=60  > /dev/servoblaster # 下げる
$ echo 0=240 > /dev/servoblaster # 上げる

サーボ番号とPin番号、GPIOの対応は次の表の通り。

Servo number GPIO number Pin in P1 header
0 4 P1-7
1 17 P1-11
2 18 P1-12
3 21/27 P1-13
4 22 P1-15
5 23 P1-16
6 24 P1-18
7 25 P1-22

以上、これで Raspberry PI からサーボを使うことが出来ました。

6 thoughts on “Raspberry PI でサーボを動かす

  • 2014年1月15日 at 10:03 PM
    Permalink

    こんばんは。
    録画サーバー用にH61M-VG3を検討している者です。
    ASRockのホームページからマニュアルをダウンロードしてみましたが、BIOSに”Boot From Onboard LAN”という項目があると書いてあり、これがWake-On-LAN設定の項目と理解しておりました。
    しかし、「残念なことに Wake-On-LAN が使えない」とのことで、実際のBIOSにはこの項目が存在しないのでしょうか?

    Reply
    • 2014年1月15日 at 11:26 PM
      Permalink

      andoさん、こんばんは。BIOS上にその項目があり、私の時はENABLEにしてもWOLが効きませんでした。
      ちなみにその時のOSは、LinuxのCentOsやUbuntuでした。あまりにも困ったのでサーボで代用した次第です。
      こちらのブログの記事ではメーカ提供のドライバーで可能になった旨の掲載がありますので参考になるかと思います。
      H61M-VG3で使われている Realtek RTL8111E は他でもWOLに問題があるケースが報告されていますね。
      andoさんの方でも何かわかったらお知らせくださると助かります。

      Reply
      • 2014年1月16日 at 6:15 AM
        Permalink

        airwhiteさん。おはようございます。
        返信ありがとうございました。
        Realtek RTL8111Eが問題のあるチップだということがよく分かりました。
        H61M-VG3の購入は見送ろうと思っていますが、あまりに安いため、もしかしたらダメもとで買ってしまうかもしれません。その場合にはいろいろ試してみてご報告致します。
        ありがとうございました。

        Reply
  • Pingback: Konomi Morikawa log » Raspberry Pi で電子工作に挑戦する その2 サーボモータの制御

  • 2015年9月28日 at 6:37 PM
    Permalink

    servoBlasterをC言語のプログラムに組み込んで使用する方法はないですか?

    Reply
    • 2015年9月29日 at 8:39 AM
      Permalink

      fumahさん、お早うございます。
      C言語は詳しくないのですが、system関数で外部コマンドとしてservoBlastを呼び出すか
      servoBlastのソースコードが公開されていますので、ご自分のプログラムに取り込むか
      いずれかの方法になるかと思われますが、がんばってください。

      Reply

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です