The main idea is to create a relatively small device that measures temperature and humidity (or anything else using a low-power i2c sensor), sends data to a gateway, and never requires a battery change. In the current iteration, I going to use an ATmega328P microcontroller, RFM69W transceiver, 1-1.5F supercapacitor, and some additional components to provide over/under voltage protection.
Yesterday I received components and soldered test PCBs, then bad news comes out.
I haven't noticed that the chosen voltage comparator has open-drain outputs, so my schematic is incorrect, though I managed to fix it with some wires. In general, under-voltage protection works but consumes from 20uA to 75uA, that's not acceptable. The next try is to use a voltage monitor IC, e.g. NCP300LSN185T1G or something similar.
The overvoltage protection circuit is crap. It kinda works, but the overall approach is completely wrong. The circuit monitors a solar panel's voltage and if it < 3.84V (240 mV voltage drop on a schottky diode) it charges a supercap, so we could easily have a case when the voltage on the supercapacitor is 2V, 5V on the solar panel, and charging is disabled :) It can be improved to monitor voltage on supercap, but in this case, it'll drain it (due to voltage divider). The good news here, that the alternative circuit works well (I'll test it more during the next days). It uses an adjustable precision shunt regulator that is capable to output up to 100mA, so basically one IC, a few resistors, and that's all.
With this approach, I was able to charge a supercapacitor to 3.46V on a dark and cloudy day using a 53x30mm, 5.5V solar panel.
So my next steps are:
Select and order an appropriate voltage monitor for undervoltage protection.
Design and order new PCBs.
Test everything again.
Supercapacitor Discharge Calculator
Recently, I created one more online supercapacitor discharge calculator. All that I've seen don't support different power consumption modes (run, idle, sleep) and some other functionality. It doesn't validate all fields properly, so valid values are required.
First of all, I'd like to say thank you for all your comments, recommendations, and following the project. It inspires.
Second, you know, giving a meaningful name for the logs is almost as hard as naming variables and methods in programming :)
The node's software has been already published, it uses MIT license to simplify code reuse. The repo consists of two parts: node and gateway. Gateway is based on ESP32. The software isn't 100% reliable and I have a lot of plans for improving it in the future, but currently, it is used as-is to test the node.
The node's software isn't something special too, though I tried to keep it clean and readable. I don't like how the typical Arduino programs are written (everything in one file), so I've separated things a bit. It supports different debug flags that are described in the readme.
Since I'm still waiting for PCBs and components decided to play a bit with software for the node to optimize power consumption.
deep sleep: 4 uA
idle: 2.65 mA
transmission: up to 45 mA (according to RFM69W datasheet)
First of all, seems I mixed up the power consumption of RFM69W and nRF24L01+ (some time ago I tried to use this transceiver, but then switched to the current one), so now the peak current is around 45 mA, a bit bigger than I initially thought. It's not a big deal, but it should be taken into account.
Measured 4 uA during deep sleep is okay as for me, I use a regular multimeter with 1 uA precision and (0.8% + 1) accuracy so it isn't really precise value. I won't tune power consumption during the transmission part, though it can be easily decreased with decreasing transmission power. And now only one candidate is left - idle mode.
Let's start from the beginning. I live in an apartment that faces south and west so I can get reliable temperature measurements from a standard thermometer (you know, such thing on your window with a little bit of colored ethanol inside) only till 1-2 PM. That's why I decided to start this project.
The initial idea was to keep it simple and cheap. Components:
HTU21 temperature and humidity sensor
1F 5.5V supercapacitor
Some solar panel
The ATmega328P microcontroller in a deep sleep consumes tiny amount of energy ~4uA, but to operate at the lowest voltage (1.8V) 4MHz oscillator should be used.