ハードウェア仕様
ケースとしては、タカチの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/SP | 1個 |
| セラミック発振子 | コンデンサ内蔵タイプ20MHz | 1個 |
| トライアック | BTA24-600CWRG | 1個 |
| フォトトライアック | MOC3041 | 1個 |
| ZNR | 07D151K | 1個 |
| カーボン抵抗 | 10KΩ 1/4W | 1個 |
| カーボン抵抗 | 1KΩ 1/4W | 1個 |
| カーボン抵抗 | 220Ω 1/4W | 1個 |
| カーボン抵抗 | 100Ω 1/2W | 1個 |
| カーボン抵抗 | 330Ω 1/2W | 1個 |
| 積層セラミックコンデンサー | 0.1μF50V | 1個 |
| 積層セラミックコンデンサー | 1.5μF50V | 1個 |
| ACコード | 2Pメガネタイプ 1.8m | 1本 |
| LED | 5mm赤色 | 1個 |
| タクトスイッチ | 1aタイプ | 1個 |
| はめ込みコンセント 白 | WCF1011W | 1個 |
| めがね型はめ込みプラグ受け 黒 | WCF1071B | 1個 |
| 基板型ミニヒューズホルダー | F-60-A | 1個 |
| ミニガラス管ヒューズ | FGMB 250V 2.0A | 1個 |
| プラスチックケース | PR-105G | 1個 |
| 基板コネクタポスト | 5CP14H 2P | 1個 |
| 基板コネクタハウジング | 5CP143 2P | 1個 |
| 圧着コネクタ | 630820 MA/FA | 2組 |
| 結束バンド | 少々 | |
| アルミ板 | 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
| エンドポイント | 方向 | 転送方式 | 最大サイズ |
|---|---|---|---|
| EP1 | IN | バルク | 64バイト |
| EP1 | OUT | バルク | 64バイト |
パソコン側のソフトウェア
パソコン側のソフトウェアは、次のコンポーネントで構成した。
| コンポーネント | ケース1 Microchip社 | ケース2 Microsoft社 |
|---|---|---|
| デバイスドライバ | mchpusb.sys | winusb.sys |
| API用のDLL | mpusbapi.dll | winusb.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
アプリケーション仕様
アプリケーションデータパケット
typedef enum{NOP = 0x00,READ_ID = 0x01,SWITCH = 0x32,RESET = 0xFF} TYPE_CMD;typedef union DATA_PACKET{BYTE _byte[USBGEN_EP_SIZE];WORD _word[USBGEN_EP_SIZE/2];struct{BYTE CMD;BYTE tbd;};struct{unsigned :8;WORD ID;BYTE version_major;BYTE version_minor;};struct{unsigned :8;BYTE sw_num;BYTE sw_status;WORD duration;};} 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と接続するタイプなども試作してみたい。
