mica2dot

今日、mica2dotからTinyDBで光のセンサデータを取得することに成功しました。詳細は以下のようになります。

まず、moteのセンサを動かすためには、moteのタイプ毎につんであるセンサが違うので、それぞれのデバイスに対するドライバが必要です(たぶん)。ドライバは、/opt/tinyos-1.x/tos/sensorsboardsに入っています。ここには、micasbというmica2用のドライバがあるのだけど、mica2dot用のドライバが見当たりません。

/opt/tinyos-1.x/apps/Makerulesファイルに、

195 #Sensor Board Defaults

196 ifeq ($(SENSORBOARD),)



200 ifeq ($(PLATFORM),mica2)

201 SENSORBOARD = micasb

202 endif



209 ifeq ($(PLATFORM),pc)

210 SENSORBOARD = micasb

211 endif

212 ifeq ($(PLATFORM),mica2dot)

213 SENSORBOARD = basicsb

214 endif

215 endif

と書いてあるように、196行目から(おそらく)SENSORBOARDの値が定義されてなかったら、213行目でmica2dotのSENSORBOARDをbasicsbにするようになっている。まぁ、ここは蛇足。

で、問題は、/opt/tinyos-1.x/apps/TinyDBApp/Makefileで、

COMPONENT=TinyDBApp

SENSORBOARD=micasb



PFLAGS=-I%T/lib/Events -I %T/lib/Util -I%T/lib/Attributes -I%T/lib/Commands -I%T/lib/TinyDB

  • I%T/lib/MintRoute -I%T/lib/Queue -I%T/lib/FS -I%T/lib/TinyDB/Aggregates -fno-strict-aliasing



MSG_SIZE=49

include ../Makerules

となっていて、SENSORBOARDが常にmicasbになってしまっている。

肝心のドライバの中身は、センサを動かすためのいくつかのnesCファイルと、sensorboard.hヘッダファイルがある。

それで、/opt/tinyos-1.x/tos/sensorboards/micasb/sensorboard.hファイルを見てみると、

45 enum {

46 TOSH_ACTUAL_PHOTO_PORT = 1,

47 TOSH_ACTUAL_TEMP_PORT = 1,

48 TOSH_ACTUAL_MIC_PORT = 2,

49 TOSH_ACTUAL_ACCEL_X_PORT = 3,

50 TOSH_ACTUAL_ACCEL_Y_PORT = 4,

51 TOSH_ACTUAL_MAG_X_PORT = 6,

52 TOSH_ACTUAL_MAG_Y_PORT = 5

53 };

54

55 enum {

56 TOS_ADC_PHOTO_PORT = 1,

57 TOS_ADC_TEMP_PORT = 2,

58 TOS_ADC_MIC_PORT = 3,

59 TOS_ADC_ACCEL_X_PORT = 4,

60 TOS_ADC_ACCEL_Y_PORT = 5,

61 TOS_ADC_MAG_X_PORT = 6,

62 // TOS_ADC_VOLTAGE_PORT = 7, defined this in hardware.h

63 TOS_ADC_MAG_Y_PORT = 8,

64 };



73 TOSH_ALIAS_PIN(PHOTO_CTL, INT1);

74 TOSH_ALIAS_PIN(TEMP_CTL, INT2);

75 TOSH_ALIAS_OUTPUT_ONLY_PIN(MIC_CTL, PW3);

76 TOSH_ALIAS_OUTPUT_ONLY_PIN(SOUNDER_CTL, PW2);

77 TOSH_ALIAS_OUTPUT_ONLY_PIN(ACCEL_CTL, PW4);

78 TOSH_ALIAS_OUTPUT_ONLY_PIN(MAG_CTL, PW5);

79 TOSH_ALIAS_OUTPUT_ONLY_PIN(MIC_MUX_SEL, PW6);

なんか、気になるような単語ばかりが並んでいますねぇ。なんの数字でしょう?
答えは、xbowの MTS/MDA Mote Sensor and DAQ Manual[PDF]に書いてありました。以下にまとめておきましょう。

mica2取得データ取得条件データ出力ポート
マイクPW3ADC2
加速度PW4ADC3(x),ADC4(y)
磁気PW5ADC5(x),ADC6(y)
温度INT2ADC1
INT1ADC1
バッテリ??ADC7
mica2dotマイクPW1ADC2
加速度PW0ADC3(x),ADC4(y)
PW0ADC7
温度¬PW6&PW7ADC1
バッテリ¬PW7&PW5ADC1

ここにあるように、mica2では温度と光のセンサデータを同時に取得できないし、mica2dotでは、温度のセンサデータと電圧のデータを同時に取得できない。
まぁ、これらより、mica2dotを使うためには、sensorboard.hをmica2dot用に書き換えればいいわけですね。とりあえず、

46 TOSH_ACTUAL_PHOTO_PORT = 7,



73 TOSH_ALIAS_PIN(PHOTO_CTL, PW0);

と書き換えて、焼きなおしてみました。ばっちり光センサの値が取れるようになりました。(TOS_ADC_・・・ってなんのためにあるのでしょう・・・?)

ヘッダを書き換えたので、他のセンスできる値に変化がないことを確認してみました。すると、mica2dotでは、バッテリ(電圧)が取得できていた(つもりだった)んだけど、それが取れなくなっていまいました。というか、光と同じ値を出力するようになってました。

ちょっと考えて、すぐに答えが出ました。
さっきの/opt/tinyos-1.x/tos/sensorboards/micasb/sensorboard.hに

62 // TOS_ADC_VOLTAGE_PORT = 7, defined this in hardware.h

こういう行がありました。というわけで、/opt/tinyos-1.x/tos/platform/mica2/hardware.hです。

205 enum

206 {

207 TOSH_ACTUAL_CC_RSSI_PORT = 0,

208 TOSH_ACTUAL_VOLTAGE_PORT = 7,

209 TOSH_ACTUAL_BANDGAP_PORT = 30, // 1.23 Fixed bandgap reference

210 TOSH_ACTUAL_GND_PORT = 31 // GND

211 };

光センサの出力ポートと、電圧値の出力ポートが一緒になっていたんですね。