目次へ  /  次へ

5章 簡易防犯システムの作成(インターネット接続応用編)

本章では、4章で構築した簡易防犯システムをベースに、インターネットを利用して会社や外出先から自宅のセキュリティを確認できる形態へと発展させてみたいと思います。インターネットへの接続は、フレッツADSL/ISDNなど低価格なサービスが提供されるようになってきましたのでこれらを利用して高速常時接続環境を構築しましょう。また、KARACRIXはカメラ画像入力機能をもっていますのでCCDカメラを使用してライブカメラ監視機能も取り入れています。さらに、Eメールを使用して異常発生時に警報メールを発信する機能(カメラ画像ファイルを添付可能)も追加してみましょう。
 

5.1 システム概要
 

防犯センサ、防犯ブザーの使い方は4章と基本的に同じですが、玄関にCCDカメラを設置します。インターネットアクセスの為のルータ等を回線の接続形態に応じて用意して下さい。
今回は、窓やドアが強制的に開けられた時に警報を音で知らせると同時に任意のプロバイダ経由で任意のアドレスへEメールの発信を行なう本格的なものです。


    図5.1 簡易防犯システム(応用編)の概要



5.2 CCDカメラの設置
 

CCDカメラは、NTSC信号形式の出力を持つものを入手してPCのビデオキャプチャカードまでビデオケーブルを配線する必要があります。また、カメラの電源が別途必要になりますので設置場所まで電源の配線も必要です。ここでは、ビデオ信号と電源を一緒に供給できるケーブルを使用しました。カメラは、秋葉原やホームセンターなどで入手できる小型CCDカメラを使用しています。


    写真5.1 カメラの設置例


    写真5.2 ビデオケーブルの接続

CCDカメラからの画像入力で玄関の人の出入りなどをリアルタイム監視します。ビデオキャプチャカードのデバイスドライバは、正しく設定されているものとします。


    写真5.3 ADSLモデム(下)とブロードバンドルータ(上)



5.3 ブロードバンドネットワークの設定
 

ブロードバンドルーターは、10/100BASE-TのHUB内臓でインターネットからアクセスするための仮想サーバー機能を持っているものを想定しています。KARACRIXサーバPC機、KCXH-IOB30RTAとの接続は、10/100BASE-Tのケーブルで接続します。ADSLモデムとブロードバンドルーター、NTT回線の接続の仕方は本マニュアル「1章 基礎知識」を参考にして下さい。


    図5.2 防犯システム配線図

 



5.4 Eメール環境の設定
 

KARACRIXは、Eメールによる監視制御機能を持っていますが、今回はこのEメールによる警報発信機能を活用しますのでここで、Eメールを送信できるように環境を設定する必要があります。
「メインメニュー」から“SYSENV”ボタンを選択して「システム環境メニュー」画面を表示して、“Eメール”ボタンを選択してEメール環境の設定を行なって下さい。
(KaracrixBuilder ユーザーズマニュアル 「16章 システム環境の設定」→「16.4 Eメール環境設定」参照)

以下に設定例を示します。


    図5.3 Eメール環境の設定例

なお、ルータ等の設定は、「1章 基礎知識」→「1.5パソコンをインターネットに接続する」を参考に行なってください。([補足] ダイアルアップルータ使用の場合は、KARACRIXからEメールの送信リクエストが発生した時点で契約されているプロバイダのメール送信サーバーにダイアル接続するように設定する必要があります。)



5.5 オブジェクト登録
 

今回は、防犯スイッチ 4個、ブザー1個、CCDカメラをセンサとして使用してシステムを組んでいます。
オブジェクトの一覧を以下に示します。

    機器
    ID名
    オブジェクト名
    オブジェクト型
    防犯スイッチ1 bi01 玄関ドア BI(バイナリ入力)
    防犯スイッチ2 bi02 居間窓 BI(バイナリ入力)
    防犯スイッチ3 bi03 和室窓 BI(バイナリ入力)
    防犯スイッチ4 bi04 寝室窓 BI(バイナリ入力)
    ブザー bo01 防犯ブザー BO(バイナリ出力)
    監視カメラ1 img01 玄関カメラ IMG(イメージ入力)

「メインメニュー」から“SYSENV”ボタンを選択して「システム環境メニュー」画面を表示して、“オブジェクト”登録ボタンを選択して下さい。
BI、BOオブジェクトは、4章で登録済みですので、追加したIMGオブジェクトのみ登録します。
IMGオブジェクト は、img01などのID名で設定されています。
「監視カメラ」を img01 に割り当てます[図5.4]。


    図5.4 IMGオブジェクトの登録

以上で、登録は終了です。

ここで、以上の設定をシステムに反映させるために、「オブジェクト登録」画面で“END”ボタンを選択して「メインメニュー」へ戻り、KARACRIXコンソールの “RST”ボタンを選択してKARACRIXをリセットして再起動して下さい。

 



5.6 パネルの作成
 

4章で作成した監視パネルにIMGオブジェクトを追加してCCDカメラ画像を監視パネルに表示できるようにしましょう。
監視パネルCADで動部品Aの“イメージ”部品を選択して下さい。IMGオブジェクトは、img01を選択します(カメラの接続されているポート)。次に、カメラの画像を監視パネルに表示する位置を設定します[図5.5,図5.6]。

       
    図5.5 IMG動部品のオブジェクトIDを選択


    図5.6 IMG動部品の表示位置

IMGオブジェクトを追加した監視パネルCADの表示を以下に示します。


    図5.7 IMG動部品を設定したところ

ここで、“ENT”ボタンを選択して保存すると共に、監視パネルで表示を確認します。カメラが接続されていない場合イメージ部品は図5.8の様な単色表示(真黒か真青)です。


    図5.8 イメージ部品を追加した監視パネル




5.7 ライブカメラ画像の監視
 

監視パネルで機器の状態をモニタしてみましょう。計測制御ユニットの設定と、通信プログラムの実行は、4章と同様に行なって下さい。
監視カメラの画像が監視パネルにリアルタイム表示されていれば正常に動作しています。
(※Webサーバの設定がされていれば、複数のブラウザからもリアルタイム画像を確認する事が出来るはずです。KaracrixBuilderユーザーズマニュアル「5章 Web・iモード・Eメールによる監視と操作」参照)


    図5.9 監視カメラ画像の表示

次節では、侵入者が窓を開けたりドアを開けたときに、宅内に通知するだけでなくEメールを使用して外部へも自動的に警報を通知してくれるような一歩進んだ自動監視プログラムを作成してみましょう。

 



5.8 監視制御プログラムの作成
 


    図5.10 フロー図

図5.10は、4章のフロー図に、Eメール発信の処理を追加したものです。
このフロー図をもとに、4章で作成したプログラムにEメール発信のプログラムを追加してみましょう。
以下、追加した部分の説明をします。

1) ユーザーアルゴリズムの記述

39行目に、警報が発生した回数をカウントするためのカウントメモリを0クリアしておきます。
71-77行目にかけて、ブザーの鳴動とともにメール送信する記述がしてあります。
73行目は、i モード等の携帯電話を対象に簡単なメール文を送ります。
76-77行目は、大きな画像イメージが受け取れるPC等を対象に画像ファイルを添付し送ります。

 32      /* 初期設定 */
 33      /* 防犯スイッチの状態を検定する為の初期状態を取得しておく */
 34      for( i = 0; i < SWOBJECTs; i++ ){
 35        kcxobj_stat_ird( sw_objid[i], &idata );
 36        sw_savedata[i] = idata;
 37      }
 38      /* 警報発生をカウントするメモリを0クリアする */
 39      almcount = 0;
 40
 41
 42      /* 防犯スイッチ1〜4の状態を毎秒(下記sleep(1)関数)監視する永久ループ */
 43      while( 1 ){
 44
 45        /* 防犯スイッチ1〜4の現在の状態を取得 */
 46        for( i = 0; i < SWOBJECTs; i++ ){
 47	     kcxobj_stat_ird( sw_objid[i], &sw_crntdata[i] );
 48        }
 49
 50        /* 防犯スイッチ1〜4のどこかで、ONになった時に限り        */
 51        /* つまり、前回の状態が0で、かつ現状態が1になった時に限り */
 52        /* ブザーフラグをONとする                               */
 53
 54        bz_flag =  0;
 55
 56        for( i = 0; i < SWOBJECTs; i++ ){
 57          if( ( sw_crntdata[i] == (1) )  && 
 58             ( sw_savedata[i] == (0) )  ){
 59	       bz_flag =  1; 
 60	     }
 61          sw_savedata[i] =  sw_crntdata[i];
 62        }
 63
 64        if( bz_flag == 1 ){
 65          /* bz_objidをONにする為にI/O通信プログラムにデータを送る(スタック) */
 66          /* ※自動的にOFFを行なわせたい場合には、何か工夫してください       */
 67          kcxobj_sndistat_tokcx( bz_objid, (1) );
 68          /* 1) 簡単な警報文を 携帯等 の Eメール に送信してみましょう        */
 69          /* 送信先アドレス例として、hanako@yyy.xx.jp   題名は、ドロボー警戒 */
 70          /* 電文(almtext)には警報発生の回数を付加するとしました             */
 71          almcount += 1;
 72          sprintf( almtext, "警報は %d 回目ですよ", almcount );
 73          kcxsnd_email_text("hanako@yyy.xx.jp","","","ドロボー警戒",almtext);
 74          /* 2) 同時に監視モニタ画像をEメールに添付しもう1つ送信してみましょう */
 75          /* 送信先アドレス例として、tarou@yyy.xx.jp   としました             */
 76          kcxsnd_email_text_append
 77              ("tarou@yyy.xx.jp","","","ドロボー警戒",almtext,"mon 1");
 78        }
 79
 80        /* CPUを(このプログラムだけで独占(負荷)させない為に)1秒停止させる  */
 81        /* ※sleep関数に出会うとCPUは次の待ちプロセスに実行を移して行きます */
 82        sleep( 1 );
 83
 84
 85     }/*(while)*/

[ライブラリ関数]

kcxsnd_email_text()         関数 ..... メール本文を送る
kcxsnd_email_text_append() 関数 ..... メール本文と添付ファイルを送る

1) kcxsnd_email_text( toaddr, ccaddr, bccaddr, subject, mailtext )
   char toaddr[64];  .....   送り先アドレス
   char ccaddr[64];  .....   同報送り先アドレス(CC)
   char bccaddr[64];  .....  同報送り先アドレス(BCC)
   char subject[64];  .....  メールタイトル
   char mailtext[64];  ..... メール本文


2) kcxsnd_email_text_append 
         ( toaddr, ccaddr, bccaddr, subject, mailtext, appendtext  )
   char toaddr[64];      .....   送り先アドレス
   char ccaddr[64];      .....   同報送り先アドレス(CC)
   char bccaddr[64];     .....   同報送り先アドレス(BCC)
   char subject[64];     .....   メールタイトル
   char mailtext[64];    .....   メール本文
   char appendtext[64];  .....   付加文(添付ファイルの指定)

以上でプログラムが完成しました。

 



5.9 監視制御プログラムの実行
 

プログラムをコンパイルして、実行ファイルが作成できたら実行してみます。「制御プログラム登録」画面に戻って下さい。

●プログラムを実行する

簡易防犯システムプログラムを実行する前に、計測制御通信プログラムが実行されていることを確認します。実行されていないときは、実行しておきます。
簡易防犯システムプログラムの“実行”欄をクリックすると、実行ダイアログが表示されますので”YES(実行)”ボタンを選択します[図5.11]。


    図5.11 ユーザープログラムの実行

この状態で、窓の開閉などを行って見てください。 連動してブザーが鳴ってメールが送信されれば成功です。
 



リスト5.1 簡易防犯応用システムプログラムリスト
  1
  2  #include 
  3
  4  #define  SWOBJECTs   (4)   /* スイッチ4つを格納する配列の定義 */
  5
  6  main( argc, argv )
  7  int    argc;
  8  char  *argv[]; 
  9  {
 10
 11    int   i,almcount;
 12    int   idata;                   /* 整数値を格納するバッファメモリ */
 13    char  almtext[64];             /* 文字列を格納するバッファメモリ */
 14    int   bz_flag;		      /* ブザーを鳴らすかどうかのフラグ */
 15    int   bz_objid;		      /* ブザーのオブジェクトID         */
 16    int   sw_objid   [SWOBJECTs];  /* スイッチのオブジェクトID       */
 17    int   sw_crntdata[SWOBJECTs];  /* スイッチの現在の状態を格納     */
 18    int   sw_savedata[SWOBJECTs];  /* スイッチの前回の状態を格納     */
 19
 20
 21      /* KARCRIXライブラリの初期化(先頭に必須) */
 22      kcxinit( argc, argv );
 23
 24      /* オブジェクトIDの取得 */
 25      sw_objid[0] = kcxobj_open( "bi01" );  /* 防犯スイッチ1 */
 26      sw_objid[1] = kcxobj_open( "bi02" );  /* 防犯スイッチ2 */
 27      sw_objid[2] = kcxobj_open( "bi03" );  /* 防犯スイッチ3 */
 28      sw_objid[3] = kcxobj_open( "bi04" );  /* 防犯スイッチ4 */
 29      bz_objid    = kcxobj_open( "bo01" );  /* ブザー        */
 30
 31
 32      /* 初期設定 */
 33      /* 防犯スイッチの状態を検定する為の初期状態を取得しておく */
 34      for( i = 0; i < SWOBJECTs; i++ ){
 35        kcxobj_stat_ird( sw_objid[i], &idata );
 36        sw_savedata[i] = idata;
 37      }
 38      /* 警報発生をカウントするメモリを0クリアする */
 39      almcount = 0;
 40
 41
 42      /* 防犯スイッチ1〜4の状態を毎秒(下記sleep(1)関数)監視する永久ループ */
 43      while( 1 ){
 44
 45        /* 防犯スイッチ1〜4の現在の状態を取得 */
 46        for( i = 0; i < SWOBJECTs; i++ ){
 47	     kcxobj_stat_ird( sw_objid[i], &sw_crntdata[i] );
 48        }
 49
 50        /* 防犯スイッチ1〜4のどこかで、ONになった時に限り         */
 51        /* つまり、前回の状態が0で、かつ現状態が1になった時に限り */
 52        /* ブザーフラグをONとする                                 */
 53
 54        bz_flag =  0;
 55
 56        for( i = 0; i < SWOBJECTs; i++ ){
 57          if(( sw_crntdata[i] == (1) ) && 
 58              ( sw_savedata[i] == (0) ) ){
 59	       bz_flag =  1; 
 60	     }
 61          sw_savedata[i] =  sw_crntdata[i];
 62        }
 63
 64        if( bz_flag == 1 ){
 65          /* bz_objidをONにする為にI/O通信プログラムにデータを送る(スタック) */
 66          /* ※自動的にOFFを行なわせたい場合には、何か工夫してください       */
 67          kcxobj_sndistat_tokcx( bz_objid, (1) );
 68          /* 1) 簡単な警報文を 携帯等 の Eメール に送信してみましょう        */
 69          /* 送信先アドレス例として、hanako@yyy.xx.jp   題名は、ドロボー警戒 */
 70          /* 電文(almtext)には警報発生の回数を付加するとしました             */
 71          almcount += 1;
 72          sprintf( almtext, "警報は %d 回目ですよ", almcount );
 73          kcxsnd_email_text("hanako@yyy.xx.jp","","","ドロボー警戒",almtext);
 74          /* 2) 同時に監視モニタ画像をEメールに添付しもう1つ送信してみましょう   */
 75          /* 送信先アドレス例として、tarou@yyy.xx.jp   としました            */
 78          kcxsnd_email_text_append
 79              ("tarou@yyy.xx.jp","","","ドロボー警戒",almtext,"mon 1");
 78        }
 79
 80        /* CPUを(このプログラムだけで独占(負荷)させない為に)1秒停止させる  */
 81        /* ※sleep関数に出会うとCPUは次の待ちプロセスに実行を移して行きます */
 82        sleep( 1 );
 83
 84
 85     }/*(while)*/
 86
 87
 88 }/*(main)*/

目次へ  /  次へ

Copyright(C) All Rights Reserved. by S.I.Soubou,Inc.