Design solar harvesting systems for IoT applications
Size panels, batteries, and storage for specific requirements
Implement MPPT for maximum energy extraction
Explain thermoelectric and piezoelectric harvesting applications
Calculate energy balance for perpetual operation
In 60 Seconds
Energy harvesting captures power from ambient sources — solar panels (50–200 mW outdoor), thermoelectric generators (0.1–10 mW from heat differentials), and piezoelectric transducers (1–100 µW from vibration) — enabling IoT devices to operate perpetually without battery replacement when the daily energy harvest exceeds daily energy consumption.
Key Concepts
MPPT (Maximum Power Point Tracking): A circuit that continuously adjusts the load impedance to extract maximum power from a solar panel; improves harvest by 20–30% over fixed-load circuits
Energy Balance: The condition where daily energy harvested equals or exceeds daily energy consumed; required for perpetual device operation
Solar Panel Sizing: Calculated from peak solar irradiance, panel efficiency, and required daily energy; typically sized to harvest 3–5× daily consumption to account for cloudy days
Thermoelectric Generator (TEG): A device that converts temperature gradients into electricity via the Seebeck effect; output depends on temperature differential
Piezoelectric Harvesting: Converting mechanical vibration or strain into electrical energy; suitable for machinery monitoring where continuous vibration is available
Supercapacitor: A high-capacitance energy storage device (1–100 F) that charges and discharges faster than batteries; used as buffer for burst-energy harvesting scenarios
Indoor Solar Irradiance: Indoor lighting typically provides 100–1,000 lux, yielding 10–100 µW/cm² — roughly 100× less than outdoor direct sunlight
Sensor Squad: Free Energy from Nature!
“What if I never needed to be recharged or replaced?” dreamed Bella the Battery. “Energy harvesting makes that possible! Solar panels capture sunlight, thermoelectric generators capture heat differences, and piezoelectric devices capture vibration. Free energy from the environment!”
Sammy the Sensor was excited: “A solar panel the size of a credit card can produce about 200 milliwatts in direct sunlight. That is more than enough for most sensors! But the tricky part is that the sun does not always shine. You need a rechargeable battery or supercapacitor to store energy for cloudy days and nighttime.”
Max the Microcontroller explained MPPT: “Maximum Power Point Tracking is a clever circuit that extracts the most energy possible from a solar panel. Without it, you might waste 30 percent of the available power. With it, you squeeze out every last drop of sunshine!” Lila the LED cautioned, “Energy harvesting is amazing but not magic. Indoor solar produces 100 times less than outdoor. Vibration harvesters produce microwatts, not milliwatts. Always do the math to make sure your harvest covers your consumption!”
Interactive: Energy Harvesting Calculator
Interactive: Energy Harvesting Concepts and Design
8.2 Energy Harvesting Design
Energy harvesting extends battery life or enables perpetual operation by capturing ambient energy. While promising, successful implementation requires careful analysis and realistic expectations.
8.2.1 Solar Harvesting System Design
Figure 8.1: Complete solar harvesting system architecture
8.2.2 Worked Example: Solar Panel Sizing for Outdoor LoRa Environmental Sensor
Scenario: Design a solar-powered LoRa environmental sensor for deployment in Seattle, WA. The sensor must operate year-round with 7 days of autonomy during cloudy weather.
Given:
Sensor reading + LoRa TX: 50mA for 2s every 30 minutes
MCU deep sleep: 10µA
Location: Seattle (48°N latitude)
Winter sun hours: ~2 hours equivalent full sun
Panel efficiency: 18%
MPPT efficiency: 85%
Battery: LiFePO4 (safe in outdoor temps, -20°C to 60°C)
Steps:
Calculate daily energy consumption:
Active energy per cycle:
50mA × 2s = 100 mAs = 0.0278 mAh
Cycles per day:
24h × 2 = 48 cycles
Active energy per day:
48 × 0.0278 = 1.33 mAh
Sleep energy per day:
10µA × 24h = 0.24 mAh
Total daily consumption:
1.33 + 0.24 = 1.57 mAh at 3.3V
Power = 1.57 mAh × 3.3V = 5.18 mWh/day
Size battery for 7-day autonomy:
Required capacity:
1.57 mAh/day × 7 days = 11 mAh minimum
With 80% DoD and aging margin (50%):
11 / 0.8 / 0.5 = 27.5 mAh
Recommended: 50-100 mAh LiFePO4
(Standard sizes: 50, 100, 200 mAh)
Size solar panel for winter:
Daily energy needed: 5.18 mWh
With MPPT efficiency (85%): 5.18 / 0.85 = 6.1 mWh
Winter sun hours: 2 hours
Required panel power: 6.1 mWh / 2h = 3.05 mW
With 50% margin for non-optimal angle and dust:
3.05 × 1.5 = 4.6 mW panel
For 5V panel at 18% efficiency:
4.6 mW / 5V = 0.92 mA minimum
Select components:
Panel: 5V 50mA solar cell (250 mW peak)
Provides huge margin for cloudy days
MPPT: BQ25570 (cold-start at 330mV, 80-90% efficient)
Battery: 100 mAh LiFePO4
Provides 64 days autonomy (!!!)
LDO: MCP1700 (2µA quiescent)
Result: Even in Seattle’s dark winters, a tiny 5V/50mA solar panel can power this ultra-low-power sensor indefinitely. The key is the extremely low duty cycle (0.0028% active time).
Putting Numbers to It
Why does this solar system have 54× oversizing margin? The math reveals safety buffers:
Maximum Power Point Tracking extracts optimal power from solar panels:
Figure 8.2: MPPT extracts maximum power by operating at the optimal I-V point
MPPT Algorithms:
Algorithm
Complexity
Tracking Accuracy
Efficiency
Best For
Fixed Voltage
Low
70-85%
80-90%
Stable irradiance
Fractional Voc
Low
90-95%
85-92%
Variable conditions
Perturb & Observe
Medium
95-99%
88-95%
Most applications
Incremental Conductance
High
97-99%
90-95%
Rapidly changing
Common MPPT ICs:
Part Number
Input Range
Cold Start
Efficiency
Features
BQ25570
100mV-5.1V
330mV
80-90%
Nano-power, programmable
LTC3105
250mV-5V
250mV
85-95%
Start-up circuit
SPV1050
75mV-18V
500mV
80-90%
Very low input
AEM10941
50mV-5V
380mV
85-93%
Multi-source
8.2.4 Worked Example: MPPT Efficiency Impact on Solar Harvesting System
Scenario: Compare two solar charge controller approaches for a smart agriculture sensor: simple diode connection versus MPPT controller.
Given:
Solar panel: 6V 100mA rated (600 mW peak)
Real-world conditions: 30-70% of rated output due to partial shading
Panel Vmp: 5.0V at full sun, varies 4.2-5.5V
Load voltage: 3.7V LiPo battery
Daily sun hours: 6 hours with varying intensity
Analysis:
Direct diode approach:
Full sun (Vmp = 5.0V):
Panel forced to ~5.4V by Zener + Schottky
Operating at 85% of Pmax
Efficiency = 85% × (3.7/4.8) = 65.5%
Partial shade (Vmp = 4.5V):
Panel can't reach 5.4V → near zero output!
Efficiency = ~0%
Daily average efficiency: ~42%
MPPT approach (BQ25570):
Tracks to actual Vmp regardless of conditions
Converter efficiency: 85%
Tracking accuracy: 95%
Overall efficiency = 85% × 95% = 80.75%
Consistent across all conditions
Result: MPPT delivers 1.93× more energy than direct diode in variable shading conditions.
8.2.5 Supercapacitor Energy Storage
Supercapacitors provide burst power and buffer energy harvesting:
Advantages over Batteries:
500,000+ charge cycles (vs 500-1000 for Li-ion)
Wide temperature range (-40°C to 85°C)
No chemical degradation
Fast charge/discharge
Safer (no thermal runaway)
Disadvantages:
Lower energy density (5-10 Wh/kg vs 150 Wh/kg)
Higher self-discharge (5-10% per day)
Voltage varies with charge state
8.2.6 Worked Example: Supercapacitor Selection for Wi-Fi Burst Transmission
Scenario: Select a supercapacitor to power a Wi-Fi transmission burst when the main LiPo battery can only supply 100mA continuous.
Given:
Wi-Fi transmission: 300mA peak for 3 seconds
Battery continuous limit: 100mA
System voltage: 3.3V
Minimum operating voltage: 2.8V
Steps:
Calculate energy required for burst:
Energy = P × t = (300mA × 3.3V) × 3s = 2.97 Ws = 2.97 J
Calculate capacitance needed:
Using E = ½CV²:
Energy usable = ½C(V_max² - V_min²)
2.97 = ½C(3.3² - 2.8²)
2.97 = ½C(10.89 - 7.84)
2.97 = ½C × 3.05
C = 2.97 / 1.525 = 1.95 F
Account for ESR and margin:
Add 50% margin: 1.95 × 1.5 = 2.9 F
Select standard value: 3.3 F supercapacitor
Calculate recharge time:
Charge current available: 100mA (battery limit)
Charge needed: C × ΔV = 3.3F × 0.5V = 1.65 C
Time = Q/I = 1.65 / 0.1A = 16.5 seconds
Result: A 3.3F supercapacitor allows Wi-Fi bursts at 300mA while the battery supplies only 100mA. Minimum recharge time between bursts is 16.5 seconds.
Interactive Calculator: Supercapacitor Sizing
Adjust the parameters below to see how supercapacitor size affects burst capability:
Show code
viewof burst_current = Inputs.range([50,500], {value:300,step:10,label:"Burst current (mA)"})viewof burst_duration = Inputs.range([0.5,10], {value:3,step:0.5,label:"Burst duration (s)"})viewof system_voltage = Inputs.range([2.5,5.0], {value:3.3,step:0.1,label:"System voltage (V)"})viewof min_voltage = Inputs.range([2.0,4.5], {value:2.8,step:0.1,label:"Minimum voltage (V)"})
Show code
supercap_calcs = {const I = burst_current /1000;// Convert mA to Aconst t = burst_duration;const V_max = system_voltage;const V_min = min_voltage;// Energy requiredconst energy_J = I * V_max * t;// Capacitance needed (from E = ½C(V_max² - V_min²))const delta_V_sq = V_max * V_max - V_min * V_min;const C_min = (2* energy_J) / delta_V_sq;// With 50% marginconst C_recommended = C_min *1.5;// Round up to common valuesconst common_values = [0.1,0.22,0.33,0.47,1.0,1.5,2.2,3.3,4.7,5.5,10,22,47,100];let C_standard = common_values.find(val => val >= C_recommended);if (!C_standard) C_standard = C_recommended;// If larger than 100F// Recharge time (assuming 100mA charge current)const charge_current =0.1;// Aconst charge_needed = C_standard * (V_max - V_min);// Coulombsconst recharge_time = charge_needed / charge_current;// secondsreturn {energy_J: energy_J,C_min: C_min,C_recommended: C_recommended,C_standard: C_standard,recharge_time: recharge_time,voltage_drop: V_max - V_min };}
Sufficient for ultra-low-power sensors with intermittent transmission.
8.2.8 Energy Harvesting Communications: Channel Capacity Limits
For Beginners: What If Your Phone Dies Mid-Call?
Imagine you’re having an important phone call and your battery starts dying. You have two choices:
Keep talking until it dies - You’ll get cut off mid-sentence
Speak more slowly, pause between sentences - You might finish the call
Energy harvesting communication faces this same challenge. Your device doesn’t have a reliable power source—it’s constantly harvesting energy from the environment. The question becomes: How fast can you reliably send data when your power supply is unpredictable?
Shannon’s Channel Capacity for Energy Harvesting:
For energy harvesting systems with finite battery capacity \(B\), the ergodic channel capacity is:
\[C = W \cdot \log_2\left(1 + \frac{E[P_t]}{N_0 \cdot W}\right)\]
Where:
\(W\) = Channel bandwidth (Hz)
\(E[P_t]\) = Average transmit power (W)
\(N_0\) = Noise power spectral density (W/Hz)
Key Insight: With infinite battery (\(B \to \infty\)), only average harvesting rate matters. The variability of energy arrivals (sunny vs cloudy) doesn’t affect capacity if you can buffer enough energy. With finite battery, capacity is reduced by energy outage events.
Practical Design Rule: Size your battery to buffer at least several hours of energy harvesting variance. For solar, this means handling overnight periods (typically 12-18 hours of autonomy minimum).
8.3 Knowledge Check
## The Indoor Harvesting Reality Check
Indoor energy harvesting is frequently overestimated in IoT project proposals. This section provides measured data to set realistic expectations.
8.3.1 Indoor Solar: 100-1000x Less Than Outdoor
Condition
Irradiance
Typical Panel Output (5cm x 5cm)
Can Power
Direct sunlight (outdoor)
1,000 W/m²
40-50 mW
Most IoT sensors continuously
Overcast sky (outdoor)
100-300 W/m²
4-15 mW
Low-power sensor with duty cycling
Window ledge (indirect)
50-100 W/m²
2-5 mW
Sensor with 1% duty cycle
Well-lit office (500 lux)
1.5 W/m²
0.04 mW (40 µW)
Nothing useful without years of storage
Warehouse / corridor (200 lux)
0.6 W/m²
0.015 mW (15 µW)
Timer IC only
LED-lit room (300 lux)
0.3 W/m²
0.008 mW (8 µW)
Essentially nothing
The LED lighting trap: Traditional amorphous silicon solar cells are optimized for sunlight’s broad spectrum. LED lighting has narrow spectral peaks that miss the cell’s absorption bands. Indoor solar cells based on organic photovoltaics (OPV) or dye-sensitized cells (DSSC) perform 2-5x better under LED lighting but still produce only 50-200 µW per cm².
Worked example: Can indoor solar power a meeting room occupancy sensor?
Sensor: PIR occupancy + BLE beacon
Active power: 15 mA for 100 ms every 5 seconds = 0.3 mAs/cycle
Sleep power: 5 µA
Average current: (0.3 mAs / 5s) + 5 µA = 65 µA
Average power at 3.3V: 0.215 mW
Indoor solar panel (5cm x 5cm, 500 lux office):
Output: 40 µW = 0.04 mW
Deficit: 0.215 mW needed, 0.04 mW available
Result: Panel provides only 18.6% of required energy
Fix: Either use a 25 cm² panel (awkward form factor for a
ceiling sensor) or accept that indoor solar supplements
a battery but cannot replace it.
With supplemental solar extending battery life:
Without solar: 230 mAh coin cell lasts 147 days
With solar (40 µW, 10 hours/day): extends to 192 days (+30%)
Decision framework: Indoor solar harvesting is viable only when ALL of these conditions are met: (1) average power consumption below 50 µW, (2) the sensor is near a window or under bright lighting (>800 lux), AND (3) you can tolerate multi-hour energy blackouts (nights, weekends). For most indoor IoT applications, a quality lithium battery with 5-10 year life is simpler and more reliable than an indoor harvesting system.
8.3.2 Thermoelectric Harvesting: The Temperature Gradient Problem
TEGs require a sustained temperature difference (delta-T), not just high temperature. Common misconceptions:
Scenario
Expected delta-T
Actual delta-T
Realistic Power
Hot water pipe in basement
“50°C pipe, 20°C air = 30°C”
5-8°C (convection equalizes)
0.5-2 mW
Industrial motor housing
“Motor is 80°C!”
10-15°C (with heatsink)
2-5 mW
Body-worn (wrist)
“Body is 37°C, room is 22°C”
1-3°C (skin surface cools)
10-50 µW
Server rack exhaust
“Hot air = energy!”
3-5°C (mixed airflow)
0.2-1 mW
Key insight: TEG power scales with delta-T squared. Halving the temperature difference reduces power by 4x. The theoretical delta-T (pipe temperature minus room temperature) is always much larger than the actual delta-T across the TEG due to thermal resistance at interfaces and convective cooling.
8.3.3 Vibration Harvesting: Microwatts, Not Milliwatts
Piezoelectric harvesters produce power proportional to vibration amplitude and frequency:
Source
Vibration Level
Frequency
Harvestable Power
Industrial pump
1-10 m/s²
50-200 Hz
1-10 mW (viable)
HVAC ductwork
0.1-1 m/s²
20-100 Hz
10-100 µW
Bridge/building structure
0.01-0.1 m/s²
1-30 Hz
1-10 µW
Office floor (footsteps)
Intermittent
Random
0.1-1 µW average
Vehicle dashboard
0.5-5 m/s²
10-500 Hz
0.1-5 mW
Viable applications: Vibration harvesting works for industrial condition monitoring sensors mounted directly on rotating machinery (pumps, motors, compressors) where vibration is continuous and strong. For structural monitoring (bridges, buildings), the vibration levels are typically too low for meaningful power generation.
8.4 Concept Relationships
Energy harvesting integrates concepts from multiple engineering disciplines:
Power Electronics:
MPPT Algorithms: Perturb & Observe, Incremental Conductance borrowed from solar inverter technology
DC-DC Conversion: Buck-boost converters with 80-95% efficiency critical for low-power harvesting
Cold-Start Circuits: Special oscillators that operate at 100-500mV input voltage
Energy Storage:
Electrochemistry: LiFePO4 vs Li-ion cycle life (2000 vs 500 cycles) and temperature tolerance
Exercise: Solar Panel Sizing Calculator (20 minutes)
Build a Python calculator that determines required panel size for your IoT deployment:
def size_solar_system(latitude, avg_power_mw, autonomy_days=7, mppt_efficiency=0.85, battery_dod=0.8):""" Size solar harvesting system for IoT device. Args: latitude: Deployment location latitude (degrees) avg_power_mw: Average device power consumption (mW) autonomy_days: Cloudy weather backup (days) mppt_efficiency: MPPT charger efficiency (0.0-1.0) battery_dod: Battery depth of discharge (0.0-1.0) Returns: Dictionary with panel size, battery size, and energy balance """# Estimate daily sun hours based on latitude (simplified)ifabs(latitude) <35: summer_hours, winter_hours =8.0, 5.0elifabs(latitude) <55: summer_hours, winter_hours =7.0, 3.0else: summer_hours, winter_hours =10.0, 2.0# High latitudes have extreme seasons# Daily energy consumption (mWh) daily_energy = avg_power_mw *24# Battery sizing for autonomy battery_capacity_mwh = daily_energy * autonomy_days / battery_dod# Panel sizing for worst-case (winter) panel_output_mw = daily_energy / (winter_hours * mppt_efficiency) panel_output_with_margin = panel_output_mw *1.5# 50% safety margin# Validate energy balance in summer summer_harvest = panel_output_with_margin * summer_hours * mppt_efficiency summer_surplus = summer_harvest - daily_energyprint(f"\n{'='*60}")print(f"Solar Harvesting System Design")print(f"{'='*60}")print(f"Location: {latitude:.1f}° latitude")print(f"Average power: {avg_power_mw:.2f} mW")print(f"Daily energy: {daily_energy:.1f} mWh")print(f"\nSun Hours:")print(f" Winter: {winter_hours:.1f} hours/day")print(f" Summer: {summer_hours:.1f} hours/day")print(f"\nBattery Sizing:")print(f" Autonomy: {autonomy_days} days")print(f" Depth of discharge: {battery_dod:.0%}")print(f" Required capacity: {battery_capacity_mwh:.1f} mWh")print(f" Recommended: {battery_capacity_mwh /3.7:.0f} mAh @ 3.7V LiPo")print(f"\nSolar Panel Sizing:")print(f" Winter requirement: {panel_output_mw:.2f} mW")print(f" With 50% margin: {panel_output_with_margin:.2f} mW")print(f" Recommended: {panel_output_with_margin *5:.0f} mW @ 5V panel")print(f"\nEnergy Balance:")print(f" Winter: Just sufficient (by design)")print(f" Summer harvest: {summer_harvest:.1f} mWh/day")print(f" Summer surplus: {summer_surplus:.1f} mWh/day ({summer_surplus/daily_energy:.1f}× consumption)")return {"battery_mwh": battery_capacity_mwh,"battery_mah_at_37v": battery_capacity_mwh /3.7,"panel_mw": panel_output_with_margin,"panel_5v_mw": panel_output_with_margin *5,"summer_surplus_mwh": summer_surplus }# Example: LoRa environmental sensor in Seattleresult = size_solar_system( latitude=48, # Seattle, WA avg_power_mw=0.25, # Ultra-low-power LoRa sensor autonomy_days=7, mppt_efficiency=0.85, battery_dod=0.8)
What to observe: Even ultra-low-power devices need surprisingly large battery buffers for week-long autonomy. Experiment with different latitudes to see seasonal variation impact.
Extension: Add temperature derating (battery capacity drops 35% at -20°C), panel angle optimization, and dust accumulation factors.
Matching Quiz: Match Harvesting Sources to Power Output
Ordering Quiz: Order the Solar Harvesting System Design Steps
Label the Diagram
💻 Code Challenge
Order the Steps
Match the Concepts
8.7 Summary
Key energy harvesting design principles:
Size for Worst Case: Use winter sun hours and cloudy day autonomy requirements
MPPT is Essential: 20-40% more energy from variable sources
Buffer Adequately: Battery/supercap must handle harvest variability
Understand Limits: Indoor solar is rarely viable; outdoor works well
Match Storage to Application: Supercaps for bursts, batteries for long-term
Calculate Energy Balance: Daily harvest must exceed daily consumption with margin
Common Pitfalls
1. Assuming Indoor Solar Is Viable for Most IoT Applications
Indoor lighting generates 100× less power than direct sunlight. A 10 cm² panel that produces 200 mW outdoors produces only 2 mW indoors under fluorescent light — often insufficient even for ultra-low-power sensors. Always measure actual indoor illuminance and compute expected harvest before committing to solar.
2. Sizing the Solar Panel for Average Irradiance
Sizing based on average daily irradiance ignores multi-day cloudy periods where harvest falls to near zero. Size the battery or supercapacitor to bridge at least 3–7 cloudy days, and size the solar panel to fully recharge the buffer in 1–2 sunny days.
3. Ignoring MPPT Quiescent Current
MPPT circuits themselves consume 0.5–5 mA in quiescent current. For very low-power applications (harvesting < 1 mW), this overhead can consume more than the circuit saves. Use a passive resistive MPPT approximation for ultra-low-power scenarios.
4. Designing for Peak Harvest Without Considering Battery Overcharge
If energy harvest exceeds consumption on a bright day, the battery will overcharge without protection circuitry. Always include a battery management IC (e.g., BQ25504) that both performs MPPT and prevents overcharge.