スキップしてメイン コンテンツに移動

投稿

ラベル(#servoblaster、 #サーボモーター)が付いた投稿を表示しています

ServoBlaster が使えない。

 めちゃくちゃ久しぶりの書き込みです。 たまたま、家の玄関の電灯を制御しているサーボの動作に異変が起きたので、サーボモーターを交換しました。 とは言え全く動かなくなった訳ではないので、別のRaspberry piに接続して動きを見ようと思いました。が、新たにダウンロードした Raspbian にServoBlaster が上手くインストール出来ません。 で、色々調べた結果かなり前に開発が停止して全くメンテナンスされておらず、最新のOSでは動作不能という結論に達しました。我が家のサーバーは特に必要もないので古いOSのままで運用しているので問題はないのですが、一応最新版ではどうすれば良いのかだけ調べておきました。 結論方言えば、Python でプログラムを書けば良いだけの話でした。私の場合 iPhone を使用しているので HomeBridge とシェルで利用していたのでサーボのコントロール部分だけ Python にしてそこを呼べば良い様です。まっ、今の所新しいOSに載せ替える気もないのでそのまましばし放置する予定ですが、備忘録として Python からの制御の仕方を書いておきます。 先ずはこんな形で必要なライブラリの読み込みなどを行なっておきます。 import RPi.GPIO as GPIO from time import sleep servo1 = 17    ← 単純にサーボを接続するGPIOのピン番号を定義しておきます。 servo2 = 18    ← 同上 frequency = 50  ← サーボへのPWD信号の周波数を設定 angle_0   = 2.5 /20 * 100 #duty: 12.5%  ← 角度をPWMのDuty比で定義する。 angle_90  = 1.5 /20 * 100 #duty:  7.5%   ライブラリにして角度を算出した方が実用的でしょうけれど、 angle_180 = 0.5 /20 * 100 #duty:  2.5%   私の場合今回はあくまでテストなので。 GPIO.setmode(GPIO.BCM)       GPIO.setup(servo1, GPIO.OUT)   ← 出力ピンの数(サーボの数)だけ定義する。 GPIO.setup(servo2, ...

Raspberry pi の設定など(その4:サーボモーターの設定)

  前回は赤外線リモコンの設定 を行いました。 ということで今回はサーボモーターの設定。 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/servoblast...