After the failure of my ESP32 web server to monitor battery voltage I reverted back to a simple system with an Arduino Nano reading analog voltage from a 5k-1k resistor divider to bring 15V down to 3V. Every second it takes a reading and sends on serial over USB to a Linux computer.
I love these little nano boards - very cheap and easy to use. The code is very simple, here's a screen shot from my favourite Arduino environment PlatformIO.
The battery (a 105Ah flooded lead acid battery charged from a 100W panel), is charged for some of the day and over night runs the computer and any radios I have on for WSPR. Here's a plot from 5pm until the next 5pm.
It's a deep cycle battery so I think there's a fair bit of voltage drop to go if required.
At the moment I'm taking a sample every second which is clearly way too much and rather hammers the spreadsheet. I'll back it off to every 10 minutes.
I mentioned that I like PlatformIO and one reason is that it's so fast compared to the Arduino IDEs. Here is a screen recording of building and uploading that little sketch above.
This is not sped up! The Arduino IDE v2 is better than v1 but still not a patch on Visual Studio Code with PlatformIO. There's more to set up and learn but it's worth it.
There is one complexity that needs to be solved. Reading ASCII voltage readings from the serial port and writing them to a file is more complex than it should be. I think the problem is that I'm using python 3 which defaults to unicode. I've got it working but it's more complex than it should be.
Writing serial data from Arduino to a file
nohup tail -f /dev/ttyUSB0 | gawk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }' > voltMinutes.txt&
The file looks like this:
2023-09-26 11:29:07 14.46
2023-09-26 11:29:57 14.40
2023-09-26 11:30:57 14.37
2023-09-26 11:31:57 14.51
2023-09-26 11:32:57 14.46
2023-09-26 11:33:57 14.54
2023-09-26 11:34:57 14.49
2023-09-26 11:35:56 14.46
2023-09-26 11:36:56 14.46
2023-09-26 11:37:56 14.49
2023-09-26 11:38:56 14.46
2023-09-26 11:39:56 14.29
2023-09-26 11:40:56 14.49