Boa tarde! Estou desenvolvendo um projeto pára o meu TCC da faculdade, mas me deparei com um probleminha.
O projeto - Preciso que um processo de filtração atue quando chover, e que este processo só volte a acontecer após 3 dias.
Porém esta é só uma fase do sistema, e o processo não pode parar esperando estes 3 dias passarem (preciso de um contador que fique contando, enquanto o arduino continua executando os loops e funções normalmente)
Alguém poderia me ajudar? Grato!!!
Tags:
Use um RTC.
Abs.
muito obrigado! meu gmail é rafax8@gmail.com
Anotado!
Abs.
coloque um delay de 1 minuto dentro do loop (delay(1000)).
use um contador para contar cada passagem pelo loop.
use um if para ver se o contador chegou a 3 dias (3 * 24 * 60 minutos) .
Se não chegou, execute as funções normalmente.
Boa sorte,
'Eiju
Eiju, o problema da sua sugestão é quando o arduino resetar, como por exemplo quando houver falta de luz.
Se o arduino resetar, a contagem reinicia, causando a quebra da "regra" que é atuar a cada 3 dias.
Talvez a solução mais confiável seja mesmo um RTC aliado a gravação de dados na EPROM ou SD Card, dados este que consistem em manter o arduino informado sobre quando ocorreu a última filtragem de água.
Dessa forma, asbendo-se quando ocorreu a última filtragem de água, faz-se o cálculo de quanto tempo se passou e então toma-se decisão se deverá haver ou não nova filtragem
Por favor, inclua todos os requisitos do seu projeto.
Estou colocando a resposta conforme analiso o problema.
Caso não tenha um no-break, havendo a falta de luz, pode até ocorrer no momento que vence os 3 dias.
Se não precisar de precisão no período pode-se até filtrar quando retornar a luz para garantir.
Ou talvez seja mais adequado medir a qualidade da água.
Tudo depende do que o projeto precisa.
Boa sorte,
'Eiju
é um sistema de gerenciamento hídrico para fazendas. Iremos aproveitar a água do telhado dos galpões para abastecer a fazenda. A norma fala que podemos utilizar águas pluviais desde que seja realizado o first-flush(primeiro descarte) a cada 3 dias sem chuva, num intervalo menor que este, não é necessário pois não acumula sujidade considerável. este first flush é o que chamei de filtragem, e no nosso caso, o período é importante sim, deve atender esta exigência. Haver dados guardados num RTC ou na eeprom realmente ajudaria muito, pois numa falha, é importante que estes dados estejam armazenados.
Galera,
A resposta do Eiju não esta totalmente incorreta, esta apenas incompleta.
A coisa vai depender do nível de precisão, tipo, se realmente só precisa contar em dias ou horas, basta pegar a implementação do Eiju e a cada lapso de tempo, tipo, a cada uma hora, fazer um conter tipo ++ em uma variável salva na eeprom interna.
Dai o conter não precisaria ser por dias, mas por minutos tipo, a cada 60 minutos some mais um a variável existente.
Dai é facil 1 dia = 24 horas 3x24 = 72 logo, quando a variavel na eeprom chegar ao valor 72 ou qualquer valor desejado, ativa o sistema e manda a variável voltar pra 0 (zero) e começa tudo novamente.
Se rolar do arduino resetar ou qualquer coisa tipo um watchdog não rola trauma, ele só vai voltar a contar os minutos pra fechar uma hora.
Logo, se precisar de precisão absoluta, porem, utilizando algo externo, não tenha duvida, vá de RTC, porem, se precisar de implementação minima, com o minimo de componentes, Então siga a ideia do Eiju com o adendo acima.
show de bola weider! consegui entender, eu usaria contador para realizar a contagem de tempo certo? porém este delay de 1 minuto no início do loop não travaria meu programa durante 1 minuto?
Muito obrigado por explicar Weider.
Está correto, este delay de 1 minuto travaria seu programa por 1 minuto.
Não sei se vai fazer diferença ter 1 minuto de inatividade. Calculei assim pensando na imprecisão de 3 dias. Como ainda informou o que pretende fazer no intervalo de 3 dias, não sei qual o impacto de 1 minuto de inatividade. Com a informação que proveu até agora, não tem impacto nenhum.
O RTC é uma ótima opção também.
Porém, se o sistema for alimentado a bateria, mesmo usando o RTC, considere usar o delay fazendo o sistema todo "dormir" economizando a carga da bateria.
Olá Rafael,
Cara mais uma vez o Eiju tá correto, mas precisa de um adendo pra complementar.
Respondendo sua pergunta: SIM, se você utilizar Delay() você vai ter uma interrupção no seu sistema.
Porem, se você abrir a IDE do arduino, for em ARQUIVO / EXEMPLOS / DIGITAL você encontrará o sketch BlinkWinthOutDelay, trata-se do mesmo sistema de contagem porem, sem interrupção, utilizando a função mills().
O que é importante salientar aqui: Quando muitos usuários vão avançando no mundo arduino passam a achar que o uso de mills() é avançado e delay() é coisa pra iniciante, ISSO É UM ERRO! ambas as funções são importantes, e a verdadeira evolução vem da capacidade de saber quando usar uma ou a outra.
De regra geral seria algo mais ou menos assim:
Quando usar mills(): Quando no intervalo de tempo em que se deseje a pausa de uma função, deverá estar ocorrendo outras atividades, exemplo, digamos que você deseja piscar um led a cada 2 segundos, porem, nesse intervalo você deseja que um sensor qualquer como um de temperatura detecte se ouve variações e acione um buzzer, pra isso se usa o mills() ele fará piscar o led mas não interromperá as demais funções do sketch.
Quando usar delay(): Quando não há outras funções a serem realizadas naquele intervalo de interrupção, ou quando se deseja economizar código, visto que o delay é feito com uma linha simples, já o mills() precisa de implementação.
Logo, você escolhe, e vai depender do seu projeto.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por