A couple of quick questions. I am going to build an arduino based sensor network based on a 328P running at 3.3V/8Mhz. Because it is a sensor network, I plan to have it run off of a single cell Li-Ion battery (likely the 18650 cell). I want to keep power consumption low and component count low but at the same time, run as long as possible. My sensor will be a temperature sensor that will need an analog input to read the values. Here are some questions:
According to the datasheet, the 328P chip can run on a large voltage range. The Li-Ion battery will be around 4.2V when charging, 3.7V nominal and drop as low as 3.3V when low. Those are all well within the range of the 328P input. Do I really even need a voltage regulator in this case? My sensor will work fine in this range as well?
As far as charging the battery, I am looking at a chip like the MCP73831 (or similar). Can I connect my Arduino and sensor VCC to the output of the charging chip (vBat)? I want to run my system whether I am running off of battery only or while charging. I understand that while charging I will get 4.2V but as explained above, if my loads can all handle that voltage range, it should be fine correct?
I want to run as long as possible and don't need to take measurements constantly. Anybody have any experience with a good sleep timer or library for the Arduino? I want to sleep and only wake every x minutes (probably 1 minute to start) to take a measurement and log it and then go back to sleep. My goal is to run a few weeks in between charging at least.
I use 328 with internal clock at 8Mhz without a voltage regulator. I connect it directly to a battery that operate into the chip's range without a problem.
I use those libraries that may be interesting.
<LowPower.h> to "sleep" the arduino. You can sleep it 8sg max, but you can do a loop.
<Vcc.h> to watch out Voltage of the battery
<avr/wdt.h> to use the internal watchdog: it's easy, just to a command to reset countdown
I take a meassure every 10 min and compare it with previouse meassures, and depending on that, tx o or not
this is todays temperature log received in a raspberry pi from arduino by bluetooth:
25.63 temperature
5.38 voltagge (4 x 1.20v rechargabble)
0.75 temp diff that switch on tx.
I you use 3.3v or lower, the consume is lower. I need 5v because bt module. but in sleep mode, power consume it's near 2-5 microamperes... so "to sleep it" its the best.
I have a atmega328p-pu running on a 14650(AA size 3.7volt) battery for temperature/humidity/barometer outside in the backyard. No regulator, and it's been running for over a year now. I used the JeeLib library because I have a RFM12B transceiver. But you can still use that library to take advantage of the sleep function:
Sleepy::loseSomeTime(59900) // sleep for about 1 minute
Sleeps for about a minute and wakes up and takes readings. But, you could loop around this Sleepy function to sleep longer. e.g.,:
// Sleep for 7 minutes
for(int i=0; i<7;i++) { // loop 7 times
Sleepy::loseSomeTime(59900); // 1 minute sleep
}
You would also need to set the ISR watchdog to use the Sleepy function, but google "Jeelib Sleepy" to get examples.