Webカメラの首振り制御

遠隔から向きを変えられるWebカメラを開発しました。

予備試験

動力はラジコン用サーボ GWS S03T 2BBMG

供給電圧4.8V
速度0.33sec/60deg
トルク7.40Kg-cm

サーボの動作確認をしている様子

USB経由で制御

サーボが動いている様子。ちょっと見づらいですが、サーボホーンに貼った赤い三角の目印で軸が回転していることが確認できます。それとギア音も聞こえます。 

機構部分

2軸(パン、チルト)機構部分を作成しました。

まずはJWCADというフリーのCADを使って図面を書きました。でも、中学で習っただけですからいい加減極まりないものです。まあ、見たいという人はいないと思いますが、万が一見る場合は参考にとどめといてください。

基台部  JWC形式 DXF形式

ヘッド部 JWC形式 DXF形式

材料はすべて近所のホームセンターにて調達。数量などこれもまたいい加減です。

材料表
品名仕様数量
アルミ板t=1mm1枚
アルミ板t=2mm1枚
ジュラコン製スペーサΦ=7.6mm/4.3mm L=10mm適宜
ねじ、ワッシャ、ナットM3適宜
ねじ、ワッシャ、ナットM2適宜
真鍮パイプΦ=3.5mm適宜

あとは例によってひたすらガリガリ、ゴリゴリと。てなわけで、、、

マイコン回路

マイコンは使い慣れたPIC16F876を使用することにしました。今回の目的のためには十分すぎるスペックですが、できたら後でテレビのリモコンでも操作できるように改造したいのでそのための余裕を持った選択です。

制御はUSB経由でパソコンから行えるようにします。USB部分はFT232RXモジュールを使いました。マイコン本体の電源はUSBから、サーボモーターの電源はUSBのバスパワーでは足りないので別途ACアダプターから供給します。

サーボ回路は1チャンネル余計ですがこれも将来?のために。それから、ジャンパーで装置番号を0から7まで設定できるようにしました。複数台を同時に使う場合に装置を識別するのに使おうと思います。

部品数を極力減らしたいのでパスコンやリセット用のCRなどは省略。

回路図

部品表
品名型式数量
U1PIC 16F876 20SP1
U2FT232RX1
X1セラロック 20MHz1
R1470Ω 1/4W1
R2,R3,R410KΩ 1/4W各1
CN1,CN2,CN3,CN4ピンヘッダの長いものをカット少々
JP1ピンヘッダの長いものをカット少々
LED5mmφ1
ICソケット20P、8P各1
基板ガラスエポキシ・ユニバーサル基板をカット1

今回は、さらに全体を収めるケースも作成しました。ケースの材料はフロッピーディスクのケースです。基台部分が100mmx100mmなのでちょうど良い大きさです。ただ、アクリルなのですぐに割れが入ってしまい思いのほか加工が難しかったです。

作成したWebカメラのマイコン基板

ファームウェア

ファームウェア(マイコンのソフトウェア)とその動作確認のためのプログラムをパソコン側に作成しました。

ファームウェアの仕様

  • 通信仕様:USBシリアル RS232C 38400bps 8bit パリティなし 1ストップビット フロー制御なし
  • 初期化処理:マイコンに電源が投入された直後に各軸の位置を中立の位置に戻します。また、LEDは消灯します。
  • 制御パルスを生成:2軸機構部を制御するための制御パルスを生成します。ラジコン用サーボの仕様に従って、20mS周期で1mS-2mS幅のパルスです。
  • 制御コマンド処理:パソコンから送信される制御コマンドを受信しそれに応じた処理を実行します。制御コマンドは本装置独自のもので、すべて、"コマンド文字<改行文字>"
    制御コマンド一覧
    コマンド文字処理内容
    Qこのコマンドを受信すると本装置は次の一行をパソコンへ送信します。Homebrew<改行文字>
    P# パン(首を左右に振る)。#は0から127までの値。
    T# チルト(首を上下に振る)。#は0から127までの値。
    H初期位置へ戻す。P63 T63 と同じ。
    Sこのコマンドを受信すると本装置は次の一行をパソコンへ送信します。装置番号(0-7) 現在のパン位置(0-127) 現在のチルト位置(0-127)<改行文字>
    ELEDを点灯します。
    DLEDを消灯します。
  • 可動範囲制限:ラジコン用サーボの仕様上各軸は機構や電気的に可動範囲が制限されていないために過度な角度指令をすると壊れます。そこで、ソフトウェアで可動範囲を±60度程度に制限しています。制御指令は0から127の範囲なので制御の分解能は120度/127≒1度ということになります。

開発環境

ファームウェアの開発環境はPICマイコンの開発元Microchip社MPLAB IDE v7.40 (現時点で最新版)です。開発言語はこの開発環境に含まれているアセンブラ言語MPASMです。今回使用したPICはフラッシュマイコンなのでパソコンで作成したプログラムを最終的にマイコンに書き込まなければいけません。書き込みに用いたソフトウェアはPIC Writer for Windows Ver 2.37です。なお、フラッシュ書き込みに用いたハードウェア(PICライター)は自作です。

使用したPICライター

開発したファームウェア(アセンブラ)

動作確認

さらにパソコン側の動作確認用のプログラムはMicrosoft Visual Studio.NET C# 2005で作成しました。

  • 本装置を自動的に発見し装置番号を表示します。
  • 現在の首の位置を表示します。
  • ▼や▲で首をフルスイングします。
  • ■で初期位置に戻ります。
  • 縦横のスライダーを動かすと上下左右に首を振ります。
  • LEDボタンを押すとLED点灯/消灯します。
 

結果

パルス周期を15mS以下にすると電源投入時つまりUSBプラグを差し込んだ時サーボが発振してしまうので微調整しましたが、後は何のトラブルも無くこのとおり首を振るようになりました。

前面(カメラはまだ取り付けていない)

背面(電源とUSBコネクタ)

フルスイング 可動範囲一杯まで振る

クイックモーション スライダーでグリグリ

動作試験

いよいよカメラを取り付けて最終確認です。今回使用したカメラはLogicoolのQcamR Communicate STX (QVC-70)です。

本体横の穴にあるネジ1本をはずせば簡単に左右に割れます。

用意したM5のネジにプラスチック部を傷めないようにゴムシートで作ったワッシャーを通します。このネジを下部にある穴の部分に挟み込みます。

このネジを使って首振り機構に取り付けます。この時、カメラ本体が丸いため滑りやすいので保護もかねてもう一度ゴムシートで作った座布団を間に当てます。

これが最終的な外観です。

カメラを取り付けた状態で問題なく首が振れるかどうか、試験用プログラムでもう一度試験です。問題なくきびき動いてますね。

2006年10月06日