Sensor acquisition

From Contiki
Revision as of 11:42, 3 August 2014 by Nitin (Talk | contribs) (Step 2)

Jump to: navigation, search

Back to Contiki Tutorials

Introduction

This article is about the Sensor Acquisition Program, which is used to show the Temperature, Humidity and Light Intensity in the vicinity of Tmote Sky.

Sensor Acquisition Program on the Tmote Sky!

Step 1

Using the opened terminal window compile and upload the Sensor Acquisition program on the Tmote Sky.

make TARGET=sky savetarget (This save the target for any future compilations)
make sensor-acq.upload (This will upload the code on the Tmote Sky)
make login (This will enable us to view the output. If permission error occurs, use sudo command at the beginning)

Step 2

Press the reset button on the Tmote Sky. The following message will appear on the terminal window

Temperature=28.04 C (6764)
Humidity=73.20% (2259)
Light=38.26 lux (94)

Values inside the round brackets (ex 6764, 2259 and 94) are the actual sensor values and the calibrated values can be obtained by performing calculations on these sensor values. You can find the calculations at http://tinyos.stanford.edu/tinyos-wiki/index.php/Boomerang_ADC_Example

Step 3

Press Ctrl-C to quit.


Code

PROCESS(sensor_acq_process,"Sensor Acquisition"); AUTOSTART_PROCESSES(&sensor_acq_process);

PROCESS_THREAD(sensor_acq_process,ev,data) {

     static struct etimer et;
     static int val;
     static struct sensors_sensor *sensor;
     static float s = 0;
     static int dec;
     static float frac;
     PROCESS_BEGIN();
     printf("Starting Sensor Example.\n");


     while(1)
     {

etimer_set(&et, CLOCK_SECOND * 2); SENSORS_ACTIVATE(light_sensor);

     	   SENSORS_ACTIVATE(sht11_sensor);
       

PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));


          val = sht11_sensor.value(SHT11_SENSOR_TEMP);
     	   if(val != -1) 
     	   {

s= ((0.01*val) - 39.60);

     	  	dec = s;
     	  	frac = s - dec;
     	  	printf("\nTemperature=%d.%02u C (%d)\n", dec, (unsigned int)(frac * 100),val);               
          }

val=sht11_sensor.value(SHT11_SENSOR_HUMIDITY); if(val != -1)

     	   {

s= (((0.0405*val) - 4) + ((-2.8 * 0.000001)*(pow(val,2))));

     	  	dec = s;
     	  	frac = s - dec;
     	  	printf("Humidity=%d.%02u % (%d)\n", dec, (unsigned int)(frac * 100),val);               
          }
          val = light_sensor.value(LIGHT_SENSOR_TOTAL_SOLAR);
     	   if(val != -1) 
     	   {
     		s = (float)(val * 0.4071);
     	  	dec = s;
     	  	frac = s - dec;
     	  	printf("Light=%d.%02u lux (%d)\n", dec, (unsigned int)(frac * 100),val);               
          } 

etimer_reset(&et);

   	   SENSORS_DEACTIVATE(light_sensor);
   	   SENSORS_DEACTIVATE(sht11_sensor);
     } //end of while
   
     PROCESS_END();

}



Back to Contiki Tutorials