Aprendendo a utilizar os modos de economia de energia (sleep modes) do Arduino

 

 

APRENDENDO A UTILIZAR OS MODOS DE ECONOMIA DE ENERGIA (SLEP MODES) DO ARDUINO

 

 

Nos dias atuais, a eficiência energética tem se tornado cada vez mais importante em muitos campos da tecnologia. Em especial, em sistemas embarcados, como os baseados em microcontroladores, a economia de energia desempenha um papel fundamental na maximização da autonomia e na redução do consumo de energia. Nesse contexto, o Arduino, oferece diferentes modos de economia de energia que possibilitam o gerenciamento eficiente do consumo energético.

Os modos de economia de energia do Arduino são funcionalidades que permitem que o microcontrolador reduza seu consumo de energia ao desativar ou diminuir o funcionamento de determinados componentes ou periféricos, preservando, ao mesmo tempo, as funcionalidades essenciais do sistema. Esses modos são especialmente úteis em aplicações alimentadas por bateria, onde prolongar a vida útil da bateria é um requisito importante.

 

Este artigo tem por objetivo explorar e fornecer informações sobre os modos de economia de energia oferecidos pelo Arduino, destacando suas funcionalidades e benefícios. Ao implementar essas estratégias, será possível maximizar a eficiência energética, prolongar a vida útil da bateria e reduzir o consumo de energia em seus projetos.

 

O que é o Modo de Economia de Energia do Arduino?

 

Basicamente, o Modo de Economia de Energia permite desativar ou reduzir o consumo de energia de determinados componentes do Arduino que não estão sendo utilizados em um determinado momento. Isso é alcançado através do controle dos modos de suspensão, desligamento de periféricos não essenciais e otimização do consumo de energia em níveis de hardware e software.

Ao utilizar esse recurso, é possível estender a vida útil da bateria, reduzir o desperdício de energia e tornar os projetos mais sustentáveis. O Modo de Economia de Energia do Arduino é especialmente valioso em projetos que operam de forma intermitente ou que requerem baixo consumo de energia durante longos períodos de inatividade.

Cada placa Arduino possui recursos específicos de economia de energia, como modos de suspensão, gerenciamento de energia em níveis de hardware e bibliotecas específicas para o controle de energia. Essas opções variam dependendo do modelo e da arquitetura da placa, mas todas visam otimizar o consumo de energia para garantir um funcionamento eficiente e econômico do dispositivo.

 

Modos de economia de energia do Arduino Uno

 

O Arduino Uno possui o microcontrolador Atmega328P, que oferece seis modos de economia de energia (modos sleep) diferentes. Dependendo do modo utilizado, mais ou menos dos seus componentes são desativados, resultando em economia de energia.

Através das interrupções externas e dos timers do Arduino mesmo que você coloque o ATmega328P em um dos modos de economia de energia (modos sleep), é possível ativar todos os recursos novamente.

Os modos de economia de energia existentes (modos sleep) são:

 

 - SLEEP_MODE_IDLE

 - SLEEP_MODE_ADC

 - SLEEP_MODE_PWR_DOWN

 - SLEEP_MODE_PWR_SAVE

 - SLEEP_MODE_STANDBY

 - SLEEP_MODE_EXT_STANDBY

 

SLEEP_MODE_IDLE:

 

O modo SLEEP_MODE_IDLE é o modo de economia de energia mais básico disponível no microcontrolador. Nesse modo, a CPU é desligada, mas os periféricos continuam operando normalmente. Isso significa que recursos como timers e interrupções permanecem ativos e podem ser utilizados. No entanto, a CPU fica inativa, sem executar nenhuma instrução, até que ocorra uma interrupção para despertá-la. Esse modo oferece economia de energia, mas permite que certas funcionalidades essenciais permaneçam operacionais.

Pode ser acordado por interrupções externas ou temporizadores internos.

 

SLEEP_MODE_ADC:

 

O modo SLEEP_MODE_ADC vai além do modo SLEEP_MODE_IDLE, desligando também o conversor analógico-digital (ADC). Essa funcionalidade é desativada para economizar ainda mais energia, já que o ADC consome uma quantidade significativa de energia quando está em uso. Se a aplicação do microcontrolador não requer amostragem analógica durante o modo de suspensão, utilizar o modo SLEEP_MODE_ADC pode resultar em uma economia adicional de energia.

Pode ser acordado por interrupções externas ou temporizadores internos.

 

SLEEP_MODE_PWR_DOWN:

 

O SLEEP_MODE_PWR_DOWN é o modo de economia de energia mais agressivo disponível. Nesse modo, quase todos os componentes são desligados para economizar energia. A CPU, os osciladores e a maioria dos periféricos são desativados, exceto algumas exceções, como interrupções externas em pinos específicos. Esse modo oferece o menor consumo de energia possível, mas o tempo de inicialização para acordar o microcontrolador é maior em comparação aos outros modos. É uma opção adequada quando a economia de energia é crucial e o tempo de resposta não é uma preocupação imediata.

Apenas algumas exceções, como interrupções externas em pinos específicos, podem acordar o microcontrolador.

 

SLEEP_MODE_PWR_SAVE:

 

O SLEEP_MODE_PWR_SAVE é um modo intermediário que desliga a CPU e, opcionalmente, alguns periféricos selecionados. No entanto, certos osciladores periféricos, como o Timer2, podem continuar a operar mesmo durante a suspensão. Esse modo permite um rápido despertar do estado de suspensão, com um consumo de energia relativamente baixo. É uma opção interessante quando se deseja equilibrar economia de energia e tempos de resposta rápidos.

Pode ser acordado por interrupções externas ou temporizadores internos.

 

SLEEP_MODE_STANDBY:

 

O SLEEP_MODE_STANDBY é um modo de economia de energia mais avançado que desliga a CPU e a maioria dos periféricos. No entanto, os timers e as interrupções externas ainda são capazes de acordar o microcontrolador do estado de suspensão. Além disso, certos pinos específicos, como INT0 e INT1, podem ser configurados como interrupções para despertar o microcontrolador. É uma opção adequada quando a economia de energia é prioritária e o tempo de resposta não é crítico.

Alguns timers e interrupções externas ainda podem acordar o microcontrolador.

Alguns pinos específicos, como INT0 e INT1, podem ser configurados como interrupções para acordar o microcontrolador.

 

SLEEP_MODE_EXT_STANDBY

 

Ao ativar o modo "SLEEP_MODE_EXT_STANDBY", o Arduino entra em um estado de baixo consumo de energia, desligando a maioria dos componentes internos, como o processador e os periféricos. No entanto, ele mantém a capacidade de ser ativado por uma interrupção externa, como um sinal de interrupção em um pino específico ou um evento externo.

 

A Tabela 1 fornece uma visão geral de quais recursos permanecem ativados nos diferentes modos de economia de energia. Os dados foram extraídos diretamente do datasheet do microcontrolador ATmega328P.

 

 

Tabela 1 – Modos de economia do microcontrolador Atmega328P

 

Na tabela apresentada, é possível observar quais clocks permanecem ativos e quais são desativados para cada modo de economia. Observa-se que os modos 'Power-down' e 'Standby' desativam todos os clocks listados, sendo, portanto, os modos que oferecem maior economia de recursos. A diferença entre esses dois modos é que o modo 'Standby' mantém o funcionamento do oscilador (no caso de um oscilador externo). As interrupções continuam operando e são a principal fonte utilizada para “acordar” o microcontrolador do modo sleep.

 

Exemplo de código utilizando o modo de economia SLEEP_MODE_PWR_DOWN.

No código a seguir, apresentamos um exemplo utilizando o modo de economia de energia (SLEEP_MODE_PWR_DOWN) do Arduino Uno. Basicamente o código alterna o estado do LED e coloca o microcontrolador em modo de economia " SLEEP_MODE_PWR_DOWN ". Ele permanece nesse modo de baixo consumo de energia até que ocorra uma interrupção no pino 2, o que “acorda” o microcontrolador e executa a função wakeUp().

 

 

Explicação do código

 

1 - Incluímos a biblioteca avr/sleep.h, que fornece as funções necessárias para controlar o modo de economia do microcontrolador ATmega328p.

 

2 - Definimos duas constantes: interruptPin para representar o pino de interrupção, que é definido como 2, e ledPin para representar o pino do LED, que é definido como 13.

 

3 - Na função setup(), O pino interruptPin é configurado como entrada com resistor de pull-up, enquanto o ledPin é configurado como saída. Em seguida, configuramos o modo de economia para " SLEEP_MODE_PWR_DOWN ".

 

4 - A função attachInterrupt() é usada para associar a interrupção do pino interruptPin à função wakeUp(). Isso significa que quando ocorrer uma interrupção de baixo nível (LOW) no pino interruptPin, a função wakeUp() será executada.

 

5 - Na função loop(), o código alterna o estado do LED conectado ao ledPin a cada 500 milissegundos, ligando-o e desligando-o em sequência.

 

6 - A linha sleep_mode(); coloca o microcontrolador no modo de suspensão. Quando essa função é chamada, o microcontrolador entrará no modo "Power-down" e permanecerá nesse estado de baixo consumo de energia até que ocorra uma interrupção no pino 2 (interruptPin), acordando-o e executando a função wakeUp().

 

7 - A função wakeUp() é uma função), que é chamada quando ocorre uma interrupção no pino 2 (interruptPin). Você pode adicionar seu próprio código dentro dessa função para executar ações específicas quando a interrupção ocorrer.

 

Conclusão

A utilização dos modos de economia de energia (sleep modes) no Arduino oferece várias vantagens significativas. Esses recursos permitem que os dispositivos baseados em Arduino sejam mais eficientes em termos de consumo de energia, o que é essencial em muitos cenários, desde projetos alimentados por bateria até aplicações de baixa potência.

Uma das principais vantagens dos modos de economia de energia é a capacidade de prolongar a vida útil da bateria. Ao colocar o Arduino em um estado de baixo consumo de energia durante os períodos de inatividade, é possível economizar energia e estender a duração da bateria significativamente.