2008年 5月 21日 水曜日
[Sun SPOT(24)] SDC SQUARE 5月号 Sun SPOT連載第4回: 『入出力ポートにセンサーやアクチュエータを取り付けてみよう』
が掲載されております。
JavaOne 2008 の Hands on Labs (LAB-7430)で Bend Sensor(曲げセンサー)を使っていて (大渕さんによる体験レポートはこちら)、手軽で面白そうだったので使ってみました!
~~~~
Sun SPOT: 無線センサーデバイスの新潮流
第4回: 入出力ポートにセンサーやアクチュエータを取り付けてみよう
シリーズ第4回となる今回のテーマは、前回に続いて「Sun SPOTアプリケーション開発」です。Sun SPOTの入出力ポートにセンサーやアクチュエータをいろいろ取り付けて、Javaプログラムで制御してみましょう。曲げセンサーとスピーカーで、何か面白いアプリケーションが作れるでしょうか?
目次
- センサーボードの入出力インタフェース
- Step 0: LEDを点滅させる
- Step 1: 曲げセンサーの値を読み取る
- Step 2: スピーカーで音を出す
- Step 3: 曲げセンサーの値を使ってリモートのスピーカーで音を出す
- まとめ
~~~~
見どころ(動画):
Step 0: LEDを点滅させる:
Step 1: 曲げセンサーの値を読み取る:
Step 2: スピーカーで音を出す:
Step 3: 曲げセンサーの値を使ってリモートのスピーカーで音を出す:
是非ご覧下さい! m(_ _)m
Posted at 02:53午後 5 21, 2008 by Shuichi Machida in SunSPOT | 投稿されたコメント[0]
[Sun SPOT Demo(8)] 反射型フォトセンサー(Photo Reflector)を使ってみる。
ライントレーサを Sun SPOTで作ってみたくなり、その前段階として反射型フォトセンサー(RPR-220)を試してみることにしました。
# 反射型フォトセンサー
反射型フォトセンサーは発光部(赤外線LED)と受光部(フォトトランジスタ)で構成されており、発光部に電流を流してLEDを発光させ、近距離(6mm程度)の物体からの反射光を受光するとトランジスタに電流が流れます。下図のような回路(抵抗値は、今回4mA程度LEDに電流を流すことを想定して、データシートの特性から算出しています)を組むと受信した反射光の量に応じた出力(電圧値)の変化を検出できます。

ライントレーサは白地に引かれた黒いラインをロボットカーでトレースするもので、ラインを逸れたことを検出するために白と黒を判別する必要があります。物体が黒い場合、反射光が少なく電流があまり流れず、R2 部分であまり電圧降下がおこりません。一方、物体が白い場合は反射光が多くなり、多くの電流が流れて R2 での電圧降下が大きくなります。つまり、ざっくり言ってしまえば、「出力電圧が閾値より大きければ黒、小さければ白」というような判別ができます。
。。。
といことで、上図の回路を作成してみました。
# 少し拡大。
今回は単純に、白黒の縞模様のボードを用意して、フォトセンサーを横切らせてみることにしました。プログラムでは、白を検出したときに Sun SPOT上のLEDを白く光らせます。
# 簡単なプログラム↓
| package org.sunspotworld; import com.sun.spot.sensorboard.EDemoBoard; import com.sun.spot.sensorboard.peripheral.ITriColorLED; import com.sun.spot.sensorboard.peripheral.LEDColor; import com.sun.spot.util.*; import java.io.IOException; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; /** * PhotoReflectorDemoSpot: * 反射型フォトセンサーを使って物体の白黒を判別してLED表示する * Sun SPOTアプリケーション */ public class PhotoReflectorDemoSpot extends MIDlet { private PhotoReflector photoReflector; // 反射型フォトセンサー制御用クラス private ITriColorLED[] leds; // LED /** アプリケーション起動時にVMによって最初に呼び出されるメソッド */ protected void startApp() throws MIDletStateChangeException { new BootloaderListener().start(); // 反射型フォトセンサー制御用クラスのインスタンスを生成 // ここでは、アナログ入力ポート A0を指定 try { photoReflector = new PhotoReflector(EDemoBoard.A0); } catch (IOException ex) { System.out.println("Error initializing the PhotoReflector!!" ); ex.printStackTrace(); notifyDestroyed(); } // LEDを初期化 leds = EDemoBoard.getInstance().getLEDs(); initLeds(); while (true) { try { if (photoReflector.isWhite()) { // 白の場合LEDをOn ledsOn(true); } else { // 黒の場合LEDをOff ledsOn(false); } } catch (IOException ex) { ex.printStackTrace(); } catch (Exception ex) { ex.printStackTrace(); notifyDestroyed(); } Utils.sleep(200L); } } private void ledsOn(boolean on) { for (int i = 0; i < leds.length; i++) { leds[i].setOn(on); } } /* LEDを青色に初期化する */ private void initLeds() { for (int i = 0; i < leds.length; i++) { leds[i].setOff(); leds[i].setColor(LEDColor.WHITE); } } protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } } |
| package org.sunspotworld; import com.sun.spot.sensorboard.EDemoBoard; import com.sun.spot.sensorboard.io.IScalarInput; import com.sun.spot.util.Utils; import java.io.IOException; /** * PhotoReflector: * 反射型フォトセンサー(RPR-220)制御用クラス */ public class PhotoReflector { private IScalarInput input; // アナログ入力 private int threshold; // 白黒判別の閾値 /** * PhotoReflector のインスタンスを生成 * @param pinId センサーが使用するアナログ入力ポートのID */ public PhotoReflector(int pinId) throws IOException { // アナログ入力ポートにアクセスするための参照を取得 input = EDemoBoard.getInstance().getScalarInputs()[pinId]; // 閾値を計算。ここでは単純に、電流がほとんど流れない状態(黒)の // 80%まで電圧が降下したときに白と判定する threshold = (int)(input.getRange() * 0.8); } /** 白の場合 true */ public boolean isWhite() throws IOException { int value = input.getValue(); System.out.println("value=" + value); return (value < threshold) ? true : false; } /** 黒の場合 true */ public boolean isBlack() throws IOException { return !isWhite(); } } |
プログラムを Sun SPOTにインストールして、実行してみます。。
。。。。
どうやら上手くいったようです 
# 動画↓
次は、この反射型フォトセンサーを2つ使ってサーボカーをライントレーサ化してみようと思います。
Posted at 02:27午後 5 21, 2008 by Shuichi Machida in SunSPOT | 投稿されたコメント[0]