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.
Temos os consumos de corrente com o LED ON e LED OFF respectivamente.
Segundo exemplo usando a função loseSomeTime.
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
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: