カテゴリ
リンク

ご迷惑をおかけします。以前の記事とリンクが切れています。ただいま修復中です。
当サイトは、玄箱PRO (KURO-BOX/Pro)を中心とした組み込み、Linuxと電子工作を扱っています。
会社案内

情報セキュリティおよび個人情報の取り扱いについて


コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。コメントはそれぞれ投稿した人のものです。

 ●パトライトを点灯させる
 1ビットでも重要な情報となる場合は様々です。例えば、"警報"というのは、「あり」と「なし」(0と1)では状況は反転します。仕事でも遊びでも異常自体をすぐに知ることは重要案件ですね。そこで、ネットワーク上のトラブルはネットワーク上の警報表示(パトライト)で察知することにします。
 「パトライト」というのは商品名ですが、これはパトカーの天井で見掛けたり、工場とかでも生産ラインで目にすると思います。何らかの異常があった際には点灯して人間にアラートを知らせます。最近のパトカーに付いているものは円筒形でなくなりましたが、"パトライト"というと誰もが円筒形で強烈なライトが回転しているものを想像するのではないでしょうか。
 さて、実際の製品は結構値が張ります。そこで前回で紹介しているような、たまたま玩具店で見掛けた「おもちゃのパトライト」を改造してみます。そもそも XPort は"ちっちゃなシステム"に似合うと直感しているので、むしろ、このおもちゃの改造には興味が湧いてきました。

x5-1-P1000101.jpg
おもちゃ屋で見つけてきたパトライト
 
x5-2-P1000098.jpg
   実際に設置している様子


おもちゃパトライトの改造
 下の写真1に示す「おもちゃパトライト」は、豆電球、回転反射板、モータ、電池ボックス、それと電源スイッチによって構成されていましたが、考え方として、スイッチ部分をトランジスタに置き換えただけです。
 写真には、このスイッチの役目をするトランジスタが見えています。

x5-3-P1000102.jpg
写真1:改造を終えたパトライト内部の様子

 XPort の装着場所としては、裏側にある電池ボックスのところが最適でしたので、プラスチック部分を加工して、上手に押し込めました。接着剤としては、"ホットメルト"を活用すると楽です。この様子が写真2です。
 ただ、後で気づいて"しまった!"と思ったのは、XPort の MAC アドレスのラベルの位置です。加工して接着した後に、この MAC アドレスが読めないと、場合によっては非常に困ったことになると思われます(私の場合は運よく、かろうじて読めました)。
 おもちゃだったので、一度分解すると再びモータが回転するかは、スリルがありました。詳しく言いますと、改造部品が底カバーに当たったり、あるいは中心軸を出すためのガイド部分を除去してしまったりしたので、なかなか中心軸が定まりませんでした。
 皆さんが入手されるものが不明なところですけれども、部品を納めるスペースを上手に探し、"ホットメルト"で固定してみてください。

x5-4-P1030364m.jpg
写真2:XPort を組み込んでいるところ

回路図

 1ビットの制御しか行っていないので、回路図は単純です。モータ、ランプ、回転機構、スイッチの場所と取り合いで、3.3V のレギュレータとモータ制御用のトランジスタを"空中配線"してあります。
 レギュレータ用のヒートシンクのスペースが見当たらなかったので、形状の大きなレギュレータを使用し(ここでは NEC のμPC2033)、筐体部に接着してヒートシンク替わりにしてあります。
 電源としては 5V(DC) 程度の AC アダプタを利用します。電流容量としては、そのパトライトを点灯させテスタで確認しておいてください。

x5-5-MotorControlByXPort.GIF
 回路図:記事の最後にデータを用意しています

ソフトウェア

 前述しているプログラムを使えば、このパトライトがオン/オフできる筈です。玄箱(pro)において、活用方法に合わせてシェル・スクリプトを組んでご利用ください。
 自動的に警報を出す方法以外に、人間が警報スイッチを入れる感覚で使いたい場合もあると思います。XPort はネットワーク上にいるので、もし、そういうスイッチを作るとすれば、ネットワーク通信ができなてはなりませんね。
 一方で、普段の生活では近場にパソコンがあるでしょうから、画面の上に警報スイッチを用意すれば事足ります。XPort は簡易 Web サーバ機能があるので、これを利用してみることにしました。したがって、パソコン側としてはWebブラウザを通してインタフェースすることになります。以下、簡単に 順を追って説明します。
 Webブラウザとのインターフェースのため、XPort にトップページに「アプレット起動用HTML」を書いておきます。


<html>
<body>
    <applet code="xport_patolight.class" width=250 height=300> </applet>
</body>
</html>
 つまり、XPort から java apllet をダウンロードしてインターフェースさせようという作戦です。ここに関わる java プログラムのソースを示しておきます。

/* XPort でパトライトをオン/オフさせる java プログラム */

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.awt.Graphics;
import java.net.URL;
import java.awt.Toolkit;


public class xport_patolight extends Applet implements Runnable{
	Image img1,img2,img3,img4;
	int px,py,com;
	boolean sw1,bt1,run;	
	Thread th=null;	
	Graphics g;
	
	public void init(){
		img1=getImage(getDocumentBase(),"b0029.gif");
		img2=getImage(getDocumentBase(),"on.png");
		img3=getImage(getDocumentBase(),"off.png");

		g=getGraphics();
				
		sw1=false;
		bt1=false;
		run=false;

    	addMouseListener(                         //sw1の処理
		new MouseAdapter(){
			public void mouseClicked(MouseEvent e){
				if(e.getX()>129 && e.getX()<199 && e.getY()>118 && e.getY()<200){
					sw1=!sw1;
					if(sw1) {
					    com=0x01;
					} else {
					    com=0x00;
				    }
					repaint();
					run=true;
				}
			}
		});
}
	
	public void paint(Graphics g){
	    g.drawImage(img1, 100, 50, 200, 230, this);
		if(sw1){
			g.drawImage(img2,130,118,this);
		} else {
		    g.drawImage(img3,130,118,this);
        }
	}
	
	public void start(){
		if(th==null){
			th=new Thread(this);
			th.start();
		}
	}
	
	public void run(){                 //コマンド発信部分
		while(true){
			if(run){
				try{
					Socket theSock=new Socket("192.168.1.22",30704);

				    DataOutputStream sockout=new DataOutputStream(theSock.getOutputStream());
	       		    DataInputStream  sockin  =new DataInputStream(theSock.getInputStream());
					
				    sockout.writeByte(0x01);
				    sockout.writeByte(0x02);
				    sockout.writeByte(com);
				    sockout.writeByte(0x01);
					sockout.flush();			    
					
					th.sleep(20);
									
					sockin.close();
					sockout.close();
					theSock.close();
				}
				
				catch(Exception e){
					g.drawString("エラー発生!",240,450);
				}
				
				run=false;
				
			}
			else{
				try{
					th.sleep(100);
				}
				catch(Exception e){
				}
			}
		}
		
	}
}
  (ダウンロードするならば、xport_patolight.javaとなる)
 
 動作説明が後回しになってしまいましたが、オンとオフのスイッチ画像をクリックします。この様子が下のスクリーンショットです。

          画面ショット:マウスのクリックでオン状態とオフ状態のトグル動作
x5-6-web_on.jpgx5-7-web_off.jpg
 上の java プログラムを java アプレットにコンパイルするには java 環境が必要となります。この説明部分は割愛させていただきますが、java をコンパイル(javac)するステップのスクリーンショットを用意しておきました。

x5-8-cmd_javac_xport_patolight.jpg 次に、コマンドプロンプト画面にて、COB ファイルを生成しておきます。web2cob.exe は /o で出力ファイルを /d で作業用のサブディレクトリを指定しますので、例えば、「 web2cob /o xport.cob /d source 」の形になります。

x5-9-web2cob_xport_patolight.jpg このように、XPort にデータを送るためには、cob という形式にまとめなくてはなりません。そのため、XPort のインストーラに付属しているソフトウェア(web2cob.exe)とその作業フォルダ(ここでは source とした)を用意します。
 下記が、cob を作成するための親ディレクトリ(Web)の中身です。ここで web2cob.exe をコマンドプロンプト画面おいて起動します。

x5-10-dir_xport_patolight.jpg

 サブディレクトリ(source)の中身については、若干、無関係なものがあっても気にしないでまとめてしまいました。

 デバイスインストーラは、古いバージョンのものを起動しています。はじめに、IP アドレスをアサインしたり、CP1, CP2, CP3 の入出力を設定したりしておきます。そして、下の画面のように、COB を書き込むところまでクリックしていきます。

x5-11-lantronix__xport_patolight.jpg
 ちなみに、このパトライト記事で使用している XPort はやや古いバージョン(firmware v1.2)です。
下は、XPort を検索後、生成した COB ファイルを書き込もうとしているところです。

x5-12-lantronix__xport_patolight2.jpg
 話がずれますが、ブラウザからオン/オフするとして、ボタン(画像)が必要だったりするので、こんなソフトウェア(フリーウェア)を利用してボタン作成しておきます。

x5-13-AquaMaker.jpg
 オン/オフの画像などは好みで作成してかまわないのですが、手早く試したい方は下のものをお使い下さい。

x5-14-on.png
x5-15-off.png
x5-16-b0029.gif
 最後になりましたが、パトライトが点灯しているスナップもおまけしておきます。

 このパトライトの記事はいかがだったでしょうか。次回も引続き、玄箱(pro)をコントローラに見立て、XPort を活用しての記事を考えてみたいと思います。

 
x5-17-P1030224m.JPG
デバッグ中の XPort 入りパトライト(点灯時)


コラム 回路図について
回路図エディタ 回路図エディタは水魚堂のBSch3Vを使っています。
下記のファイルは"名前を付けて保存"してください。
LED 点灯の回路図 LED.CE3
パトライトの改造回路図 MotorControlByXPort.CE3
<和田 好司>

 カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: XPort活用 「その2」《パトライト編》 後編

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/1706

コメントする

おすすめ書籍
Powered by
Movable Type 4.1