前回は赤外線リモコンの設定を行いました。
ということで今回はサーボモーターの設定。
2024年1月追記:
20241年時点の最新 Rasbian において ServoBlaster に対応しなくなっていました。
ですので、以下の記事は古い Rasbian OS 利用者だけの限定情報となってしまいました。
どの時点で使用出来なくなってしまったかは定かではありませんが、比較的新しいOSの方へは別記事で対応方法を書きますので、こちらをご参照ください。
https://draft.blogger.com/blog/post/edit/8404129190610195115/7633747993521666234
ここからは古いOSの利用者限定情報です。
こちらも昔書いたものと大きく違うところはありません。
英語ですが$ git clone git://github.com/richardghirst/PiBits.gitが役立ちます。
$ git clone git://github.com/richardghirst/PiBits.git
$ cd PiBits/ServoBlaster/user
$ make servod
この3つのコマンドで終了。
で、今回は起動時のパラメータを説明します。
実はここもかなりトラブりました。その3で説明した「Node.js」絡みのトラブルだった様です。
これもオシロスコープでGPIO端子から出ているパルス波形を見ていて気が付きました。
パルスが間延びしていて変。で起動パラメータをいじって何とか動かしたりはしたものの、Node.js を直したらこちらのトラブルもすっかり治りました。おかげでパラメータの知識も増えました。
追記:
その後も同様のトラブルが発生。Raspberry pi 3Bに最新 OSを再インストールした状態で再びサーボが動かなくなりました。
オシロを見ながら色々調整して「sudo /home/pi/PiBits/ServoBlaster/user/servod --p1pins=11,12 --min=200us --max=10000us --cycle-time=10000 --idle-timeout=2000」なんて設定で、$ echo 0=1180us > /dev/servoblaster で左いっぱい、$ echo 0=280us > /dev/servoblaster で右いっぱいで動きます。
何だこりゃ?
再度 PiBits を削除して再インストールしてみたら「sudo /home/pi/shell/PiBits/ServoBlaster/user/servod --p1pins=11,12 --min=200us --max=2400us --idle-timeout=2000」って設定で、190usと1260usで左右目一杯になりました。
どこがどう影響しているのか皆目検討が・・・ ってその3にも書きましたが、ほぼ Node.js が悪そうなんですけどね。
:記追 # どこかのプログラム風に追記してみました(笑)
今現在私のサーバーでの起動パラメータは以下の通り。
$ sudo /home/pi/PiBits/ServoBlaster/user/servod --p1pins=11,12 --min=500us --max=2400us --idle-timeout=2000
最初の --p1pins=11,12 を指定する事で、サーボの出力を11と12のピンに制限しています。
デフォルトのままだと 7,11,12,13,15,16,18,22の各ピンに出力されます。
このピンの番号はGPIO端子だと、GPIO-4、17、18、27、22、23、24、25に相当します。
でこれがサーボ番号の0から7番に記載順に割り振られます。
私の場合ピン11(GPIO-17)がサーボ番号0となり、12(GPIO-18)がサーボ番号1になります
で、次の --min=500us が出力パルスの最小値。0% で指定した時のパルス幅になります。
出力をμ秒で指定した時にこの数値以下の出力は無視される様です。
私は「Tower Pro SG90」という一般的なサーボを利用していますが、このデータシートを見ると最小値が500μsecなのでそのまま指定しています。ちなみにμの文字はASCIIにないので小文字のuを使用しているみたいですね。
デフォルトも500μsecなので指定しなくても大丈夫なのですが、念のため。
同様にして --max=2400us が最大値側の設定。デフォルトは2500μsecなので100%近くでは飽和してしまうので100%で2400μsecとなる様に指定しています。
これで%で指定した時にSG90のアームが左右ともフルに振れてくれます。
最後が --idle-timeout=2000 です。これは出力を指定した時に2000msec、つまり2秒間パルスを出し続けるという事になり、モーターには2秒の間力が加わり続けます。
とりあえずここだけ押さえていれば大丈夫でしょう。
私の設定の場合GPIO-17番に繋いだサーボは
$ echo 0=0% > /dev/serviblaster または $ echo 0=500us > /dev/serviblaster でサーボモータは上から見て右回りに回り切った位置になります。
左に回し切るには、$ echo 0=100% > /dev/serviblaster または $ echo 0=2400us > /dev/serviblasterとなります。
中間位置であれば $ echo 0=50% > /dev/serviblaster または $ echo 0=1350us > /dev/serviblaster ですね。
コメント
コメントを投稿