Em nosso datalogger estamos trabalhando com a função Millis, enquanto o correto seria um RTC, que será implantado no futuro, uma vez que já possuo um guardado. Só que o Millis apresenta um imprecisão, pois mesmo que você coloque o código para rodar a cada 1000ms, as leituras do millis não serão:
1000
2000
3000
Isso porque existe um tempo de execução do código, então esse tempo precisa ser adicionado, no código de exemplo que utilizamos nesse post, a leitura foi feita a cada 5 segundos, e a cada leitura 1ms foi adicionado. Assim a leitura do millis foi:
5001
10002
15003
20004
Seguindo a documentação do Arduino, o millis reseta a cada aproximados cinquenta dias, então no final de quarenta dias (vamos trabalhar com uma margem), qual será o nosso erro?
40 dias = 960 horas = 57600 minutos = 3456000 segundos = 3456000000 milissegundos
Se a nossa leitura ocorrer a cada 5000ms, teríamos:
3456000000/5000 = 691200 gravações
Então, se cada gravação for adicionado 1ms ao nosso tempo final, o millis aos 40 dias deveria ser 3456000000, passará a ser 3456691200.
Ou seja, com 40 dias ligado rodando um código muito pequeno o nosso Arduino estaria 8 dias errado. 20% errado.
Claro que se o nosso logger fizer leituras a cada 10 minutos (3456000000/300000 = 11520), o nosso arduino estaria 11,52 segundos atrasado. Bem mais aceitável né. Mesmo que isso signifique mais de duas leituras.
O problema é que nosso código não rodará em 1ms, e isso ampliará o erro. Então para usar Millis em um datalogger temos dois lados para corrigir o erro, elevar o tempo entre a execução de código demorados e reduzir o tempo para o código se executado.
Ou seja, você precisa reduzir as funções do código ao mesmo tempo que faz leituras menos vezes, ou seja, reduz a precisão do trabalho.
Ou você pode usar um RTC, que implica em mais energia, mais código, mais espaço e mais dinheiro. Mas que no final faz mais sentido também.
Ao adicionar o millis em nosso código vamos ver quanto que será o nosso erro.
Nenhum comentário:
Postar um comentário