domingo, 21 de agosto de 2016

Reduzindo o Consumo de Energia no Arduino


INTRODUÇÃO

          Quando estamos desenvolvendo e testando nossos projetos com Arduino, não nos preocupamos com o consumo de energia elétrica do mesmo, pois, estamos usando a porta USB para alimentar o circuito e podemos usar uma fonte externa normalmente. Porém, em alguns casos, onde temos que fazer acessos remotos, aquisição de dados em locais de difícil acesso ou distantes, entre outros, reduzir o consumo de energia é importante para prolongar a autonomia da bateria.


DESCRIÇÃO

          Existe uma função loseSomeTime na classe Sleepy que faz parte da biblioteca JeeLib, que será o foco do nosso estudo.

          O que a função loseSomeTime faz é colocar o microcontrolador em estado de sono profundo e, obrigatoriamente temos que ativar o temporizador Watchdog (cão de guarda) para que seu temporizador seja usado com o objetivo de acordar o microcontrolador.

Observe os exemplos abaixo com seus respectivos resultados usando a placa Arduino Mega 2560:


Primeiro exemplo sem usar a função loseSometime.
int led = 13;

void setup() {
    pinMode(led, OUTPUT);
}
void loop() {
    digitalWrite(led, HIGH);
    delay(10000);

    digitalWrite(led, LOW);
    delay(10000);
}

Temos os consumos de corrente com o LED ON e LED OFF respectivamente.




Segundo exemplo usando a função loseSomeTime.
#include <JeeLib.h>

int led = 13;

ISR(WDT_vect) { Sleepy::watchdogEvent(); }

void setup() {
    pinMode(led, OUTPUT);
}
void loop() {
    digitalWrite(led, HIGH);
    Sleepy::loseSomeTime(10000);

    digitalWrite(led, LOW);
    Sleepy::loseSomeTime(10000);
}

Observem que adicionamos a biblioteca #include <JeeLib.h>.

Em seguida ISR(WDT_vect) { Sleepy::watchdogEvent(); } é necessário para definirmos o manipulador de interrupção WDT.

E por fim Sleepy::loseSomeTime(10000).

          O tempo é definido em milissegundos, porém, não possui precisão ao usar o temporizador Watchdog, temos um pouco de perda na contagem que pode ser administrado sem problemas de acordo com a necessidade de cada projeto. Fica por conta de você leitor analisar a melhor situação.

          O valor máximo de tempo aceito pela função é 60000 milissegundos (60 segundos), caso o leitor deseje um tempo maior, será necessário criar um loop.

Por exemplo, um tempo de três horas (180 minutos):

for(int x = 0; x < 180; ++x)
    Sleepy::loseSomeTime(60000);


Veja agora os consumos de corrente com LED ON e LED OFF respectivamente.




          Em nosso exemplo, obtivemos uma redução de 62% no consumo de corrente elétrica. Este percentual irá variar de acordo com a placa Arduino e quantidade de portas usadas mas, sem dúvida teremos uma redução muitas vezes significativa.

          Para vocês terem uma ideia, se aplicarmos neste exemplo baterias CR2032 usadas em placas-mãe de computadores teremos o seguinte resultado:

A bateria pode fornecer algo em torno de 150 mA.

No exemplo 1, sem a JeeLib teríamos uma autonomia em torno de 2 horas de funcionamento.

No exemplo 2, com a JeeLib teríamos uma autonomia de torno de 5 horas e 20 minutos.


Segue um vídeo de apoio:




DOWNLOAD

Biblioteca JeeLib  https://github.com/jcw/jeelib

Documentação JeeLib  http://jeelabs.org/pub/docs/jeelib/index.html


0 comentários:

Postagem mais recente Postagem mais antiga Página inicial