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 にプログラムをインストールして実行してみましょう。
。。。
# 扉が開き始めました!
なにやら透明な物体が。。。
# クリスタルデューク登場!
# 拡大。
Posted at 01:17午前 4 21, 2008 by Shuichi Machida in SunSPOT | 投稿されたコメント[0]