Msako警報器アダプタ試作機 [10年05月11日 17時45分]
#00001279
動体検知ソフトMsako用の警報器アダプタを試作した。AC100Vで動作する2Aくらいまでの警報器を制御できる。Msakoが動体を検出したときにAC100Vのスイッチがはいり、設定した時間が過ぎるとスイッチが切れる。





ハードウェア仕様

ケースとしては、タカチのABS樹脂のケースPR105G(105Wx45Hx65D)を使った。AC100Vのインレットとアウトレットは、はめ込み式のコンセントを使ったが、間抜けなことに、対応する板厚が1.2mmまでなのを見落としていた。ケースの板厚が3mmなのでパチンというまで、きちんとはまらず、ケーブルを抜くときにコンセントががたつく。仕方がないので応急処置としてグルーガンで固めたが、多分強度不足だと思う。
 今回試作したMsako警報器アダプタはPCのUSB端子に接続して使う。USB機能内蔵のマイコンPIC18F2550(400円)を使い、極力部品点数を少なくした。警報解除用のプッシュスイッチは底面に、警報状態の表示用LEDが上面にある。マイコンの電源はUSBバスから給電する。制御できる機器の電流は最大2Aとし、フューズによって過電流を遮断する。サイリスタの仕様に拠れば2Aなら放熱板はいらないが、念のため2mm厚の小さなアルミ板を抱かせておいた。

回路図

部品表
品名仕様・型式数量
片面ガラス・ユニバーサル基板95x55mm 2.54mmピッチ1枚
ICソケット28Pスリム300milタイプ1個
基板取付用USBコネクタBタイプ、メス1個
PICマイコンPIC18F2550-I/SP1個
セラミック発振子コンデンサ内蔵タイプ20MHz1個
トライアックBTA24-600CWRG1個
フォトトライアックMOC30411個
ZNR07D151K1個
カーボン抵抗10KΩ 1/4W1個
カーボン抵抗1KΩ 1/4W1個
カーボン抵抗220Ω 1/4W1個
カーボン抵抗100Ω 1/2W1個
カーボン抵抗330Ω 1/2W1個
積層セラミックコンデンサー0.1μF50V1個
積層セラミックコンデンサー1.5μF50V1個
ACコード2Pメガネタイプ 1.8m1本
LED5mm赤色1個
タクトスイッチ1aタイプ1個
はめ込みコンセント 白 WCF1011W1個
めがね型はめ込みプラグ受け 黒 WCF1071B1個
基板型ミニヒューズホルダーF-60-A1個
ミニガラス管ヒューズ FGMB 250V 2.0A1個
プラスチックケースPR-105G1個
基板コネクタポスト5CP14H 2P1個
基板コネクタハウジング5CP143 2P1個
圧着コネクタ630820 MA/FA2組
結束バンド少々
アルミ板2mm厚少々
ビス・ナット3mm少々
ACコード7A程度少々
ビニル電線AWG24少々
スズめっき線0.6mm少々
接着剤SuperX少々
半田鉛フリー 0.8mm少々

ファームウェア仕様

マイコンのファームウェアは、Microchip社の統合開発環境MPLAB IDEと同社のC18コンパイラを使って作成した。デバッグと書き込みには、同じく同社のインサーキットデバッガICD3を使った。USBのクラスは、マウスやキーボード類として認識されるHIDクラスやCOMポートとして認識されるCDCクラスにすればパソコン側のデバイスドライバは必要なくなるのだが、今回は一番汎用的なGenericクラスとして実装した。

USB仕様

 USB2.0 フルスピード(12Mbps)バスパワー
 ベンダID=0x04D8、プロダクトID=0x000C

エンドポイント方向転送方式最大サイズ
EP1INバルク64バイト
EP1OUTバルク64バイト


パソコン側のソフトウェア

パソコン側のソフトウェアは、次のコンポーネントで構成した。

コンポーネントケース1
Microchip社
ケース2
Microsoft社
デバイスドライバmchpusb.syswinusb.sys
API用のDLLmpusbapi.dllwinusb.dll
Msako用コマンド自作自作

デバイスドライバとAPI用DLLは、Microchip社のもの(ケース1)とMicrosoft社のもの(ケース2)と2種類試してみた。Microsoft社の方が自由度がある反面、複雑で安定度がいまいち心配。一方、Microchip社は単純なことしかできない反面、安定している。Msako用コマンドは、Visual Studio 2008を使ってC++言語で作成した。デバイスドライバは独自クラスとして登録し、自分で作成した赤い警報ベルのアイコンにしてみた。デバイスドライバ周りの開発やWinUSBを利用した開発のために、WDK(Windows Driver Kit)7600.16385.0を使用した。

デバイスドライバの仕様

デバイスクラスのGUID:544CDED2-D2D2-40CE-ADA5-49DF3C9AC15D
デバイスインターフェースGUID:58D07210-27C1-11DD-BD0B-0800200C9a66

DLLのインターフェース仕様

Microship社汎用USBクラス:MCHPFSUSB Framework v2.6a (2010-02-09)
Microsoft WinUSB:WinUSB March 9, 2010

アプリケーション仕様

アプリケーションデータパケット
  1. typedef enum
  2. {
  3.   NOP = 0x00,
  4.   READ_ID = 0x01,
  5.   SWITCH = 0x32,
  6.   RESET = 0xFF
  7. } TYPE_CMD;
  8. typedef union DATA_PACKET
  9. {
  10.   BYTE _byte[USBGEN_EP_SIZE];
  11.   WORD _word[USBGEN_EP_SIZE/2];
  12.   struct
  13.   {
  14.     BYTE CMD;
  15.     BYTE tbd;
  16.   };
  17.   struct
  18.   {
  19.     unsigned :8;
  20.     WORD ID;
  21.     BYTE version_major;
  22.     BYTE version_minor;
  23.   };
  24.   struct
  25.   {
  26.     unsigned :8;
  27.     BYTE sw_num;
  28.     BYTE sw_status;
  29.     WORD duration;
  30.   };
  31. } DATA_PACKET;

USB端子に本アダプタを接続すると、デバイスマネージャの画面は次のように表示される。



複数のデバイスにも対応する。その場合、次のように、デバイスごとに自分がわかりやすい名称に変更することができる。



本アダプタ用のコマンド、mswの仕様は次のとおり。ONからOFFに自動復帰する時間を10ms単位で指定できる。チャネル番号は、将来、1台の装置で複数の接点が制御できるようにした場合に対応できるようにした。今回の装置では、0のみ有効。

msw dev ch0[,ch1[,ch2...]]

 dev : 0から始める装置番号
 ch# : チャネル番号ごとの記述 val[=dur]
 val : 接点の状態。ONの場合1、OFFの場合0
 dur : 自動復帰時間(10ms単位) 0を指定すると自動復帰しない。

例)装置番号が0の装置の最初のチャネルを30秒間ONにする 

 msw 0 1=3000



このmswコマンドを、次のようにMsakoのコマンド実行タブに設定する。




動作試験

動作試験には、警報器としてOHM電機の防雨タイプのLED回転灯ORL-1(1980円)を使用した。そして、Msakoが動体を検知すると、このLED回転灯が点灯することを確認した。

 >> 動画

今後は、無電圧のA接点型の警報器に対応するタイプやUSBではなくて無線でPCと接続するタイプなども試作してみたい。


(投稿者:管理人)