People

  • Bruno Gonçalves | brunojfgoncalves < a t > ist.utl.pt
  • Jorge Soares | jorgesoares < a t > ist.utl.pt

Overview

This project aims to improve the energy efficiency and monitoring capacities of Tagus SensorNet. Currently the network can only operate independently for up to 4 days, standing very far from its goal of continuous operation. The largest culprit is the CC2420 radio, which is always on and consumes more than 80% of the total. We have developed a system named TagusPM which can control the radio, synchronously turning it on and off over the entire network, extending the network lifetime by more than 3x.

Requirements

  • Significant energy savings must be attained
  • Global (network-wide) synchronization must be permanently maintained (under normal operating conditions)
  • The radios must be turned off synchronously, with high enough precision as to lose few packets
  • Each node's voltage must be accessible to an operator through the regular channels
  • Applications must be easily adaptable
  • The system should not impact the expected application functioning

Architecture

The final version of TagusPM is implemented as an independent library, composed of 2 main modules:

  • TagusPmController, responsible for the system coordination, radio control, application notification, etc.
  • TagusPmMonitor, strictly for energy monitoring

There are also several accessory components:

  • RoundSync, which uses the global time reference to derive network-wide rounds
  • QueuedAMSender, for queuing AM messages
  • QueuedSender, for queueing other messages

Implementation

  • The system was implemented under the Tiny 2.1 experimental branch, the first 2.x version to include FTSP time synchronization support.
  • TagusPmController is implemented as a state machine with very simple transitions, considering its several features. You can see the state diagram below, with the stable regimen in blue, the control processes in green and the external calls in yellow. For more details please refer to the report (page bottom) or the source files.
  • The queues are optional to use, and provide the standard AMSend/Send interfaces, though (by design) 1they don't exactly respect the contract. We opted to use the same interfaces to minimize application adaptation costs, but be aware that send() accepts multiple pending messages (otherwise it wouldn't be very useful) and cancel() isn't implemented (it would be severely underperforming, and it's not really serious, as there is no guarantee it will work even on the standard stack).
  • The monitoring module reads the sensor voltage and sends it to the sink, where it will be displayed by our application.

Performance

In our tests we managed to reduce the average power to less than a third of the original (always on) one, extending the network lifetime by approximately the same factor. We used a duty cycle of 0.2 (on time 2 secs, off time 10 secs), which we believe presents a good balance between network capacity and energy usage. We also predicted the energy gains for other off times (keeping the previous on time):

Future work

  • Investigate dynamic, execution-time duty cycle definition, keeping in mind that this will probably involve some transactional semantics
  • Investigate the possibility of using different duty cycles (multiples of a basic one) for different nodes, based on their usage pattern
  • Test the developed library with other radio systems
  • Expand the monitoring component and the graphical interface to present other (not yet available) measurements
  • Study the interaction between TagusPM and the TinyOS LPL layer, though it probably won't present major gains

Application conversion

1. Include the required libs

CFLAGS += -I$(TOSDIR)/lib/net/ -I$(TOSDIR)/lib/net/ctp -I$(TOSDIR)/lib/net/4bitle

CFLAGS += -I$(TOSDIR)/lib/taguspm -I$(TOSDIR)/lib/taguspm/queues

CFLAGS += -I$(TOSDIR)/lib/taguspm/rounds -I$(TOSDIR)/lib/taguspm/monitor

CFLAGS += -I$(TOSDIR)/lib/ftsp

PFLAGS += -DTIMESYNC_RATE=10 -DTIMESYNC_SYSTIME

PFLAGS += -DTAGUSPM_MONITOR

2. Instantiate the component and point the application's radio SplitControl to TagusPmControllerC

App.AMControl -> TagusPmControllerC;

3. Activate the queue [optional]

Replace

new CollectionSenderC(<AM_ID>)

by

new CollectionSenderC(<AM_ID>) as CollectionSubSenderC

new QueuedSenderC(<AM_ID>, <QUEUE_SIZE>) as CollectionSenderC

CollectionSenderC.SubSend -> CollectionSubSenderC;

4. Remove calls to the TimeSyncC and CollectionC SplitControl interfaces, as they'll be managed by TagusPM

5. Configure the system using the TagusPm.h file

Files

Attach:taguspm-lib.zip (TagusPM library)

Attach:taguspm-wsn-report.pdf (end of project report)

Attach:taguspm-wsn-presentation.pdf (project presentation)

Attach:TestTPM.zip (test application)