Running Arduino off of Li-Ion battery

Hello all,

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:

  1. 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?
  2. 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?
  3. 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.

Thanks!

Mike

It is a thing that is extremely important. And if someone else has presented to me.

Enter "Arduino on 3.7volt" or something like that in the search box on top of this page, and see what you get.
Leo..

Hello,

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:

24/08/2015_09:09:41 AyE 25.63 439435 0.75 0.00 4 5.38 2

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.

saludos,
Enrique

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.