Suggest a temporary storage?

Hi,

I've got a battery operated (re-chargeable "coin" li-ion battery) project that reads multiple sensors and sends the data over bluetooth to a smartphone. Everything is working just fine but the problem is the power consuption. With the bluetooth module always on and streaming data constantly the battery lasts for about 1.5 hours. It's not bad but I'd like it to last longer if possible.

I was thinking that I could improve the power consumption by having a temporary storage for the data and sending it in bursts when necessary instead of streaming everything all the time. Most of the data is un-important anyway so I could limit the amount of data if I had a fast and big enough buffer.

What kinds of write/read speeds I could expect from an SRAM chip or an SD card? With an SD card the size wouldn't be a problem but how big are SRAM chips these days (they are faster, yes?)? Another limiting factor here is also the Arduino itself. I'm stuck with 8MHz (3.3V) ATMega328.

Feel free to suggest other options as well.

Thanks, Kari

FRAM might work. Here is a chip I like http://forum.arduino.cc/index.php?topic=236038.0.

The 256KB chip is 3.3V and would be easy to interface.

I don't know how much power it would draw while writing at 8 MHz. I expect less than at 25 MHz SPI. It is low power when idle. Write time is very short at SPI bus speeds.

Operating power supply current 10.6 mA (Max@25 MHz) Standby current 35 ?A (Typical), 150 ?A (Max) Sleep current 10 ?A (Max)

Thanks for the suggestion. While going through that thread I ran into MRAM modules too and started digging deeper to see what the difference is. Looks like F(e)RAM will eventually break after a (huge) number of writes. Don't like that idea for a buffer that is being written to constantly. However the MRAM modules seem to be harder to find at least here in the UK. For now I'm going to give this SRAM module a go instead: 23LC1024

Wow! You must plan on logging a lot of data.

The Fuji FRAM is good for over a trillion read/write cycles so the chip is good for over 100,000 TB if you don't burn one location.

If you fill it once a second, it will last for 1,000,000,000/(365*24*3600) = 31 years.

Te 23LC1024 is also a good solution. I use them also as a RAM disk http://forum.arduino.cc/index.php?topic=229485.0.

Yes, I'm constantly reading 28 different sensor values as fast as I can (currently 200 times a second) and it needs to be logged with time stamp + some other flow control data so it is a handful to deal with.

You will still get over 30 years of use from a FRAM chip.

28 sensors at 200/sec is only 5,600 values per second. That's not a lot of data for FRAM. You could write 40 bytes per value for 30 years.

That's good to know. Thanks for enlightening me! :)

kbrown: With the bluetooth module always on and streaming data constantly the battery lasts for about 1.5 hours. It's not bad but I'd like it to last longer if possible. What kinds of write/read speeds I could expect from an SRAM chip or an SD card?

The HC-05 module for example, takes 40mA when pairing, 20mA when paired, and 2mA in sleep (at least my firmware does it that way - after 5 secs of inactivity at the arduino side it goes to sleep, it wakes up when you send data out of arduino).

I was thinking that I could improve the power consumption by having a temporary storage for the data and sending it in bursts when necessary instead of streaming everything all the time.

When you switch off the BT completely you have to pair it again - so you have to tell arduino somehow it shall switch the BT on and wait until paired. The pairing costs a lot of energy.

Speeds - with FRAM/SRAM/MRAM and arduino @8MHz you may get 15usecs for a random byte r/w, and about 3usec per byte when r/w a block of data. Mind all that serial memories require 4/5bytes+1 to transact via SPI in order to r/w a single byte, or 4/5+N when r/w a block of N bytes..

pito: The HC-05 module for example, takes 40mA when pairing, 20mA when paired, and 2mA in sleep (at least my firmware does it that way - after 5 secs of inactivity at the arduino side it goes to sleep, it wakes up when you send data out of arduino).

When you switch off the BT completely you have to pair it again - so you have to tell arduino somehow it shall switch the BT on and wait until paired. The pairing costs a lot of energy.

Thanks for clearing that up. I was kind of expecting something like this. My current setup won't allow the HC-05 to go to sleep as it's streaming all the time. With a RAM buffer it should be possible.

pito: Speeds - with FRAM/SRAM/MRAM and arduino @8MHz you may get 15usecs for a random byte r/w, and about 3usec per byte when r/w a block of data. Mind all that serial memories require 4/5bytes+1 to transact via SPI in order to r/w a single byte, or 4/5+N when r/w a block of N bytes..

That's good to know. I'll try to pack things in bigger blocks!