Pro Mini power managment

Hi,

This past month I have been working on a project that involves arduino pro mini which is powered by a battery. Pro mini acts as a timer that switches on a relay. It worked fine when powered by USB port. To make it portable I tried to power arduino with a 9V(PP3) battery. When I was testing it worked(timer was set to 10min), but after one day I found that arduino had it’s power led dimly lit, and had the onboard LED blinking(?). Relay didn’t work because it needed 15-20mA driver current. 9V battery was new, but after just one day it was seriously diminished(dropped to 7V). Then I decided to make arduino more power efficient. First I measured current draw of arduino by connecting it in series with a multimeter. I got 17,7mA. I decided to save power by putting arduino to sleep and lowering it’s frequency to 1Mhz. I used the watchdog timer to wake up arduino every 8 seconds just so I can keep track of time. One cycle is approximately 8.456s(8s+time needed to re enter sleep). Power draw was 3.4mA now! I don’t get it. I read that others get values in µA. I understand that on board LED wastes some current, but is it that bad(I plan on removing it then)? This was all just testing, arduino was powered by UART TTL module(is that the problem?). I will probably buy 4 AA batteries and connect them in series for powering arduino. Should the relay have a separate power source? I would appreciate some help :frowning: .
This is my code:

#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>

#define RELAY (5)

volatile int counter=0;


ISR(WDT_vect)
{
    counter++;
}

void enterSleep(void)
{
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  
  /*enter sleep mode. */
  sleep_mode();                      
  
  /* The program will continue from here after the WDT timeout*/
  sleep_disable(); /* First thing to do is disable sleep. */
  
  if(counter==142){
    /* Re-enable the peripherals. */
    power_all_enable();
    digitalWrite(RELAY, LOW);
  }
  enterSleep();
}

void setup()
{
  pinMode(RELAY, OUTPUT);
  digitalWrite(RELAY, HIGH);
  /*** Setup the WDT ***/
  
  /* Clear the reset flag. */
  MCUSR &= ~(1<<WDRF);
  
  /* In order to change WDE or the prescaler, we need to
   * set WDCE (This will allow updates for 4 clock cycles).
   */
  WDTCSR |= (1<<WDCE) | (1<<WDE);

  /* set new watchdog timeout prescaler value */
  WDTCSR = 1<<WDP0 | 1<<WDP3; /* 8.0 seconds */
  
  /* Enable the WD interrupt (note no reset). */
  WDTCSR |= _BV(WDIE);
  
  //Scale down to 1Mhz
  CLKPR=0x80;
  CLKPR=0x04;
  enterSleep();
}
void loop()
{
}

This is arduino I bought: arduino
This is the relay: relay

Remove the led. You can remove smd parts by adding a big blob of solder on both sides. The big blob stays warm, and the smd part will just fall off.

A relay is not the best thing for a battery powered arduino. Can you use something else ?

When you don't need the 5V, you can remove the voltage regulator and use 3 AA batteries. Apply the 4.5V directly to VCC (so the ATmega328P chip is powered directly from the batteries). Read this : http://www.gammon.com.au/power Use this : https://bitbucket.org/Cathedrow/narcoleptic/src

Thanks for the reply. There is certainly some useful stuff in what you gave me... I will definitely look into it. I read about the subject, and how removing the power regulator helps, but I don't think I need that much power saving. Do you know what the blinking LED meant? Is it some kind of low power indicator?

If you need a relay, consider a mechanically latching ones... The Arduino just pulses to latch and pulses to unlatch... No holding current.

Ray

I ment removing the power led, you probably don't have to remove the other one. The other one is the System Led at pin 13. When the Arduino Pro Mini is powered up (or with a reset), the bootloader will make it blink.

P.S.: I don't trust the cheap clone Pro Mini bootloaders. I always burn a new bootloader onto the cheap clone boards.