Shuichi Machida's Weblog

« [Sun SPOT で"デューク神棚(D... | メイン | [Sun SPOT で"デューク神棚(D... »

http://blogs.sun.com/machida/date/20080421 2008年 4月 21日 月曜日

[Sun SPOT で"デューク神棚(Duke Temple)" を動かそう(2)] Hello Crystal Duke!!

 前回のエントリでDCモータの制御回路の簡単な動作確認まで行ったので、いよいよ神棚 の作成に取り掛かります。もともと工作セットのパーツで組み立て説明書が付いているのできっと簡単でしょう。

。。。

二時間経過。。

。。。 

く、結構めんどい。。。

。。。

か、完成! ;-)

# 神棚 

前回と同じように回路を接続します。

 # ちょっと拡大

さて、扉を開閉するプログラムはどうしましょう。元々付いていた音センサーを利用してもよいのですが、そういえば以前距離センサーを使ったことがあったので、これは使えそうです。 かしわ手で反応するのではなく、人が10cm~80cmの距離に近づいた時に扉が開いているように制御する、というのは良いかもです。ただ、そろそろ昼時も近づいてきたのでこれは後日の課題として、今日のところは単純に、扉の開閉を繰り返すSun SPOTプログラムを作成して動作確認だけすることにします。

こんな感じです↓

package org.sunspotworld;

import com.sun.spot.peripheral.Spot;
import com.sun.spot.sensorboard.EDemoBoard;
import com.sun.spot.sensorboard.io.IOutputPin;
import com.sun.spot.util.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class StartApplication extends MIDlet {
    private TempleManager templeManager;    // 神棚の扉の開閉を制御するクラス
    
    protected void startApp() throws MIDletStateChangeException {
        new BootloaderListener().start();
        Spot.getInstance().getSleepManager().disableDeepSleep();
        
        // 大電流出力ピンH0、H1を使用する
        IOutputPin[] pins = EDemoBoard.getInstance().getOutputPins();
        templeManager = new TempleManager(
                pins[EDemoBoard.H0],pins[EDemoBoard.H1]);

        while (true) {
            templeManager.openSesame();    // 扉を開く
            templeManager.stop(1000L);      // ストップ
            templeManager.shutSesame();    // 扉を閉じる
            templeManager.stop(1000L);      // ストップ
        }
    }
    protected void pauseApp() {
    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
        if (templeManager != null) {
            templeManager.destroy();
        }
    }
}

package org.sunspotworld;

import com.sun.spot.sensorboard.io.IOutputPin;
import com.sun.spot.util.Utils;

/**
 * 神棚の扉の開閉を制御するクラス
 */
public class TempleManager {
    private final long DURATION = 6000L;
    
    private IOutputPin out1;
    private IOutputPin out2;
    
    public TempleManager(IOutputPin out1, IOutputPin out2) {
        this.out1 = out1;
        this.out2 = out2;
        
        stop(1L);
    }
    
    /**
     * 扉を開く
     */
    public void openSesame() {
        stop(1L);
        out1.setHigh();
        Utils.sleep(DURATION);
        out1.setLow();
    }
    
    /**
     * 扉を閉じる
     */
    public void shutSesame() {
        stop(1L);
        out2.setHigh();
        Utils.sleep(DURATION);
        out2.setLow();
    }    

    /**
     * ストップ
     */
    public void stop(long duration) {
        out1.setLow();
        out2.setLow();
        Utils.sleep(duration);
    }    
    
    public void destroy() {
        out1.setLow();
        out2.setLow();
    }
}

Sun SPOT にプログラムをインストールして実行してみましょう。

。。。

# 扉が開き始めました!;-) なにやら透明な物体が。。。

 # クリスタルデューク登場!

 # 拡大。


投稿されたコメント:

コメント
  • HTML文法 不許可

Valid HTML! Valid CSS!

This is a personal weblog, I do not speak for my employer.