Home > Board > Software
±Û   º¸   ±â
±Û¾´ÀÌ     jinnie4u (2005-04-25 10:17:57)
Á¦¸ñ     MTS310º¸µå¿¡¼­ Accelerometer X, Y °ª µ¿½Ã¿¡ ÀÐ¾î ¿À±â   Á¶È¸ : 12700
MTS310 ¿¡´Â ºû(Light), °¡¼Óµµ(Accelerometer), ¼Ò¸®(Microphone), ÀÚ±â(Magnetometer) µîÀÇ ¼¾¼­°¡ ÀÖ½À´Ï´Ù.

ÀÌÁß¿¡ °¡¼Óµµ ¼¾¼­¸¦ ÀÌ¿ëÇØ, AccelerometerÀÇ X, Y µ¥ÀÌÅ͸¦ Base ·Î Àü¼ÛÇϰí
À̸¦ TOSÀÇ ÀÚ¹Ù ÇÁ·Î±×·¥ÀÎ ¿À½Ç·Î½ºÄÚÇÁ¸¦ ÀÌ¿ë, ±×·¡ÇÁ·Î Ãâ·ÂÇϵµ·Ï ÇÏ¿´½À´Ï´Ù.

¿øº» ÇÁ·Î±×·¥Àº xbow ¿¡¼­ Á¦°øµÈ TestSensor ¶ó´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù.
TestSensor´Â MTS300(¶Ç´Â 310)ÀÇ ¸ðµç ¼¾¼­·Î ºÎÅÍÀÇ µ¥ÀÌÅ͸¦ UART, RF Communication À» ÀÌ¿ëÇØ Àü¼ÛÇØÁÖ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù.
ÀÌ ÇÁ·Î±×·¥À» Accel ¼¾¼­¸¸ »ç¿ëÇϵµ·Ï, ¿À½Ç·Î½ºÄÚÇÁ¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Â ÇüÅ·ΠÆÐŶÀ» Àü¼ÛÇϵµ·Ï ¼öÁ¤ÇÏ¿´½À´Ï´Ù.

X¿Í Y, µÎ°¡Áö µ¥ÀÌÅͺ°·Î º°µµ·Î ADC¸¦ È£ÃâÇϴµ¥ »ç¿ëµÈ ÇÔ¼ö´Â
AccelX.getData(), AccelY.getData()·Î AccelX¿Í AccelY°¡ °¢°¢
XÃà°ú YÃàÀÇ µ¥ÀÌÅ͸¦ ÀоîµéÀÔ´Ï´Ù.

Àü¼ÛÇÏ´Â µ¥ÀÌÅÍ Å¸ÀÔÀº OscilloscpeRF¿¡ ÀÖ´Â struct OscopeMsg
ŸÀÔÀÇ ±¸Á¶Ã¼¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù.

ÇϳªÀÇ ³ëµå¿¡¼­ X,Y µÎ°³ÀÇ °ªÀÌ Àü¼ÛµÇ±â ¶§¹®¿¡ À̸¦ ±¸ºÐÇØÁÖ±â À§ÇØ
ä³Î¹øÈ£¸¦ ¼­·Î ´Ù¸£°Ô ÇØÁÖ¾ú½À´Ï´Ù.
X¿ë : pack->channel = 7;
Y¿ë : pack->channel = 9;

µÎ°³ÀÇ µ¥ÀÌÅ͸¦ ´ãÀº µÎ ÆÐŶÀ» ¿¬¼ÓÀûÀ¸·Î Àü¼ÛÇϰíÀÚ ÇÒ °æ¿ì
³×Æ®¿öÅ©´Ü¿¡¼­ ¹öÆÛ°¡ Àü¼ÛÁß¿¡ ¹Ù²î°Å³ª ÇÏ´Â ¹®Á¦°¡ ¹ß»ýÇÏ´ÂÁö
Á¤»óÀûÀ¸·Î Àü¼ÛµÇÁö ¾Ê½À´Ï´Ù. TinyOS´Â ³×Æ®¿öÅ©Àü¼Û¿¡µµ À̺¥Æ®¸¦
»ç¿ëÇϸç ÀÌ´Â nonblocking±â¹ý ó·³ µ¿ÀÛÇÏ°Ô µË´Ï´Ù.
ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ ÇϳªÀÇ ÆÐŶÀ» ¸ðµÎ Àü¼ÛÇÏ¿´´Ù´Â °ÍÀ»
È®ÀÎÇÑ ÈÄ¿¡ ´Ù¸¥ ÆÐŶÀ» Àü¼ÛÇϵµ·Ï ÇÏ¿´½À´Ï´Ù.

~~~ µ¿ÀÛ¹æ½Ä ~~~
1. ÃʱâÈ­
- ADC
- Accelerometer
- Timer
- Leds

2. Timer fired
- ADC¿¡ Accelerometer X °ª Àб⠿äû
( call AccelX.getData() )

3. ADC¿¡ Accelerometer X °ª ÁغñµÊ event¹ß»ý
- async event result_t AccelX.dataReady(uint16_t data) ÇÔ¼ö ½ÇÇàµÊ
- struct OscopeMsg ±¸Á¶Ã¼¿¡ µ¥ÀÌÅÍ ÀúÀå

4. X¿ë Buffer°¡ ´Ù á´ÂÁö ¿©ºÎ ÆÇº°
- ¹öÆÛ¿¡ ¿©À¯°¡ ÀÖ´Â °æ¿ì
- Y°ª Àб⠿äû
(call AccelY.getData())
- ¹öÆÛ°¡ ´Ù Âù °æ¿ì
- µ¥ÀÌÅÍ Àü¼Û
(call SendMsg.send(TOS_BCAST_ADDR, sizeof(struct OscopeMsg),&Buffer_X);

5. ADC¿¡ Accelerometer Y °ª ÁغñµÊ event¹ß»ý
- X°ª ÀбâÈÄ ( BufferÅ©±â - 1 )¹ø ¸¸Å­ È£ÃâµÊ
- ¸¶Áö¸· °ÍÀº Xµ¥ÀÌÅÍ Àü¼ÛÈÄ¿¡ È£Ãâ

6. ÆÐŶ Àü¼Û À̺¥Æ® ¹ß»ý
(event result_t SendMsg.sendDone(TOS_MsgPtr sent, result_t success) )
- Àü¼ÛµÈ ÆÐŶÀÌ X°ªÀ» ÀúÀåÇÑ °ÍÀÏ °æ¿ì
- Y°ª Àб⠿äû
(call AccelY.getData())



----------------------------------------------------------------------------


includes sensorboard;
includes Msg;
includes OscopeMsg; // Oscilloscope ¿¡¼­ »ç¿ëµÇ´Â ¸Þ½ÃÁöŸÀÔ Æ÷ÇÔ

module TestSensorM {

provides { interface StdControl; }

uses {

interface StdControl as CommControl;
interface SendMsg as SendMsg;
interface ReceiveMsg as ReceiveMsg;

// Accel
interface StdControl as AccelControl;
interface ADC as AccelX;
interface ADC as AccelY;

interface ADCControl;
interface Timer;
interface Leds;

}
}

implementation {

TOS_Msg Buffer_X;
TOS_Msg Buffer_Y;
norace uint8_t packetReadingNumber1, packetReadingNumber2; // ÇϳªÀÇ ÆÐŶ¿¡ Ãß°¡µÈ µ¥ÀÌÅÍÀÇ Ä«¿îÆ®
norace uint16_t readingNumber1, readingNumber2;
norace uint8_t msg_sent1, msg_sent2;

// ÄÄÆ÷³ÍÆ®, ADCControl, Leds ÃʱâÈ­
command result_t StdControl.init()
{
// º¯¼ö ÃʱâÈ­
readingNumber1 = 0;
readingNumber2 = 0;
packetReadingNumber1 = 0;
packetReadingNumber2 = 0;
msg_sent1 = 0;
msg_sent2 = 0;

// ÄÄÆ÷³ÍÆ® ÃʱâÈ­
call ADCControl.init();
call Leds.init();
call AccelControl.init();

return SUCCESS;
}


// ÄÄÆ÷³ÍÆ® ½ÃÀÛ ¹× ŸÀÌ¸Ó ½ÃÀÛ
command result_t StdControl.start()
{
call AccelControl.start();
call Timer.start(TIMER_REPEAT, 100); // 0.1 sec
return SUCCESS;
}

// ÄÄÆ÷³ÍÆ® Á¤Áö
command result_t StdControl.stop() {
call AccelControl.stop();
return SUCCESS;
}

// StdControl.start()ÀÇ Timer.start()¿¡¼­ ¼³Á¤ÇÑ ½Ã°£ÀÌ expire µÉ ¶§ ½ÇÇà
// X data Sampling
event result_t Timer.fired()
{
// call Leds.yellowToggle(); // ÁÖ¼® Á¦°Å½Ã 0.1Ãʸ¶´Ù Yellow LED Åä±Û
if( msg_sent1==0 && msg_sent2 == 0) {
call AccelX.getData();
}
return SUCCESS;
}


// X µ¥ÀÌÅÍ »ùÇøµ ¿Ï·á½Ã ½ÇÇà
// X µ¥ÀÌÅ͸¦ oscilloscope ÆÐŶ¿¡ ½Ç¾î RF Àü¼Û
async event result_t AccelX.dataReady(uint16_t data)
{
struct OscopeMsg *pack; // ¿À½Ç·Î½ºÄÚÇÁ ŸÀÔÀÇ ÆÐŶ

// Àü¼ÛÇÒ µ¥ÀÌÅͰ¡ ÀúÀåµÈ °ø°£À» ¿À½Ç·Î½ºÄÚÇÁŸÀÔ¿¡ Æ÷ÀÎÅÍ·Î ¸ÅÇÎ
pack = (struct OscopeMsg *)Buffer_X.data;

// Àоî¿Â µ¥ÀÌÅ͸¦ ÆÐŶ¿¡ ÀúÀå, ÆÐŶ¿¡ ÀúÀåµÈ µ¥ÀÌÅÍÄ«¿îÆ® Áõ°¡
pack->data[packetReadingNumber1++] = data;

readingNumber1++;

// ÆÐŶ¿¡ ÀúÀåµÈ µ¥ÀÌÅͼö°¡ ¹öÆÛÀÇ Å©±â¿Í °°À» °æ¿ì ÆÐŶ Àü¼Û
if (packetReadingNumber1 >= BUFFER_SIZE ) {
msg_sent1 = 1;

// ÆÐŶ¿¡ ÀúÀåµÈ µ¥ÀÌÅͼö Ä«¿îÆ® ÃʱâÈ­
packetReadingNumber1 = 0;

// ÇöÀç±îÁö Àоî¿Â ÃÑ µ¥ÀÌÅͼö ÀúÀå
pack->lastSampleNumber = readingNumber1;

// µ¥ÀÌÅ͸¦ Àоî¿Â ä³Î¹øÈ£ ÀúÀå
pack->channel = 7;

// ÇöÀç moteÀÇ ¾ÆÀ̵ð ÀúÀå
pack->sourceMoteID = TOS_LOCAL_ADDRESS;

call Leds.redToggle(); // Red LED Åä±Û

// OscopeMsgÇüÅ·ΠÆÐŶ Àü¼Û
call SendMsg.send(TOS_BCAST_ADDR, sizeof(struct OscopeMsg),&Buffer_X);
}

else call AccelY.getData(); // Y µ¥ÀÌÅÍ »ùÇøµ

return SUCCESS;
}

// Y µ¥ÀÌÅÍ »ùÇøµ ¿Ï·á½Ã ½ÇÇà
// Y µ¥ÀÌÅ͸¦ oscilloscope ÆÐŶ¿¡ ½Ç¾î RF¸¦ ÀÌ¿ëÇØ Àü¼Û
async event result_t AccelY.dataReady(uint16_t data)
{
struct OscopeMsg *pack; // ¿À½Ç·Î½ºÄÚÇÁ ŸÀÔÀÇ ÆÐŶ

pack = (struct OscopeMsg *)Buffer_Y.data;
pack->data[packetReadingNumber2++] = data;
readingNumber2++;

if (packetReadingNumber2 >= BUFFER_SIZE) {
packetReadingNumber2 = 0;
pack->lastSampleNumber = readingNumber2;
pack->channel = 9;
// ÇöÀç ¸ðÆ® ¾ÆÀ̵𿡠2¸¦ ´õÇØ Y °ª¿¡ ´ëÇÑ ID ¼³Á¤
pack->sourceMoteID = TOS_LOCAL_ADDRESS + 2;
call Leds.greenToggle();// Green LED Åä±Û
call SendMsg.send(TOS_BCAST_ADDR, sizeof(struct OscopeMsg),&Buffer_Y);
}

return SUCCESS;
}



// dataReady ¿¡¼­ SendMsg.send() È£Ãâ ÈÄ ½ÇÇà
event result_t SendMsg.sendDone(TOS_MsgPtr sent, result_t success)
{
// X µ¥ÀÌÅÍ Àü¼Û ÈÄ AccelY.getData() ½ÇÇà
if( sent == &Buffer_X ) {
msg_sent1 = 0;
call Leds.redOff();
call AccelY.getData();
}
// Y µ¥ÀÌÅÍ Àü¼Û ÈÄ Green LED Off ÈÄ readingNumber ¼Â
if( sent == &Buffer_Y ) {
msg_sent2=0;
call Leds.greenOff();
readingNumber1=readingNumber2;
}

return SUCCESS;
}

// ¿À½Ç·Î½ºÄÚÇÁ·ÎºÎÅÍ ¸Þ½ÃÁö ¼ö½Å½Ã
// ÇöÀç ÀоîµéÀÎ ¹öÆÛ À妽º ÃʱâÈ­
// X, Y readingNumber µ¿±âÈ­
event TOS_MsgPtr ReceiveMsg.receive(TOS_MsgPtr data)
{
packetReadingNumber1 = 0;
packetReadingNumber2 = 0;
readingNumber1 = readingNumber2;
return data;
}

}


By jinnie4u ( jinnie4u@hotmail.com, jhlee@snslab.kangwon.ac.kr )
    
À̸§      ºñ¹Ð¹øÈ£        ÀÎÁõŰ   
³»¿ë
¹øÈ£ Á¦     ¸ñ ±Û¾´ÀÌ ³¯Â¥ Á¶È¸¼ö
1418   TOSSIM ¼Óµµ jhwzero 2006-04-11 3402
1417      [´äº¯][Áú¹®]TinyOS¿¡¼­ ¸î°¡Áö Àǹ® »çÇ×ÀÌ ÀÖ½À´Ï´Ù... jpaek 2006-04-12 2324
1416      [´äº¯]outp(), sbi(), cbi(), sei() ¿¡ ´ëÇÑ ¼³¸íºÎŹ... jhwzero 2006-04-12 3778
1415        ±Ã±ÝÁõÀÌ È® Ç®¸®³×¿ä!! ÇѰ¡Áö ´õ Áú¹®ÀÌ ÀÖ¾î¿ä? »ç°ú³ª¹« 2006-04-13 2517
1414          [´äº¯]±Ã±ÝÁõÀÌ È® Ç®¸®³×¿ä!! ÇѰ¡Áö ´õ Áú¹®ÀÌ ÀÖ¾î... À¯ÇÑÁ¾ 2006-04-13 3061
1413   [Áú¹®]TinyOS¿¡¼­ ¸î°¡Áö Àǹ® »çÇ×ÀÌ ÀÖ½À´Ï´Ù. »ç°ú³ª¹« 2006-04-11 4145
1412   outp(), sbi(), cbi(), sei() ¿¡ ´ëÇÑ ¼³¸íºÎʵ右´Ï... ÀÌÇØµ¿ 2006-04-11 3376
1411      [´äº¯]¿Ö ÇÁ·Î±×·¡¹Ö º¸µå¿¡ ¿Ã¶ó °¡¸é ¼ö½ÅÀÌ ¾ÈµÉ±î... jpaek 2006-04-11 3478
1410        [´äº¯][´äº¯]¿Ö ÇÁ·Î±×·¡¹Ö º¸µå¿¡ ¿Ã¶ó °¡¸é ¼ö½ÅÀÌ ... °í¼º¾È 2006-04-11 3051
1409      [´äº¯]timer ¿¡ ´ëÇØ Áú¹® µå¸³´Ï´Ù. jpaek 2006-04-11 2975
1408        ´äº¯ Á¤¸» °¨»çµå¸³´Ï´Ù. (³Ã¹«) jiyo 2006-04-11 2490
1407   TinyViz ÀÛµ¿ ¹®Á¦ /.15 ¾÷µ¥ÀÌÆ® ÈÄ Á¶Çö¿ì 2006-04-10 2854
1406   ¿Ö ÇÁ·Î±×·¡¹Ö º¸µå¿¡ ¿Ã¶ó °¡¸é ¼ö½ÅÀÌ ¾ÈµÉ±î¿ä? °í¼º¾È 2006-04-10 3152
1405   timer ¿¡ ´ëÇØ Áú¹® µå¸³´Ï´Ù. jiyo 2006-04-08 2870
1404   ¼¾¼­³×Æ®¿öÅ© Ãʺ¸ ÇлýÀÔ´Ï´Ù. Áú¹®ÇѰ¡Áö µå¸³´Ï´Ù. loveramia 2006-04-08 3344
  [151] [152] [153] [154] [155] [156]  
Introduction    /    News    /    Board    /    Data    /    Testbed