Difference between revisions of "RSS measurement"
Line 12: | Line 12: | ||
=== Step 1 === | === Step 1 === | ||
Create New Simulation on Cooja. Let's say we call our simulation as "RSS". | Create New Simulation on Cooja. Let's say we call our simulation as "RSS". | ||
+ | |||
[[File:RSS_1.png|center|800px]] | [[File:RSS_1.png|center|800px]] | ||
Line 18: | Line 19: | ||
=== Step 2 === | === Step 2 === | ||
Create Motes. | Create Motes. | ||
+ | |||
[[File:RSS_2.png|center|800px]] | [[File:RSS_2.png|center|800px]] | ||
Line 24: | Line 26: | ||
=== Step 3 === | === Step 3 === | ||
Browse the firmware. You can find the code later in this tutorial. | Browse the firmware. You can find the code later in this tutorial. | ||
+ | |||
[[File:RSS_3.png|center|800px]] | [[File:RSS_3.png|center|800px]] | ||
Line 30: | Line 33: | ||
=== Step 4 === | === Step 4 === | ||
Compile the firmware. | Compile the firmware. | ||
+ | |||
[[File:RSS_4.png|center|800px]] | [[File:RSS_4.png|center|800px]] | ||
Line 36: | Line 40: | ||
=== Step 5 === | === Step 5 === | ||
Select number of new motes=2. | Select number of new motes=2. | ||
− | Note: We are | + | Note: We are uploading same firmware on both the motes. One will act as Sender and another will act as Receiver. |
+ | |||
[[File:RSS_5.png|center|800px]] | [[File:RSS_5.png|center|800px]] | ||
Line 43: | Line 48: | ||
=== Step 6 === | === Step 6 === | ||
Start the simulation. | Start the simulation. | ||
+ | |||
[[File:RSS_6.png|center|800px]] | [[File:RSS_6.png|center|800px]] | ||
Line 49: | Line 55: | ||
=== Step 7 === | === Step 7 === | ||
You can see the RSSI value in the mote output window. | You can see the RSSI value in the mote output window. | ||
+ | |||
[[File:RSS_7.png|center|800px]] | [[File:RSS_7.png|center|800px]] | ||
Revision as of 02:44, 14 November 2014
Contents
Introduction
This tutorial helps you to understand how to measure Radio Signal Strength (RSS) received by a Tmote Sky.
RSS Measurement Program on Cooja
Step 1
Create New Simulation on Cooja. Let's say we call our simulation as "RSS".
Step 2
Create Motes.
Step 3
Browse the firmware. You can find the code later in this tutorial.
Step 4
Compile the firmware.
Step 5
Select number of new motes=2. Note: We are uploading same firmware on both the motes. One will act as Sender and another will act as Receiver.
Step 6
Start the simulation.
Step 7
You can see the RSSI value in the mote output window.
Code
static struct collect_conn tc;
/*---------------------------------------------------------------------------*/
PROCESS(example_collect_process, "RSS Measurement");
AUTOSTART_PROCESSES(&example_collect_process);
/*---------------------------------------------------------------------------*/
static void
recv(const rimeaddr_t *originator, uint8_t seqno, uint8_t hops)
{
static signed char rss;
static signed char rss_val;
static signed char rss_offset;
printf("Sink got message from %d.%d, seqno %d, hops %d: len %d '%s'\n",
originator->u8[0], originator->u8[1],
seqno, hops,
packetbuf_datalen(),
(char *)packetbuf_dataptr());
rss_val = cc2420_last_rssi;
rss_offset=-45;
rss=rss_val + rss_offset;
printf("RSSI of Last Packet Received is %d\n",rss);
}
/*---------------------------------------------------------------------------*/
static const struct collect_callbacks callbacks = { recv };
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(example_collect_process, ev, data)
{
static struct etimer periodic;
static struct etimer et;
PROCESS_BEGIN();
collect_open(&tc, 130, COLLECT_ROUTER, &callbacks);
if(rimeaddr_node_addr.u8[0] == 1 &&
rimeaddr_node_addr.u8[1] == 0) {
printf("I am sink\n");
collect_set_sink(&tc, 1);
}
/* Allow some time for the network to settle. */
etimer_set(&et, 120 * CLOCK_SECOND);
PROCESS_WAIT_UNTIL(etimer_expired(&et));
while(1) {
/* Send a packet every 1 seconds. */
if(etimer_expired(&periodic)) {
etimer_set(&periodic, CLOCK_SECOND * 1 );
etimer_set(&et, random_rand() % (CLOCK_SECOND * 1));
}
PROCESS_WAIT_EVENT();
if(etimer_expired(&et)) {
static rimeaddr_t oldparent;
const rimeaddr_t *parent;
if(rimeaddr_node_addr.u8[0] != 1 ) {
printf("Sending\n");
packetbuf_clear();
packetbuf_set_datalen(sprintf(packetbuf_dataptr(),"%s", "Fight On") + 1);
collect_send(&tc, 15);
parent = collect_parent(&tc);
if(!rimeaddr_cmp(parent, &oldparent)) {
if(!rimeaddr_cmp(&oldparent, &rimeaddr_null)) {
printf("#L %d 0\n", oldparent.u8[0]);
}
if(!rimeaddr_cmp(parent, &rimeaddr_null)) {
printf("#L %d 1\n", parent->u8[0]);
}
rimeaddr_copy(&oldparent, parent);
}
}
}
} //end of while
PROCESS_END();
} //end of process thread
Understanding the Code
etimer_set(&et, CLOCK_SECOND * 2);
This will set the timer to repeat the iterations every 2 seconds.
SENSORS_ACTIVATE(light_sensor);
SENSORS_ACTIVATE(sht11_sensor);
We need to activate light_sensor for measuring the light intensity and sht11_sensor for the measurement of temperature and humidity.
val = sht11_sensor.value(SHT11_SENSOR_TEMP);
Here we are capturing the actual sensor value.
s = ((0.01*val) - 39.60);
We need to calibrate the sensor values by doing some calculations. You can find the calculations here: http://tinyos.stanford.edu/tinyos-wiki/index.php/Boomerang_ADC_Example
SENSORS_DEACTIVATE(light_sensor);
SENSORS_DEACTIVATE(sht11_sensor);
After we are done with the calculations, we need to deactivate the sensors.
Edited by : Nitin
http://web.stanford.edu/class/cs244e/papers/cc2420.pdf