19  WSN Energy Management

In 60 Seconds

Radio transmission dominates WSN energy budgets at 15-300 mW active versus 1-50 uW in sleep, making duty cycling essential: synchronous protocols (S-MAC) coordinate sleep schedules for collision avoidance, while asynchronous protocols (B-MAC) use low-power listening for flexibility. LEACH clustering rotates cluster-head roles to distribute energy drain, and the hotspot problem means nodes near the sink die first, requiring solar power or 3-5x extra battery capacity at relay positions.

Prerequisites: WSN Sensor Nodes

Part of: Wireless Sensor Networks series

This enables: WSN Common Mistakes

19.1 Learning Objectives

By the end of this chapter, you will be able to:

  • Quantify energy consumption profiles in wireless sensor nodes and identify the dominant power consumers across radio, sensing, and processing subsystems
  • Implement duty cycling techniques (synchronous, asynchronous, and hybrid) to extend network lifetime by 10-100x
  • Compare energy-efficient routing protocols such as LEACH and PEGASIS for multi-hop WSNs and evaluate their trade-offs
  • Diagnose and mitigate the hotspot problem that causes premature network failure in convergecast topologies
  • Calculate network lifetime metrics (First Node Death, Half Nodes Dead) for deployment planning using battery capacity and duty cycle parameters
  • Evaluate nature-inspired coordination (Boids rules) for distributed, energy-efficient network behavior
MVU: Minimum Viable Understanding

If you only have 5 minutes, here’s what you need to know about WSN Energy Management:

  1. Radio is the Energy Hog - Radio transmission/reception consumes 10-50 mW; idle listening (15 mA) is nearly as expensive as transmitting (20 mA)
  2. Duty Cycling = Battery Life - Reducing duty cycle from 100% to 1% extends lifetime by 10-100x (sleep mode uses 1 uW vs. 15 mW active)
  3. Hotspot Problem Kills Networks - Nodes near the gateway relay ALL traffic, depleting 50x faster than edge nodes
  4. Multiple Sinks Save Networks - Deploying 3 strategically placed gateways instead of 1 can extend lifetime from 3 months to 2+ years
  5. Simple Rules, Complex Behavior - Nature-inspired coordination (separation, alignment, cohesion) enables scalable self-organization

Bottom line: Energy management determines whether your WSN lasts weeks or years. Focus on aggressive duty cycling, avoiding hotspots through multiple sinks or energy-aware routing, and using hierarchical protocols like LEACH.

In Plain English

Energy management in WSN is like managing a family’s phone battery usage during a camping trip with no way to recharge. You can’t just use your phone whenever you want - you need to turn it off most of the time (duty cycling), share the navigation duties among family members so one person’s phone doesn’t die first (load balancing), and maybe bring a solar charger (energy harvesting).

Why it matters: A sensor node with a 2000 mAh battery will die in 5.5 days if its radio is always listening. With proper 1% duty cycling, the same battery lasts over a year. Energy management is the difference between a viable deployment and an expensive paperweight.

Hey there, future inventors! Let’s learn about energy management with the Sensor Squad!

Meet the Squad:

  • Sammy the Sensor - loves measuring temperature but gets sleepy
  • Lila the Lightbulb - knows when to turn off to save power
  • Max the Motor - only moves when really needed
  • Bella the Battery - keeps track of everyone’s energy

The Camping Trip Story:

The Sensor Squad is on a camping trip with only ONE battery pack to share for a whole week!

Day 1 - The Problem:

Sammy wants to check the temperature every second! But Bella warns: “If you stay awake all the time, we’ll run out of power by tomorrow!”

The Solution - Taking Naps (Duty Cycling):

  • Instead of checking every second, Sammy wakes up once per minute
  • For 59 seconds, Sammy sleeps (uses almost NO power!)
  • For 1 second, Sammy checks temperature and tells friends
  • Result: Battery lasts 60x longer!

Day 3 - The Relay Problem:

Max is closest to the campsite (the “gateway”). Every time Sammy or Lila want to send a message home, Max has to carry it!

  • Sammy sends 1 message/hour (about himself)
  • Lila sends 1 message/hour (about herself)
  • Max sends 1 message/hour (about himself) PLUS carries Sammy’s AND Lila’s messages = 3 messages/hour!

Max is exhausted! His battery drains 3x faster than everyone else’s.

The Fair Solution:

  • Set up TWO campsites so messages can go different ways
  • Now traffic is split, and no one gets exhausted!

Real-World Connection:

  • Your smartwatch uses duty cycling to last days on one charge
  • Wildlife trackers on animals sleep most of the time, waking only to report location
  • Smart home sensors report only when something changes (door opens, motion detected)

Fun Experiment: Notice how your phone’s battery drains faster when using data vs. airplane mode? That’s because the radio (like WSN radios) uses a lot of power!

Remember: The secret to long-lasting sensors is: Sleep a lot, wake up only when needed, and share the work fairly!


Imagine you have a small flashlight that you need to keep running for an entire year without changing the batteries. Sounds impossible, right? But that’s exactly what wireless sensor networks need to do! Sensors are often placed in remote locations (like forests, bridges, or underground pipes) where replacing batteries is expensive, difficult, or even dangerous.

The secret to making batteries last is surprisingly simple: sleep as much as possible. Think of it like turning off the lights when you leave a room. A sensor node’s radio (the part that sends and receives wireless messages) uses about the same amount of power whether it’s sending data or just sitting there listening for messages – like leaving your lights on 24/7 versus turning them on only when you need them. By “sleeping” 99% of the time and waking up only to take measurements and send data, the same battery that would last just 5 days can now last over a year!

The biggest challenge is something called the “hotspot problem.” Imagine a relay race where the runner closest to the finish line has to carry not just their own baton, but also the batons from all the runners behind them. That runner would get exhausted first! Similarly, sensors near the gateway (the central collection point) have to relay messages from all the sensors farther away, draining their batteries much faster. The solution? Use multiple gateways so no single sensor gets overwhelmed, or place solar panels on those busy “relay” sensors.


19.2 Energy Management

⏱️ ~15 min | ⭐⭐⭐ Advanced | 📋 P05.C25.U06

Key Concepts

  • Energy Budget: Total energy available (battery capacity in mAh) divided by required lifetime — sets per-operation energy limits
  • Radio Energy: Dominant consumption source — transmission costs 10-100 mW; 1 bit transmitted costs as much as 3,000 CPU instructions
  • Duty Cycling: Alternating sleep (µW) and active (mW) states to reduce average power consumption by 90-99%
  • Energy-Delay Trade-off: Sleeping saves energy but increases latency; optimal duty cycle balances both for the application
  • Residual Energy: Remaining battery capacity — used by routing protocols to avoid overloading nodes close to depletion
  • Energy Harvesting: Supplementing batteries with ambient energy (solar, vibration) to extend or eliminate battery replacement
  • Transmission Power Control: Adjusting radio output power to minimize energy while maintaining link quality — saves 50-80% over fixed maximum power

Energy is the most critical resource in battery-powered WSNs, fundamentally limiting network lifetime and capabilities. Effective energy management is essential for practical deployments.

19.2.1 Energy Consumption Profile

WSN energy consumption profile showing radio communication as the dominant power consumer compared to sensing, processing, and memory access

WSN Energy Consumption Profile

Radio Communication (Dominant Consumer):

  • Transmission: 10-50 mW typical
  • Reception: 10-40 mW (often comparable to transmission)
  • Idle listening: 1-20 mW (significant waste in low-traffic networks)

Sensing:

  • Simple sensors (temperature): < 1 mW
  • Complex sensors (camera, GPS): 10-100+ mW
  • Sensor activation and stabilization time

Processing:

  • Active computation: 1-10 mW
  • Sleep mode: 1-100 μW
  • Deep sleep: < 1 μW

Memory Access:

  • Flash write operations: High energy cost
  • RAM access: Relatively low cost

19.2.2 Energy Conservation Strategies

WSN energy conservation strategies overview: duty cycling, data reduction, topology control, and routing optimization techniques

WSN Energy Conservation Strategies

Duty Cycling: Alternating between active and sleep periods to reduce average power consumption.

Approaches:

  • Time-based: Fixed sleep/wake schedules
  • Event-driven: Wake on external interrupts (sensors, messages)
  • Demand-driven: Wake based on predicted activity or queries

Challenges:

  • Latency increase due to sleep periods
  • Synchronization for communication
  • Balancing energy savings vs. responsiveness

Data Reduction: Minimizing amount of data transmitted to reduce communication energy.

Techniques:

  • Local processing and filtering
  • Data compression
  • In-network aggregation
  • Adaptive sampling rates
  • Threshold-based reporting (only significant changes)

Topology Control: Managing network topology to optimize energy consumption.

Methods:

  • Transmission power adjustment
  • Reducing node degree (number of neighbors)
  • Clustering and hierarchy formation
  • Sleep scheduling coordination

Routing Optimization: Selecting energy-efficient paths for data delivery.

Strategies:

  • Minimum energy routing
  • Load balancing to avoid hotspots
  • Geographic routing to minimize hops
  • Multi-path routing for reliability

19.3 Distributed Coordination: Lessons from Nature

In 1986, computer scientist Craig Reynolds discovered something profound: complex swarm behavior—like flocking birds or schooling fish—emerges from just three simple local rules. No central controller, no global map, no leader. Each individual (“boid”) follows basic rules based only on nearby neighbors, yet the group achieves remarkable coordination.

This insight revolutionized distributed systems thinking and directly applies to WSN design: simple local rules → complex global behavior.

19.3.1 The Three Boids Rules

Diagram showing Reynolds' three boids rules for distributed coordination in WSN: Rule 1 Separation shows agents avoiding crowding by steering away from nearby neighbors, Rule 2 Alignment shows agents matching direction with neighbors to create coordinated movement, Rule 3 Cohesion shows agents steering toward the center of nearby neighbors to stay with the group. These three simple local rules enable complex emergent swarm behavior without central coordination.

Reynolds’ Three Boids Rules for Distributed Coordination
Figure 19.1: Reynolds’ three boids rules: separation (avoid crowding), alignment (match direction), and cohesion (stay with group)

19.3.2 WSN Applications of Boids Principles

Boids Rule Description WSN Application Benefit
Separation Avoid crowding neighbors Load balancing: Nodes avoid heavily-loaded paths
Interference avoidance: Nodes adjust transmission power to reduce overlap
Distributes energy consumption evenly, reduces packet collisions
Alignment Match direction of neighbors Consistent routing: Nodes follow neighbor gradient toward sink
Gradient-based protocols: Data flows in coordinated direction
Reduces routing loops, lowers latency
Cohesion Stay with the group Network connectivity: Nodes maintain links to neighbors
Clustering: Nodes group with nearby sensors
Prevents network fragmentation, improves reliability

19.3.3 Emergent Network Behavior

Diagram showing how boids rules create emergent network behaviors in WSN: Separation rule leads to optimal coverage where nodes spread across monitoring area avoiding redundant overlap, Alignment rule enables coordinated tracking where nodes pursue mobile targets like vehicles or wildlife in coordinated fashion, Cohesion rule maintains network connectivity by preventing fragmentation through neighbor link maintenance. The diagram illustrates the fundamental principle that simple local interactions produce complex global patterns in distributed systems.

Emergent Network Behaviors from Boids Rules
Figure 19.2: How boids rules create emergent behaviors: optimal coverage, coordinated tracking, and network connectivity
Key Insight: The Power of Emergent Behavior

No central controller needed! Each sensor node follows simple local rules based only on nearby neighbors, yet the network achieves global objectives:

  • Coverage: Separation spreads nodes across the monitoring area, avoiding redundant overlap
  • Tracking: Alignment coordinates pursuit of mobile targets (vehicles, wildlife) without centralized planning
  • Connectivity: Cohesion prevents network fragmentation by maintaining neighbor links

This is the fundamental principle of emergent behavior in distributed systems: simple local interactions produce complex global patterns.

Why This Matters for WSN:

  • Scalability: Works with 10 nodes or 10,000 nodes (no central bottleneck)
  • Robustness: Network adapts to node failures automatically
  • Energy efficiency: No expensive global coordination messages
  • Self-organization: Network reconfigures as topology changes

Real-World Example: The PEGASIS (Power-Efficient GAthering in Sensor Information Systems) protocol uses alignment principles—nodes self-organize into a chain structure based only on neighbor distances, achieving optimal energy distribution without centralized planning.

Energy Harvesting: Supplementing battery power with ambient energy sources.

Sources:

  • Solar (outdoor deployments)
  • Vibration (machinery, bridges)
  • Thermal (temperature gradients)
  • RF energy harvesting
  • Wind or water flow

Challenges:

  • Intermittent availability
  • Energy storage requirements
  • Harvester efficiency
  • Cost and size constraints

Solar Harvesting Feasibility for Indoor WSN: A commercial building has fluorescent lighting providing 400 lux at desk level (typical office lighting). A solar cell’s efficiency under artificial light is much lower than under sunlight. With a 50mm×50mm solar panel:

Sunlight (100,000 lux) yields: \(P_{sun} = 2.5 \text{ cm}^2 \times 100 \text{ mW/cm}^2 = 250 \text{ mW}\)

Indoor light (400 lux = 0.4% of sunlight): \(P_{indoor} = 250 \text{ mW} \times 0.004 = 1 \text{ mW}\)

Sensor node average consumption: 5 mW (with 1% duty cycle). Indoor solar harvesting provides only 20% of needed power, requiring a battery to cover 80% of energy demand. This explains why indoor IoT devices rarely use solar — vibration or RF harvesting is more practical.

Mesh Networks Aren’t Always the Answer

Developers often default to mesh topologies assuming “more paths = better reliability,” but mesh networks introduce significant energy and complexity costs. Each node must maintain routing tables, handle relayed traffic from neighbors (consuming energy), and suffer from the broadcast storm problem where route discovery floods propagate through the network. For many applications, simpler star or tree topologies with strategic gateway placement provide 90% of mesh benefits at 10% of the energy cost and complexity. Use mesh only when deployment area genuinely requires multi-hop communication beyond gateway range, or when mobility and dynamic topology changes are frequent. Consider hybrid approaches: mesh backbone with star clusters, providing scalability without universal mesh overhead.

Common Misconception: “The Hotspot Problem Will Solve Itself”

Myth: “If I deploy enough sensor nodes with redundant paths, the network will automatically balance energy consumption and nodes will all die around the same time.”

Reality: In multi-hop WSNs, nodes near the sink (gateway) become unavoidable “hotspots” that relay traffic from ALL downstream nodes, causing them to drain batteries 5-100× faster than edge nodes:

  • Edge node (far from gateway): Transmits only its own data (1 packet/minute → 2-year lifetime)
  • Hotspot node (near gateway): Relays own data + forwards 10-50 other nodes (50 packets/minute → 2-month lifetime)
  • Network failure: When hotspot nodes die, entire network partitions despite edge nodes having 95%+ battery

Real Example: Agricultural WSN with 100 sensors. Nodes closest to gateway died after 4 months, disconnecting 60 downstream sensors. Farmer lost $15,000 in crop yield due to undetected irrigation failure.

Solutions:

  1. Multiple sinks: Deploy 3 strategically placed gateways to distribute relay load (3-month → 2-year lifetime)
  2. Solar cluster heads: Use mains/solar-powered relay nodes in hotspot zones
  3. Energy-aware routing: Route traffic around low-battery nodes (LEACH protocol)
  4. Battery monitoring: Track battery levels remotely for predictive replacement

Learn More: See Hotspot Problem Details in Common Mistakes section and Network Lifetime Metrics below.

19.3.4 Network Lifetime Metrics

First Node Death (FND): Time until first node exhausts energy. Critical for applications requiring full coverage.

Half Nodes Dead (HND): Time until 50% of nodes depleted. Indicates significant degradation.

Last Node Death (LND): Complete network cessation. Less relevant for redundant deployments.

Network Coverage Lifetime: Duration maintaining required coverage and connectivity, accounting for node failures.

LEACH Cluster Head Rotation Impact on Network Lifetime: Consider a 100-node WSN where cluster heads consume 5× more energy than regular nodes (50 mA vs 10 mA average). With static cluster heads (5 CHs always the same nodes):

FND for cluster heads: \(\frac{2000 \text{ mAh}}{50 \text{ mA}} = 40 \text{ hours}\)

FND for regular nodes: \(\frac{2000 \text{ mAh}}{10 \text{ mA}} = 200 \text{ hours}\)

Network fails after 40 hours when all cluster heads die, despite 95% of nodes having 80% battery remaining.

With LEACH rotation (each node is CH for 5% of rounds):

Average current per node: \(0.05 \times 50 \text{ mA} + 0.95 \times 10 \text{ mA} = 12 \text{ mA}\)

FND: \(\frac{2000 \text{ mAh}}{12 \text{ mA}} = 167 \text{ hours}\)

Lifetime increases from 40 to 167 hours (4.2× improvement) by fairly distributing the energy burden across all nodes. This demonstrates why role rotation is fundamental to hierarchical WSN protocols.

Adjust parameters to see how cluster head rotation impacts network lifetime.

19.3.5 Energy-Aware Protocols

LEACH (Low-Energy Adaptive Clustering Hierarchy) protocol overview showing distributed cluster formation: sensor nodes self-organize into clusters, each cluster elects a cluster head that aggregates data from member nodes and transmits to the base station, reducing overall network energy consumption by minimizing long-range transmissions
Figure 19.3: LEACH (Low-Energy Adaptive Clustering Hierarchy) protocol overview - distributed cluster-based routing
LEACH protocol operation detail: cluster heads perform data aggregation by combining readings from multiple member nodes into a single compressed message before forwarding to base station, showing intra-cluster communication using short-range links and cluster-head-to-base communication using longer-range transmission
Figure 19.4: LEACH protocol operation showing cluster head selection and data aggregation
LEACH protocol round structure: each round consists of a setup phase (cluster head election using randomized rotation to balance energy consumption) followed by a longer steady-state phase (TDMA-scheduled data transmission from members to cluster head, then aggregated data to base station), with new cluster heads elected each round to prevent early node depletion
Figure 19.5: LEACH protocol rounds showing setup phase and steady-state data transmission phases
Multi-hop routing path in WSN: data packets traverse from a source sensor node through multiple intermediate relay nodes to reach the sink/base station, with each hop covering shorter distances to reduce transmission power while maintaining network connectivity across large deployment areas
Figure 19.6: Multi-hop routing path in WSN showing data forwarding from source to sink through intermediate nodes

MAC Protocols: Coordinating medium access to minimize idle listening and collisions.

Examples:

  • S-MAC (Sensor-MAC): Coordinated sleep schedules
  • B-MAC (Berkeley MAC): Low-power listening with preambles
  • RI-MAC: Receiver-initiated communication
  • IEEE 802.15.4: CSMA/CA with optional beacon mode

Routing Protocols: Energy-aware path selection and load distribution.

Examples:

  • LEACH (Low-Energy Adaptive Clustering Hierarchy): Randomized cluster head rotation
  • PEGASIS (Power-Efficient GAthering in Sensor Information Systems): Chain-based routing
  • TEEN (Threshold sensitive Energy Efficient sensor Network): Event-driven reporting
  • Geographic routing: Position-based forwarding

19.3.6 Hands-On: LEACH Protocol Simulation

The LEACH protocol’s cluster-head rotation is a cornerstone of energy-efficient WSN design. This Python simulation lets you see exactly how rotating the cluster-head role extends network lifetime compared to direct transmission (no clustering) and static clustering (fixed cluster heads).

# --- LEACH Protocol Simulation ---
# Demonstrates: cluster head election, energy model, network lifetime comparison

import random
import math

class SensorNode:
    """A wireless sensor node with energy tracking."""

    def __init__(self, node_id, x, y, initial_energy=0.5):
        self.id = node_id
        self.x = x
        self.y = y
        self.energy = initial_energy  # Joules (0.5J typical for AA battery model)
        self.is_cluster_head = False
        self.cluster_head = None  # Which CH this node reports to
        self.alive = True

    def distance_to(self, other_x, other_y):
        return math.sqrt((self.x - other_x)**2 + (self.y - other_y)**2)


class LEACHSimulator:
    """Simulate LEACH protocol for WSN energy analysis."""

    # Energy model parameters (based on Heinzelman et al.)
    E_ELEC = 50e-9       # Energy for radio electronics (50 nJ/bit)
    E_FS = 10e-12        # Free-space path loss (10 pJ/bit/m^2)
    E_MP = 0.0013e-12    # Multipath fading (0.0013 pJ/bit/m^4)
    E_DA = 5e-9          # Data aggregation energy (5 nJ/bit/signal)
    CROSSOVER_DIST = 87  # Distance threshold for path loss model (meters)
    PACKET_BITS = 4000   # 500-byte packet

    def __init__(self, num_nodes=100, area_size=100, sink_x=50, sink_y=175):
        self.sink_x = sink_x
        self.sink_y = sink_y
        random.seed(42)
        self.nodes = [
            SensorNode(i, random.uniform(0, area_size),
                       random.uniform(0, area_size))
            for i in range(num_nodes)
        ]

    def tx_energy(self, bits, distance):
        """Calculate transmission energy based on distance."""
        if distance < self.CROSSOVER_DIST:
            return bits * self.E_ELEC + bits * self.E_FS * distance**2
        else:
            return bits * self.E_ELEC + bits * self.E_MP * distance**4

    def rx_energy(self, bits):
        """Calculate reception energy."""
        return bits * self.E_ELEC

    def elect_cluster_heads(self, round_num, p=0.05):
        """
        LEACH cluster head election using probabilistic threshold.
        Each node decides independently with probability p_threshold.
        p = desired percentage of cluster heads (typically 5%).
        """
        cluster_heads = []
        for node in self.nodes:
            if not node.alive:
                continue
            # LEACH threshold formula: T(n) = p / (1 - p * (r mod (1/p)))
            r_mod = round_num % int(1 / p)
            if r_mod == 0:
                threshold = p
            else:
                threshold = p / (1 - p * r_mod)

            if random.random() < threshold:
                node.is_cluster_head = True
                cluster_heads.append(node)
            else:
                node.is_cluster_head = False
                node.cluster_head = None

        return cluster_heads

    def assign_clusters(self, cluster_heads):
        """Assign each non-CH node to nearest cluster head."""
        for node in self.nodes:
            if not node.alive or node.is_cluster_head:
                continue
            min_dist = float('inf')
            for ch in cluster_heads:
                d = node.distance_to(ch.x, ch.y)
                if d < min_dist:
                    min_dist = d
                    node.cluster_head = ch

    def simulate_round_leach(self, round_num):
        """Simulate one LEACH round: elect CH, assign clusters, transmit."""
        # Phase 1: Cluster head election
        chs = self.elect_cluster_heads(round_num)
        if not chs:
            # Fallback: pick a random alive node
            alive = [n for n in self.nodes if n.alive]
            if alive:
                ch = random.choice(alive)
                ch.is_cluster_head = True
                chs = [ch]

        # Phase 2: Cluster assignment
        self.assign_clusters(chs)

        # Phase 3: Data transmission
        for node in self.nodes:
            if not node.alive or node.is_cluster_head:
                continue

            if node.cluster_head:
                d = node.distance_to(node.cluster_head.x, node.cluster_head.y)
                # Member -> CH (short range)
                node.energy -= self.tx_energy(self.PACKET_BITS, d)
                # CH receives from member
                node.cluster_head.energy -= self.rx_energy(self.PACKET_BITS)

            if node.energy <= 0:
                node.alive = False

        # CH aggregates and sends to sink (long range)
        for ch in chs:
            if not ch.alive:
                continue
            d_sink = ch.distance_to(self.sink_x, self.sink_y)
            # Aggregation energy
            ch.energy -= self.E_DA * self.PACKET_BITS
            # TX to sink
            ch.energy -= self.tx_energy(self.PACKET_BITS, d_sink)

            if ch.energy <= 0:
                ch.alive = False

    def simulate_round_direct(self):
        """Simulate direct transmission (no clustering) for comparison."""
        for node in self.nodes:
            if not node.alive:
                continue
            d = node.distance_to(self.sink_x, self.sink_y)
            node.energy -= self.tx_energy(self.PACKET_BITS, d)
            if node.energy <= 0:
                node.alive = False

    def alive_count(self):
        return sum(1 for n in self.nodes if n.alive)

    def reset(self, initial_energy=0.5):
        for n in self.nodes:
            n.energy = initial_energy
            n.alive = True
            n.is_cluster_head = False
            n.cluster_head = None


# --- Run comparison ---
print("=== LEACH vs Direct Transmission: Network Lifetime ===\n")
print("Setup: 100 nodes, 100x100m area, sink at (50, 175)\n")

sim = LEACHSimulator(num_nodes=100, area_size=100)

# Simulate LEACH
sim.reset()
leach_fnd = None  # First Node Death
leach_hnd = None  # Half Nodes Dead
for r in range(2000):
    sim.simulate_round_leach(r)
    alive = sim.alive_count()
    if leach_fnd is None and alive < 100:
        leach_fnd = r
    if leach_hnd is None and alive <= 50:
        leach_hnd = r
        break

# Simulate Direct Transmission
sim.reset()
direct_fnd = None
direct_hnd = None
for r in range(2000):
    sim.simulate_round_direct()
    alive = sim.alive_count()
    if direct_fnd is None and alive < 100:
        direct_fnd = r
    if direct_hnd is None and alive <= 50:
        direct_hnd = r
        break

# Results
print(f"{'Metric':<30} {'Direct TX':>12} {'LEACH':>12} {'Improvement':>12}")
print("-" * 70)
print(f"{'First Node Death (FND)':<30} {'round '+str(direct_fnd):>12} "
      f"{'round '+str(leach_fnd):>12} "
      f"{leach_fnd/direct_fnd:.1f}x" if direct_fnd and leach_fnd else "")
print(f"{'Half Nodes Dead (HND)':<30} {'round '+str(direct_hnd):>12} "
      f"{'round '+str(leach_hnd):>12} "
      f"{leach_hnd/direct_hnd:.1f}x" if direct_hnd and leach_hnd else "")

print(f"\nWhy LEACH wins:")
print(f"  - Direct TX: every node transmits long-range to sink (high energy)")
print(f"  - LEACH: members transmit short-range to CH (low energy)")
print(f"  - CH aggregates data, reducing long-range transmissions by ~95%")
print(f"  - Rotating CH role prevents any single node from draining first")

What to observe: LEACH typically extends the First Node Death (FND) metric by 2-5x compared to direct transmission. The key insight is that short-range intra-cluster communication (member to cluster head) is much cheaper than long-range direct-to-sink transmission, because radio energy scales with distance squared (or to the fourth power for multipath). Cluster head rotation ensures this energy-intensive role is distributed fairly across all nodes, preventing the premature death of a single overworked node.

19.4 Radio Duty Cycling

⏱️ ~12 min | ⭐⭐⭐ Advanced | 📋 P05.C25.U07

Radio duty cycling is one of the most effective energy conservation techniques in WSNs, reducing the time transceivers spend in energy-consuming states.

19.4.1 Duty Cycling Fundamentals

Duty Cycle Definition: The fraction of time a node’s radio is active (transmitting, receiving, or listening).

\[\text{Duty Cycle} = \frac{\text{Active Time}}{\text{Total Time}}\]

Example: A node awake 10ms every 100ms has a 10% duty cycle.

Impact: Reducing duty cycle from 100% to 1% can extend battery lifetime by 10-100x, depending on the relative power consumption of radio vs. other components.

19.4.2 Duty Cycling Approaches

Duty cycling approaches comparison: synchronous with coordinated schedules, asynchronous with independent operation, and hybrid combining both

Duty Cycling Approaches
Approach Synchronization Latency Energy Efficiency Best For
Synchronous Required (clock drift handling) Low (predictable) Good (coordinated sleep) Scheduled data collection
Asynchronous Not required Variable (preamble wait) Good (no sync overhead) Mobile, heterogeneous networks
Hybrid Local only Medium Excellent Large-scale deployments

Synchronous Duty Cycling: Nodes coordinate wake/sleep schedules to ensure communication opportunities.

Characteristics:

  • Nodes wake up simultaneously
  • Requires clock synchronization
  • Lower latency for multi-hop communication
  • Examples: S-MAC, T-MAC
S-MAC (Sensor-MAC) synchronous duty cycling protocol: timeline showing coordinated wake and sleep periods across multiple nodes, with synchronized listen windows where nodes exchange data and RTS/CTS handshakes, followed by extended sleep periods to conserve energy while maintaining network communication capability
Figure 19.7: S-MAC protocol - synchronous duty cycling with coordinated sleep schedules for WSN energy conservation
Preamble sampling asynchronous duty cycling: sender transmits a long preamble (longer than receiver sleep interval) until the target receiver wakes up during its periodic channel check, detects the preamble, and remains awake to receive the actual data packet that follows
Figure 19.8: Preamble sampling mechanism for asynchronous duty cycling - sender transmits long preamble until receiver wakes

Advantages:

  • Predictable communication windows
  • Efficient for scheduled traffic
  • Coordinated network operation

Challenges:

  • Synchronization overhead and drift
  • Global schedule may not suit all nodes
  • Less flexibility for event-driven traffic

Asynchronous Duty Cycling: Nodes operate on independent schedules without global synchronization.

Characteristics:

  • No synchronization required
  • Senders must account for receiver schedules
  • Examples: B-MAC, X-MAC, RI-MAC
X-MAC improved asynchronous duty cycling: sender transmits short preamble packets containing target address, receiver wakes during periodic check, immediately sends early acknowledgment upon hearing its address, allowing sender to transmit data without waiting for full preamble duration - significantly reducing sender energy compared to basic preamble sampling
Figure 19.9: X-MAC protocol - asynchronous duty cycling with short preambles and early acknowledgment for energy efficiency

Mechanisms:

  • Preamble sampling: Sender transmits long preamble until receiver wakes
  • Wake-up beacons: Receivers announce availability
  • Receiver-initiated: Receivers poll for pending messages

Advantages:

  • No synchronization overhead
  • Flexible and adaptive
  • Supports mobile and heterogeneous networks

Challenges:

  • Potential latency increase
  • Energy cost of preambles or polling
  • Variable message delivery time

Hybrid Approaches: Combining synchronous and asynchronous techniques.

Examples:

  • Local synchronization within clusters, asynchronous between clusters
  • Schedule-based for regular traffic, on-demand for events
  • Adaptive switching based on traffic patterns

19.4.3 Advanced Duty Cycling Techniques

Adaptive Duty Cycling: Dynamically adjusting duty cycle based on conditions.

Parameters:

  • Traffic load (increase cycle during high activity)
  • Residual energy (reduce cycle when battery low)
  • Time of day (circadian patterns in environmental monitoring)
  • Event detection (increase sampling rate during events)

Predictive Duty Cycling: Using historical data and prediction models to optimize schedules.

Approaches:

  • Machine learning to predict traffic patterns
  • Correlation-based sensing (sensors with correlated readings coordinate)
  • Event prediction to pre-activate relevant nodes

Hierarchical Duty Cycling: Different duty cycles for different node roles.

Structure:

  • Cluster heads: Higher duty cycle for availability
  • Regular nodes: Lower duty cycle for energy conservation
  • Gateway nodes: Always-on or high duty cycle

Wake-on-Radio: Special low-power radio listens continuously, waking main radio when messages arrive.

Characteristics:

  • Main radio sleeps indefinitely
  • Wake-up radio consumes micro-watts
  • Triggered wake-up for main radio
  • Ultra-low average power consumption

Technologies:

  • Dedicated wake-up receivers
  • Ultra-low-power always-on circuits
  • RF energy harvesting for wake-up

Advanced duty cycling techniques: adaptive cycling based on conditions, predictive scheduling, hierarchical roles, and wake-on-radio with low-power receivers

Advanced Duty Cycling Techniques

19.4.4 Performance Trade-offs

Energy vs. Latency: Lower duty cycles save energy but increase message delivery latency.

Mitigation:

  • Multi-hop forwarding during wake periods
  • Predictive wake-up for urgent messages
  • Adaptive cycles based on message priority

Energy vs. Reliability: Sleeping nodes may miss messages or events.

Solutions:

  • Redundant sensing coverage
  • Message retransmission mechanisms
  • Acknowledgment-based reliability
  • Wake-up on event detection

Energy vs. Throughput: Limited active time constrains data transmission capacity.

Balancing:

  • Efficient data aggregation and compression
  • Adaptive duty cycle during high-traffic periods
  • Buffering and batch transmission
  • Priority-based scheduling

WSN duty cycling performance trade-offs: energy versus latency, energy versus reliability, and energy versus throughput with mitigation strategies

WSN Performance Trade-offs


19.5 Worked Example: Agricultural WSN Energy Planning

Real-World Scenario

Context: You’re designing a soil moisture monitoring system for a 10-hectare vineyard. The farmer wants sensors that last at least 2 growing seasons (18 months) without battery replacement.

Requirements:

  • 50 sensor nodes across the vineyard
  • Soil moisture readings every 15 minutes
  • Single gateway at the farm building
  • Budget: AA batteries (2x 2500 mAh)

19.5.1 Step 1: Baseline Energy Budget

WSN energy budget calculation for agricultural vineyard deployment showing baseline power consumption by component

WSN Energy Budget Calculation

19.5.2 Step 2: Calculate Without Duty Cycling (Failure Case)

Activity Duration Current Energy/Hour
Radio idle listening 3600s 15 mA 15,000 µAh
MCU idle 3600s 5 mA 5,000 µAh
Total 20,000 µAh = 20 mAh

Result: 5000 mAh / 20 mA = 250 hours = 10 days (FAILURE!)

19.5.3 Step 3: Apply Duty Cycling (Success Case)

Activity Frequency Duration Current Energy/Hour
Wake up 4/hour 2s each 5 mA (MCU) 11.1 µAh
Sense 4/hour 0.1s each 15 mA 1.7 µAh
Transmit 4/hour 0.5s each 25 mA 13.9 µAh
Listen for ACK 4/hour 0.2s each 15 mA 3.3 µAh
Sleep ~3589s/hour - 6 µA 6 µAh
Total 36 µAh/hour

Result: 5000 mAh / 0.036 mA = 138,889 hours = 15.8 years (SUCCESS!)

19.5.4 Step 4: Account for Real-World Factors

Factor Impact Adjusted Lifetime
Battery self-discharge (~3%/year) -5% 15 years
Temperature extremes -20% 12 years
Message retries (10% failure rate) -15% 10 years
Realistic estimate 8-10 years

Even with conservative estimates, we exceed the 18-month requirement by 5x!

Don’t Forget the Hotspot Problem!

Our 50-node vineyard has a critical issue: nodes closest to the gateway relay traffic for distant nodes.

Edge nodes: Transmit 4× per hour (own data only) Near-gateway nodes: Transmit 4× + relay ~40× per hour from downstream nodes

Solution applied: Deploy 3 gateways instead of 1, reducing relay burden by 66%.


19.6 Hands-On: Energy Management Code

The energy budgets and duty cycling concepts above become much clearer when you implement them in code. The MicroPython examples below run directly on an ESP32 and demonstrate the dramatic difference between always-on and duty-cycled operation.

19.6.1 ESP32 Deep Sleep with Wake-on-Timer (MicroPython)

This is the most important energy-saving technique for battery-powered IoT nodes. The ESP32 drops from ~50 mA active to ~10 uA in deep sleep – a 5000x reduction.

# --- ESP32 Deep Sleep Duty Cycling (MicroPython) ---
# Upload to ESP32 via Thonny or mpremote
# Demonstrates: deep sleep, wake-on-timer, power measurement

import machine
import esp32
import time

# Configuration
SLEEP_DURATION_SEC = 60     # Sleep for 60 seconds between readings
SENSOR_PIN = 34             # ADC pin for soil moisture sensor
LED_PIN = 2                 # Built-in LED for visual feedback

def read_sensor():
    """Read soil moisture sensor (ADC value 0-4095)."""
    adc = machine.ADC(machine.Pin(SENSOR_PIN))
    adc.atten(machine.ADC.ATTN_11DB)  # Full 0-3.3V range
    # Average 10 readings for stability
    total = 0
    for _ in range(10):
        total += adc.read()
        time.sleep_ms(10)
    return total // 10

def send_reading(value):
    """Simulate sending data (replace with actual MQTT/LoRa code)."""
    print(f"Sending sensor value: {value}")
    # In production: mqtt.publish("farm/soil/moisture", str(value))
    time.sleep_ms(200)  # Simulate transmission time

def blink_led(count=2):
    """Quick blink to show the node is awake."""
    led = machine.Pin(LED_PIN, machine.Pin.OUT)
    for _ in range(count):
        led.on()
        time.sleep_ms(50)
        led.off()
        time.sleep_ms(50)

# --- Main execution (runs on every wake-up) ---
print(f"\n=== WSN Node Awake (wake reason: {machine.wake_reason()}) ===")
wake_time_start = time.ticks_ms()

# Step 1: Blink LED to indicate activity
blink_led(2)

# Step 2: Read sensor
moisture = read_sensor()
print(f"Soil moisture: {moisture} (0=dry, 4095=wet)")

# Step 3: Threshold-based reporting (save energy by not sending boring data)
THRESHOLD_DRY = 1500
THRESHOLD_WET = 3500
if moisture < THRESHOLD_DRY:
    print("ALERT: Soil is too dry! Sending alert...")
    send_reading(moisture)
elif moisture > THRESHOLD_WET:
    print("ALERT: Soil is too wet! Sending alert...")
    send_reading(moisture)
else:
    print("Normal range. Skipping transmission to save energy.")

# Step 4: Calculate active time
wake_duration_ms = time.ticks_diff(time.ticks_ms(), wake_time_start)
print(f"Active time: {wake_duration_ms} ms")

# Step 5: Calculate duty cycle and battery life
active_fraction = wake_duration_ms / (SLEEP_DURATION_SEC * 1000)
avg_current_ma = (active_fraction * 50) + ((1 - active_fraction) * 0.01)
battery_mah = 2500  # Typical AA batteries (2x in series)
lifetime_hours = battery_mah / avg_current_ma
lifetime_days = lifetime_hours / 24

print(f"\n--- Energy Budget ---")
print(f"Duty cycle: {active_fraction*100:.3f}%")
print(f"Avg current: {avg_current_ma:.3f} mA")
print(f"Estimated battery life: {lifetime_days:.0f} days ({lifetime_days/365:.1f} years)")
print(f"Without deep sleep: {battery_mah/50:.0f} hours ({battery_mah/50/24:.1f} days)")

# Step 6: Enter deep sleep
print(f"\nSleeping for {SLEEP_DURATION_SEC} seconds...")
machine.deepsleep(SLEEP_DURATION_SEC * 1000)  # Argument in milliseconds
# Code execution stops here until next wake-up

What to observe: The script calculates its own duty cycle and battery life estimate on every wake-up. With a 60-second sleep and ~300 ms active time, the duty cycle is roughly 0.5%, extending 2500 mAh batteries from 2 days (always-on) to over 6 years. The threshold-based reporting further saves energy by skipping transmissions when readings are in the normal range – this is the “data reduction” strategy from the Energy Conservation section above.

19.6.2 Battery Life Estimator Function

Use this standalone function to quickly calculate battery life for any WSN node configuration.

def estimate_battery_life(
    battery_mah,
    active_current_ma,
    sleep_current_ua,
    active_duration_ms,
    sleep_duration_sec,
    self_discharge_pct_year=3.0,
    tx_current_ma=None,
    tx_duration_ms=0
):
    """
    Estimate WSN node battery life with real-world factors.

    Args:
        battery_mah:          Battery capacity (e.g., 2500 for 2xAA)
        active_current_ma:    MCU active current (e.g., 50 mA for ESP32)
        sleep_current_ua:     Deep sleep current (e.g., 10 uA for ESP32)
        active_duration_ms:   Time spent awake per cycle (sensing + processing)
        sleep_duration_sec:   Sleep time between cycles
        self_discharge_pct_year: Battery self-discharge rate
        tx_current_ma:        Radio transmit current (if separate from active)
        tx_duration_ms:       Radio transmit time per cycle

    Returns:
        Dictionary with duty cycle, average current, and lifetime estimates
    """
    cycle_total_ms = active_duration_ms + (sleep_duration_sec * 1000) + tx_duration_ms
    duty_cycle = active_duration_ms / cycle_total_ms

    # Calculate average current
    active_charge = active_current_ma * (active_duration_ms / 3600000)  # mAh
    sleep_charge = (sleep_current_ua / 1000) * (sleep_duration_sec / 3600)  # mAh
    tx_charge = 0
    if tx_current_ma:
        tx_charge = tx_current_ma * (tx_duration_ms / 3600000)  # mAh

    charge_per_cycle = active_charge + sleep_charge + tx_charge
    cycles_per_hour = 3600000 / cycle_total_ms
    avg_current_ma = charge_per_cycle * cycles_per_hour

    # Ideal lifetime
    ideal_hours = battery_mah / avg_current_ma
    ideal_days = ideal_hours / 24

    # Apply real-world derating factors
    usable_capacity = battery_mah * 0.80  # 80% depth of discharge
    yearly_loss = self_discharge_pct_year / 100
    realistic_hours = usable_capacity / avg_current_ma
    realistic_days = realistic_hours / 24

    # Temperature derating (assume 20% capacity loss in cold)
    cold_days = realistic_days * 0.80

    return {
        "duty_cycle_pct": duty_cycle * 100,
        "avg_current_ma": avg_current_ma,
        "ideal_lifetime_days": ideal_days,
        "realistic_lifetime_days": realistic_days,
        "cold_weather_days": cold_days,
        "always_on_days": battery_mah / active_current_ma / 24,
    }

# --- Example: Compare three WSN configurations ---
print("=== WSN Battery Life Calculator ===\n")

configs = [
    ("Always-on (no sleep)", dict(
        battery_mah=2500, active_current_ma=50, sleep_current_ua=50000,
        active_duration_ms=1000, sleep_duration_sec=0)),
    ("15-min duty cycle", dict(
        battery_mah=2500, active_current_ma=50, sleep_current_ua=10,
        active_duration_ms=500, sleep_duration_sec=900)),
    ("15-min + threshold reporting", dict(
        battery_mah=2500, active_current_ma=50, sleep_current_ua=10,
        active_duration_ms=200, sleep_duration_sec=900,
        tx_current_ma=120, tx_duration_ms=50)),  # Only transmit 10% of cycles
]

for name, params in configs:
    result = estimate_battery_life(**params)
    print(f"{name}:")
    print(f"  Duty cycle:       {result['duty_cycle_pct']:.3f}%")
    print(f"  Avg current:      {result['avg_current_ma']:.4f} mA")
    print(f"  Ideal lifetime:   {result['ideal_lifetime_days']:.0f} days")
    print(f"  Realistic (80%):  {result['realistic_lifetime_days']:.0f} days")
    print(f"  Cold weather:     {result['cold_weather_days']:.0f} days")
    print()

What to observe: The always-on configuration lasts about 2 days. A 15-minute duty cycle extends this to years. Adding threshold-based reporting (only transmitting when values change significantly) extends it even further by reducing the energy-expensive radio transmissions. This directly demonstrates the “10-100x battery life extension” claim from the Duty Cycling section above, with real numbers you can verify.

19.6.3 TDMA Slot Scheduling for Collision-Free Communication

In multi-node WSNs, nodes must coordinate their wake-up times to avoid collisions. This simple TDMA (Time Division Multiple Access) scheduler assigns each node a unique time slot.

# --- Simple TDMA Slot Scheduler for WSN ---

import time

def tdma_schedule(node_id, total_nodes, slot_duration_ms, frame_period_sec):
    """
    Calculate TDMA slot timing for a WSN node.

    In a TDMA frame of N slots, each node transmits in its assigned slot
    and sleeps during all other slots. This eliminates collisions and
    allows nodes to sleep predictably.

    Args:
        node_id:          This node's ID (0 to total_nodes-1)
        total_nodes:      Total nodes in the cluster
        slot_duration_ms: Duration of each TX slot (e.g., 100 ms)
        frame_period_sec: Time between frames (e.g., 60 sec)
    """
    # Calculate this node's transmit window within each frame
    slot_start_ms = node_id * slot_duration_ms
    slot_end_ms = slot_start_ms + slot_duration_ms
    frame_duration_ms = total_nodes * slot_duration_ms
    sleep_ms = (frame_period_sec * 1000) - frame_duration_ms

    print(f"=== TDMA Schedule for Node {node_id}/{total_nodes-1} ===")
    print(f"Frame period:   {frame_period_sec}s")
    print(f"TX slot:        {slot_start_ms}-{slot_end_ms} ms into each frame")
    print(f"Active time:    {slot_duration_ms} ms per frame")
    print(f"Sleep time:     {sleep_ms} ms per frame")
    print(f"Duty cycle:     {slot_duration_ms/(frame_period_sec*1000)*100:.3f}%")

    # Simulate 3 TDMA frames
    print(f"\nSimulating 3 frames:")
    for frame in range(3):
        # Sleep until our slot
        print(f"  Frame {frame}: sleeping {slot_start_ms}ms...", end="")
        time.sleep(slot_start_ms / 1000)

        # Transmit in our slot
        print(f" TX in slot {node_id}...", end="")
        time.sleep(slot_duration_ms / 1000)

        # Sleep until next frame
        remaining = frame_period_sec - (slot_end_ms / 1000)
        print(f" sleeping {remaining:.1f}s until next frame")
        time.sleep(min(remaining, 1.0))  # Cap sleep for demo

# Example: 10-node cluster, 100ms slots, 60-second frames
tdma_schedule(node_id=3, total_nodes=10, slot_duration_ms=100, frame_period_sec=60)

What to observe: Each node is active for only 100 ms out of every 60 seconds (0.17% duty cycle). Because slots do not overlap, there are zero collisions – unlike the contention-based approaches (CSMA/CA) where nodes must listen for ongoing transmissions and back off on collision. The trade-off is that TDMA requires time synchronization between nodes, which is the key challenge described in the Synchronous Duty Cycling section.

19.7 Production Framework: Complete WSN Management Platform

⏱️ ~10 min | ⭐⭐⭐ Advanced | 📋 P05.C25.U08

Below is a comprehensive Python framework for deploying and managing wireless sensor networks with node simulation, routing protocols, energy optimization, and network analytics.


Common Pitfalls

Average current calculation ignores burst transmissions — a node averaging 100 µA may draw 30 mA during transmissions, and if coin cell internal resistance is high, voltage sag during bursts causes premature brownout resets. Always measure peak current and verify voltage stays above minimum at the worst-case load.

RF optimization efforts focus on radio (dominant source) but ignore sensor power — a continuous soil moisture sensor drawing 3 mA consumes more than the radio in many duty-cycled designs. Characterize every subsystem’s power consumption before optimizing; the highest consumer is not always the radio.

For 5-year battery life targets, quiescent leakage of voltage regulators (1-100 µA) becomes significant — a 100 µA leakage on a 2,500 mAh battery limits life to 2.85 years regardless of how well you optimize the active duty cycle. Select ultra-low-quiescent regulators (<1 µA) for multi-year deployments.

19.8 Summary: Key Takeaways

19.8.1 Energy Management Framework

WSN energy management framework summarizing key strategies: duty cycling, hotspot mitigation, data aggregation, and protocol selection

WSN Energy Management Framework

19.8.2 Core Concepts

Concept Key Insight Impact
Duty Cycling Sleep 99% of time, wake only when needed 10-100x battery life extension
Hotspot Problem Nodes near gateway relay ALL traffic 50x faster battery drain near sink
Multiple Sinks Distribute relay load across gateways 3 months → 2+ years lifetime
Data Aggregation Combine readings at cluster heads 80% traffic reduction
LEACH Protocol Rotate cluster head role randomly Even energy distribution
Boids Principles Simple local rules → global coordination Scalable self-organization

19.8.3 Energy Budget Rule of Thumb

WSN energy budget rule of thumb showing transmission, idle listening, processing, and sensing as proportions of total consumption

WSN Energy Budget Rule of Thumb

Critical Insight: Idle listening (25%) is nearly as expensive as active transmission! This is why duty cycling is so effective.

19.8.4 Energy Management Strategy Decision Tree

Energy management strategy decision tree guiding WSN designers through protocol selection based on deployment requirements

Energy Management Decision Tree

19.8.5 Decision Checklist

Before deploying a WSN, verify:


19.9 Concept Relationships

Primary Concept Builds On Enables Contrasts With Related Pattern
Duty Cycling Radio power states (active/sleep) Extended battery life (10-100x) Always-on operation Sleep scheduling protocols (S-MAC, B-MAC)
LEACH Protocol Clustering, duty cycling, aggregation Fair energy distribution Static cluster heads Rotating leadership, hierarchical routing
Hotspot Problem Multi-hop routing, convergecast Energy-aware routing design Uniform energy consumption Load balancing, multiple sinks
Data Aggregation N-to-1 communication pattern Reduced transmissions (80-95%) Raw data forwarding In-network processing, cluster heads
Energy Harvesting Ambient energy sources (solar, vibration) Perpetual operation Battery-only operation Hybrid power systems

19.10 See Also

  • WSN Routing Fundamentals: Energy-aware routing protocols and path selection strategies that minimize energy consumption
  • WSN Coverage Fundamentals: Coverage planning and sensor placement optimization for energy-efficient deployments
  • WSN Data Aggregation: Detailed techniques for in-network data aggregation and fusion
  • LEACH Protocol Implementation: Complete LEACH protocol specification and implementation details
  • 802.15.4 MAC Layer: Low-power MAC layer design principles underlying WSN protocols

19.11 Concept Check

19.12 Try It Yourself

Hands-On Energy Budget Exercise

Scenario: You’re designing a wildlife tracking collar WSN for 50 elephants. Requirements: 2-year battery life, GPS location every 2 hours, LoRaWAN transmission to base stations.

Task: Calculate the required battery capacity given these parameters: - GPS active current: 50 mA for 30 seconds - LoRa TX current: 120 mA for 2 seconds - MCU sleep current: 10 µA - MCU active current: 5 mA for 5 seconds (GPS processing)

Steps:

  1. Calculate energy per GPS event (mAh)
  2. Calculate events per day (24h / 2h)
  3. Calculate total daily energy consumption
  4. Determine battery capacity for 2-year lifetime (730 days)

What to Observe: GPS active time dominates despite being only 30 seconds every 2 hours. Transmission is brief (2s) but high-current (120 mA). Sleep current is negligible due to long sleep periods.

Extension: How much does battery life increase if you reduce GPS sampling to every 4 hours during nighttime (18:00-06:00) when elephants are typically stationary?

19.13 What’s Next?

Topic Chapter Description
Common Mistakes WSN Common Mistakes Avoid deployment failures from real-world case studies
Routing Protocols WSN Routing Compare energy-aware routing protocols for multi-hop paths
Coverage Analysis WSN Coverage Optimize sensor placement using k-coverage algorithms