電動雲台をWebブラウザからウニョウニョ操作するには

サーボモーターを2つ使った、2軸の電動雲台を。

タブレットPCのWebブラウザから、上下左右(パン、チルト)ウニョウニョ操作してみました。四角いエリアでマウス操作すると、雲台を自由に動かすことができます。

サーボモーターの制御は、Raspberry Pi Zero WにPWM制御基板を取り付けて行いました。

このようなシステムの構築方法を記録しておきたいと思います。


Raspberry Piの2軸電動雲台制御システム構築手順

使用する機材

電動雲台

サーボモーターSG90を2つ取り付け可能な雲台です。お値段がお手頃ですが、注文してから到着まで2週間くらいかかりました。

サーボモーター

SG90を2つ購入し、取り付けてみました。同じサイズのサーボモーターは何種類かあり、よりトルクが高いモデルもあるようです。

Raspberry Pi本体

どのRaspberry Piでも大丈夫かと思います。OSはRaspbianを使用させて頂きました。

ピンヘッダが無い、通常のRaspberry Pi Zero Wを購入し、基板の裏面にピンソケットを取り付けてみました。ハンマーヘッダーは、叩いて取り付けられるため、はんだ付けは不要です。

Pi Zeroのオフィシャルケースにはカメラ取付用の変換ケーブルが付属しています。ピンヘッダを裏面に取り付けることで、GPIOと同時にオフィシャルケースのカメラ用のフタを使用することができます。

Raspberry Piを電動雲台に搭載することで、雲台の制御に加えて、カメラとしての役割、写真と動画の撮影に使用することができます。

PWM制御基板

I2CでRaspberry Piと接続可能なPCA9685コントローラーを使用しました。16チャンネルありますが、電動雲台用にチャンネルを2つ使用します。残りの14チャンネルは同じようにサーボモーターを取り付け可能のほか、LEDまたは赤外線LEDを取り付けることで、照明(または暗視カメラ用照明)として使用できそうです。

LED制御の記事はこちらになります。

ジャンパーワイヤー

モーター駆動用の電力系の配線と、I2Cの信号系の配線ともにジャンパーワイヤーを使用しました。メスーメスとオスーメスケーブルを端子に合わせて使用する感じです。

分岐用USB電源端子

モーターを駆動する場合、大きな電流が必要になります。Raspberry Pi経由で大きな電流が流れないように、USB電源を分岐しました。秋月電子通商さんのこちらの製品を使用させて頂きました。

そこそこの容量(5V 3A程度)のUSB電源をご用意頂ければ、少数のモーターを接続しても、電力不足の問題は発生しないかと思います。


配線図

次のような3系統の配線になります。

  1. USB電源ケーブルを2つに分岐して、Raspberry PiとPWM制御基板の電源端子に接続。
  2. I2C端子でRaspberry PiとPWM制御基板を接続。
  3. サーボモーターを接続。

写真のPi Zeroは、基板の裏面にGPIOピンヘッダを取り付けたため、2列の端子の左右が逆になっています。通常の表面のGPIOヘッダの配線は以下になります。

電源配線

microB端子のUSB電源を2つに分けて、Raspberry PiのGPIOと、PWM制御基板の電源端子に接続しました。


I2C配線

4本のケーブルで、PWM制御基板のI2C端子とGPIOの1,3,5,9番端子を接続しました。


サーボモーター配線

SG90の場合、配線の色は以下になります。

  1. 茶:GND
  2. 赤:5V
  3. 橙:PWM(SIG)

PWM制御基板に接続します。

  1. Ch.0にチルト用モーター(上下)
  2. Ch.1にパン用モーター(左右)

OSの設定

I2Cバスドライバの有効化

raspi-configでi2cバスを使用できるように設定後、再起動しました。


電動雲台制御画面の作成

パラメータ調整・コントロール画面の設計

雲台の制御は、Webサーバ(Node.js + Express.js)を使用させて頂こうと思います。

Webブラウザからアクセス可能な2つの画面を作成しました。

  1. サーボモーターのパラメータ調整画面
    • 周波数、turn on/turn offパラメータを入力して、モーターを実際に動かします。
    • パン・チルト(Ch.0と1)それぞれの可動範囲がわかったら、そのパラメータを記録します。
  2. 電動雲台の制御画面
    • 1番で調べたパラメータを読み込み、パン・チルト同時にモータを制御します。

Node.js+Express.jsプロジェクト作成

  1. プロジェクト名は「SG90CamMnt」にしてみました。
  2. PWM制御に使用するモジュールをインストールしておきます。

 ソースファイルの作成・変更

app.jsファイル変更

  1. app.jsファイルを編集します。

    「var app = express();」行の下に下記を追加しました。

    WebSocketサーバを作成、データを送受信しつつ、ws-event-handler.jsファイルの関数を実行する内容です。

views/index.ejsファイル変更

  1. index.ejsファイルをそっくり入れ替えます。

    電動雲台の制御画面になります。

views/pwm_test.ejsファイル作成

  1. pwm_test.ejsファイルを作成します。

    モーターの可動範囲を調べる画面になります。

public/javascripts/pwm_graph2.jsファイル作成

  1. pwm_grasph2.jsファイルを作成します。

    モーターの可動範囲を調べる画面のグラフを描画します。

ws-event-handler.jsファイル作成

  1. 最後にws-event-handler.jsファイルを作成します。

    pca9685モジュールを使用して、PWM制御基板に命令を送る内容です。

以上で準備が完了しました。


サーボモーターの設定手順

作ってから気づいたのですが。上記のソースコードは、タッチ操作ではなく、マウス操作が必要になります。PC等、マウス操作が可能なWebブラウザからアクセスして下さい。

  1. 作成したSG90CamMntプロジェクトを実行すると

    スマートフォンやWebブラウザで電動雲台の制御画面にアクセスできるようになります。

  2. モーターのパラメータを入れていない場合、コントロール画面で警告が表示されます。
  3. 画面左上のリンクから、パラメータの入力画面へ移動します。
  4. 画面を下にスクロールすると、周波数やturn onステップの入力画面になります。
    • SG90の場合、仕様上の駆動周波数は50Hzになります。
    • turn onは0のままで問題無いと思います。
    • turn offを変更して、モーターの動く範囲を調べます。チルトの場合、モーターを動かしすぎて、雲台を壊さないようにご注意下さい。
  5. 最適なパラメータがわかったら、画面上部の「カメラマウントで使用するパラメータ」欄に入力します。おうちの環境の場合、チルト用のモーターは、turn offが240から413くらいが丁度よい感じでした。
  6. 画面左上のリンクから「SG90カメラマウント制御」画面に戻ると、実際に電動雲台を動かす事ができます。画面下部の四角の領域で、マウスボタンを押しながらマウスを動かすと、カメラが上下左右に動くかと思います。
  7. 制御パラメータは、Webブラウザのローカルストレージに格納されます。ローカルストレージをクリアしたい場合、「SG90設定(ローカルストレージ)クリア」ボタンを押して消去することができます。

HTMLのマウスイベントでは、タッチパッドの操作は取れないのですね。うーむ。

本当はスマートフォンでタッチパッドで動かそうと思っていたのですが。

そのあたりは、使用するスマートフォンの機種とWebブラウザに合わせて、HTMLを少し変更すれば対応できそうです。

今回は雲台を動かしただけで、雲台にまだカメラを取り付けていません。

そのうち、何か取付用の部品を3Dプリンタで作成しようと思います。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク