Redução de consumo de energia do Arduíno

Olá meus queridos caiçaras, tudo bem? No post de hoje, falaremos sobre o consumo de energia do Arduíno e como otimizar isto. Sabe-se que, em diversas aplicações, você não vai ter disponível uma tomada, para conectar uma fonte e alimentar sua placa ou computadores para utilizar a porta USB. Assim, faz-se necessário alimentar seu Arduíno com baterias.

Então… Como aumentar a vida útil da sua bateria? Como garantir o consumo mínimo de corrente? Continue lendo o artigo, que explico para você com linguagem simples e direta, como de sempre do EC.

Por quê se preocupar com o consumo de energia?

Antes de tudo, é importante entender, porque devemos nos preocupar com o consumo do Arduíno. Pense no seguinte: você cria um protótipo; valida a ideia; cria um standalone e coloca em campo. Mas, depara-se com o consumo alto e troca constante das baterias… Isso não é nada agradável, correto?

Pensando nisso, não só a plataforma Arduíno, mas diversos microcontroladores, contam com blocos internos, que permitem habilitar o modo sleep, interrupções e outras funções que, direta ou indiretamente, influenciam no consumo. Em muitos casos, manter o Arduíno “acordado” o tempo inteiro, não é necessário e você, amigo maker e projetista, pode e deve contornar essa situação.

Vamos a um exemplo simples…

Sem delongar, vamos a um exemplo muito simples de utilização que, ao manter pressionado um botão, acionará uma saída, no nosso caso um led. Nada de novo até aqui, ok? Mas, você sabe o quanto de corrente o Arduino consume, só pra ficar funcionando ligado? Vamos explorar, antes de tudo, para nosso exemplo didático. Precisaremos do seguinte:

1- Arduino Uno;

1 – Push button;

1 – Resistor de 10kΩ;

1 – Resistor de 220Ω;

1 – LED vermelho de 5mm ou outra cor que desejar.

O esquemático ficará conforme imagem abaixo:

O sketch para funcionamento está a seguir. Como o escopo do artigo é focar no consumo de corrente elétrica e formas de redução, não entrarei em detalhes no funcionamento deste sketch. Se você tem dúvidas, recomendo que faça o download do E-book “Começando com o Arduino”, onde exploro as entradas e saídas digitais e analógicas…

Prosseguindo, copie e cole o sketch a seguir.

Após digitar ou copiar o sketch, plugue o cabo USB no computador e no Arduino, clique em Verificar, para checar se há algum erro. Após essa verificação, clique em Carregar, para passar o código fonte para a placa.

Checando o consumo…

Bom, após ter copiado o sketch e testado seu funcionamento, onde a saída  fica em nível lógico alto, ao manter o  botão  pressionado, alimenta seu Arduino com uma fonte externa. Ela pode ser uma bateria, uma fonte de 12V, o que você desejar… Então, mede a corrente de consumo, com o led desligado e com o led ligado. Para ajudá-lo, segue um exemplo de ligação de uma bateria 9V e a medição de corrente. ATENÇÃO: O multímetro deve ficar em série com o circuito e cuidado com a escala…

No caso de nossa simulação as correntes foram:

Consumo com LED desligado.
Consumo com LED ligado.

Podemos observar que, com o led desligado, teoricamente até o Arduino ler o botão, ele fica “sem fazer nada” e tem um consumo de mais de 25mA. Parece pouco, mas pense nesse consumo em campo e com uma bateria… O que pode custar em seu projeto final?

Finalmente chegamos ao x da questão, onde vou mostrar para você que, com algumas ações simples, o consumo cairá bastante! :).

Conheça  as formas de redução de energia…

O ATMega328P, microcontrolador do Arduíno conta com o Sleep Mode e gerenciamento de consumo, possibilitando desabilitar blocos de comunicação, pinos digitais, possibilitando literalmente colocar o microcontrolador para dormir.

Essas funcionalidades são detalhadas na seção 14 do datasheet do microcontrolador, explicando cada um dos modos para redução de consumo, que são:

  • IDLE: desabilita as atividades do microcontrolador. Entretanto, todo o sistema continua funcionando. Em resumo, desabilita apenas o clock da CPU e da memória flash;
  • Redução de ruído para o ADC: para a CPU, mas os demais blocos continuam funcionando. Esse modo é habilitado, quando se faz necessário reduzir ruídos na leitura de sensores analógicos;
  • POWER-DOWN: desabilita o oscilador externo, praticamente, interrompendo todos os clocks gerados;
  • POWER-SAVE: muito parecido com o POWER-DOWN, entretanto contador/timer 2 continua trabalhando;
  • STAND-BY: parecido com o POWER-DOWN, entretanto o oscilador externo continua trabalhando, fazendo o microcontrolador despertar do sleep, a cada 6 ciclos de clock.
  • EXTENDED STAND-BY: parecido com o POWER-SAVE, entretanto o oscilador externo continua trabalhando, fazendo o microcontrolador despertar do sleep a cada 6 ciclos de clock.
Obs.: O ADC (Analog to Digital Converter) continua habilitado em todos os modos, sendo possível desabilitá-lo para reduzir o consumo.

Para a redução do consumo, você deve levar em consideração qual modo deseja utilizar para atender sua aplicação. No experimento proposto, vamos utilizar o POWER- DOWN.

A fim de ilustrar as possibilidades de cada um dos modos, veja a tabela da seção 14 do datasheet do componente:

Fonte: Datasheet ATMega328P

Vamos colocar em prática…

Bom, agora que conhece os modos de redução de consumo de energia, vamos a um exemplo prático. Vamos utilizar o mesmo circuito, com o funcionamento idêntico, com algumas mudanças que ajudarão a diminuir o consumo. Em resumo, o circuito funcionará da seguinte maneira:

É relativamente simples de compreender, mas na prática nem tanto… Para habilitar ou desabilitar os módulos do microcontrolador, necessita-se da leitura e compreensão dos seus blocos pelo datasheet. Se você tem dúvidas sobre como interpretar um datasheet, confira nosso infográfico “5 dicas para leitura de datasheet”, onde tem dicas básicas, mas bem interessantes…

Prosseguindo…

Vamos mostrar para você, querido leitor, 2 maneiras de implementar a redução de consumo:

Uma, onde desabilitamos os principais blocos, já com a facilidade de utilizar as bibliotecas avr/sleep, contendo funções, que auxiliaram nessa tarefa. E, outra onde essa tarefa fica ainda mais fácil, com o uso de uma biblioteca externa.

Veja o sketch a seguir. Ele está com comentários para auxiliar a compreensão do mesmo e, logo acima, entramos em maiores detalhes sobre os modos de Sleep:

Importante saber!

As interrupções do ATMega328P são abordadas nas seções 16 e na 17 de sua folha de dados. No projeto desta postagem, utilizaremos uma interrupção externa com o pino 2 = INT0. O comando attachInterrupt funciona da seguinte maneira:

  • INT = 0 – Pino 2  / 1 – Pino 3;
  • FUNÇÃO = Função a ser chamada na interrupção;
  • MODO = Define como será ativada a interrupção, sendo 4 modos:

Utilizaremos o LOW, onde haverá o disparo da interrupção, toda vez que mantermos o botão pressionado. Isso enviará nível baixo à entrada do pino 2 e, consequentemente, acionará o led.

Facilitando as coisas…

Sempre tem um modo mais fácil, ainda mais com Arduíno, onde existe uma comunidade bem ativa e que sempre contribui com bibliotecas, que facilitam a vida do projetista. Para isso, existe a biblioteca Low power, que pode ser baixada de forma gratuita em: https://github.com/rocketscream/Low-Power.

Faça o download e realize a instalação da biblioteca, e após isso digite o sketch a seguir:

Perceba que, o código ficou muito mais simples de se compreender. Mas, tem um preço por isso, onde você não sabe, exatamente, o que foi desabilitado. Porém, quis demonstrar que é possível, fazer de forma mais simples, além da biblioteca ser compatível outros microcontroladores ATMega.

De qualquer maneira, o que vale é a solução que lhe atende… Seja utilizando as bibliotecas avr, seja habilitando os registradores e desabilitando de forma manual, onde você tem maior poder sobre o hardware, ou utilizando uma biblioteca externa :).

Resultados Obtidos…

O resultado foi muito bom, onde na placa Arduino com outros periféricos, componentes que fazem comunicação e tudo isso, que impacta no consumo, a redução foi de mais de 25mA para aproximadamente 18mA. Em certos momentos, mediu-se 17mA, sendo assim uma redução de 28%. Parece pouco, mas com poucas ações, já foi possível essa redução significativa.

Consumo após desativar blocos do microcontrolador.

Para melhorar ainda mais, é importante no seu projeto final, optar por desenvolver uma placa standalone, deixando apenas o hardware necessário para funcionamento. Assim, o consumo cai, drasticamente, para < 1mA. Não estou brincando, é uma redução muito grande mesmo!

Para ajudá-lo, separei alguns materiais interessantes, caso queira se aprofundar, montar seu standalone e diminuir o consumo:

Veja, também, como montar seu standalone, com o projeto da Caiçara board: https://easyeda.com/yhanchristian94/Caicara_Board-3a6f5faff10647dc83c812e488648ac0

Para finalizar…

Bom galera, eu peço desculpas pelo artigo ter ficado um pouco longo! Tentei ser o mais sucinto possível, mas para fazer conteúdo de qualidade, algumas coisas tem que ser explicadas. Isso é apenas uma introdução, sendo o meu objetivo mostrar as possibilidades do modo sleep, que podem e devem ser bem exploradas (Estudar datasheet, fica a dica ;)).

Não deixe de comentar e dar sua opinião! E claro, deixe sua sugestão para futuras postagens, explorando um pouco mais do hardware do fantástico ATMega328P, para futuros tutorais e projeto dos blog.

Gostou? Compartilhe e de seu feedback! Isso é fundamental para melhorarmos nosso conteúdo e produzir, ainda mais, artigos para ajudar mais e mais pessoas.

Muito obrigado e até a próxima!

Yhan Christian

 

2 Comentários

    • Gustavo, boa noite!

      Você pode ativar a interrupção de 4 maneiras, conforme explicado no post. Vamos exemplificar a forma FALLING (ativa em borda de decida), estará com o pino em nível alto e ao realizar a transição de 1 para 0, ou seja, sair de alto para baixo ele ativa a interrupção.

      O evento você define em seu código / problema a ser resolvido. Pode ser um sinal de um sensor, pode ser o acionamento de um botão, enfim como dica que te dou é: Entenda sua necessidade e como utilizará a interrupção, com isso defina o evento que servirá como gatilho da mesma.

      Espero que tenha lhe auxiliado, um forte abraço!

      Yhan Christian,


Deixe seu comentário.

SiteLock
%d blogueiros gostam disto: