|
|
|
|
 |
 |
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 ) |
|
|
|
|
|
|
|
|
|
|
|
|