Quais são (ou como eu uso) as opções de economia de energia do Arduino para prolongar a vida da bateria?


40

Para projetos solares e alimentados por bateria, é necessário diminuir o consumo de energia.

Sei um pouco sobre o uso de um timer e uma interrupção para colocar o microcontrolador em suspensão quando ele não está fazendo nada.

Também li que você pode desativar alguns periféricos para economizar ainda mais energia.

Aqui está uma página que explica: Técnicas de economia de energia

Minha pergunta:

  • Que outras técnicas existem para economizar energia?
  • Existem bibliotecas que facilitam o uso desses recursos do AVR?

Respostas:


33

Nota: Eu queria ressaltar que, mesmo que minha resposta tenha sido aceita, o leitor (você) deve realmente ler a resposta de Anindo primeiro se realmente deseja economizar energia com qualquer placa Arduino. Depois de abordar esses itens em seu design, você deve ler minha resposta e se preocupar em como configurar o MCU no modo de baixa energia.

Dito isto, existem várias técnicas para fazer um Arduino economizar energia. Vou listar alguns e depois apontar para uma página que os explique com mais detalhes.

  1. Enquanto o controlador não está fazendo nada importante (entre uma leitura de um sensor e no próximo, por exemplo), você pode colocar o controlador em um dos modos de suspensão abaixo, com o comando set_sleep_mode (SLEEP_MODE_PWR_DOWN). Ao lado de cada modo está o consumo aproximado de energia de cada modo.

    • SLEEP_MODE_IDLE: 15 mA
    • SLEEP_MODE_ADC: 6,5 mA
    • SLEEP_MODE_PWR_SAVE: 1,62 mA
    • SLEEP_MODE_EXT_STANDBY: 1,62 mA
    • SLEEP_MODE_STANDBY: 0,84 mA
    • SLEEP_MODE_PWR_DOWN: 0,36 mA
  2. Desative a detecção de queda de energia (o circuito que desliga o controlador quando baixa tensão é detectada).

  3. Desativar ADC (conversão de analógico para digita)

  4. Use o relógio interno

Em seguida, quando você colocar o controlador em suspensão, precisará usar um ou mais mecanismos abaixo para ativar o controlador e fazer algo com ele:

  • Acorde com um sinal

  • Acorde com um temporizador

Este é um resumo que fiz de -

Esse artigo se aplica principalmente ao ATmega328P, mas a técnica também se aplica a outros controladores compatíveis com Arduino. Como o TheDoctor disse bem, você precisará verificar o datashet para garantir que seu controlador suporte alguma dessas técnicas e como fazê-lo com mais precisão.


2
Obrigado por consultar minha página www.gammon.com.au/power . O emprego de todas as técnicas mencionadas nele deve permitir consumir cerca de 100 nA (0,1 µA). Outras técnicas que podem ter um grande impacto devem ser executadas a uma frequência mais baixa e a uma voltagem mais baixa. Além disso, o que Anindo Ghosh disse sobre o não uso de reguladores de tensão. Fiz um sensor de temperatura e umidade - alimentado por bateria, que emprega muitas dessas técnicas, que ainda estão fortes depois de alguns anos com baterias.
Nick Gammon

@ NickGammon - Para ser justo, acho que seu excelente artigo mereceu uma referência melhor, por isso editei minha resposta nesse sentido. Obrigado pelo ótimo artigo - muito claro e completo! E bem-vindo ao Arduino.SE. É bom ter você aqui.
Ricardo

24

Realisticamente, o maior desperdício de energia em uma placa Arduino é o regulador de tensão linear nela.

  1. Desde que o microcontrolador na placa, os LEDs ou qualquer outro periférico consumam corrente, o regulador linear gasta energia igual a difference between supply and board voltagex current drawn.

    Portanto, uma primeira correção seria desconectar o LED indicador de energia na placa e não usar nenhum dos outros LEDs o máximo possível. Segundo, forneça à placa a menor tensão possível, suficiente para alimentar o regulador de bordo.

  2. Nos projetos originais, os reguladores de tensão utilizados não possuem baixa corrente quieta. Isso significa que, mesmo sem nada consumindo energia, o próprio regulador gasta bastante energia o tempo todo.

    Uma solução fácil é substituir o regulador de bordo por um LDO (regulador linear de baixo abandono) classificado para uma corrente quieta extremamente baixa. Pesquisas paramétricas em vários sites de fornecedores renderão prováveis ​​substitutos.

  3. Mesmo com as etapas acima, a placa Arduino não fornece um mecanismo para configurar o LDO no modo de baixa energia, se o LDO escolhido suportar isso. Projetos com economia de energia geralmente usam um pino "modo de suspensão" nos reguladores de tensão para economizar um pouco de energia - não é uma opção aqui.

Mesmo com todos os modos e truques possíveis de economia de energia aplicados no nível do microcontrolador, o Arduino simplesmente não foi projetado para ser um dispositivo de ultra baixa potência pronto para uso. Tendo experimentado várias aplicações não triviais, descobri que o melhor que é realisticamente possível é de cerca de 10% a 30% de economia de energia, dependendo da aplicação, uma vez que o regulador de tensão e os LEDs consumirão o restante de qualquer maneira.


2
forneça à placa a menor voltagem possível possível, suficiente para alimentar o regulador de bordo ou forneça 5V através de um cabo USB hackeado.
Anonymous Penguin

13

Você pode ler a folha de dados de 200 páginas e depois mexer com alguns turnos e registros de bits confusos, mas eu recomendo esta biblioteca: http://playground.arduino.cc/Code/Enerlib

Além disso, se você estiver usando um Uno ou qualquer um com um chip USB-para-serial, poderá desativá-lo ou removê-lo.


3
Você deve ler a folha de dados, não importa o que esteja fazendo.
Connor Wolf

9

Quando seu projeto estiver funcionando e você precisar implantar no ambiente de "produção", poderá optar por substituir o Arduino por um meta ATMega328 simples ou qualquer um dos chips da família ATTiny. Isso eliminará todos os consumidores de energia que você não precisa na placa Arduino. Eu encontrei:

  • Placa Arduino de bateria de bloco de 9V - 56 mA
  • ATTiny85 nu em 8 MHz sem modos de suspensão, etc. - 10 mA
  • ATTiny85 nu em 8 MHz no modo de suspensão - 0,03 mA

Mais algumas informações

Programe um ATtiny com Arduino

Arquivos ATTiny para o IDE do Arduino

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.