Intervalo de funcionamento (hora certa, comparando horas)

Essa ideia serve para acionar cargas nos intervalos especificos, e nao apenas no instante momento que foi acionado!

Muitas vezes precisamos saber o intervalo que algo precisa ser acionado ou não acionado ou seja o real estado de funcionamento. Com isso muitos de nós comparamos apenas a hora inicial e a hora final, nunca verificamos o intervalo logo se o equipamento nesse meio tempo ficar desligado e for ligado não terá o estado real de funcionamento!! Isso pode ser resolvido com uma bateria caso falte energia externa.

Na construção de um algoritmo que ao ligar o equipamento ele possa estar corretamente no estado real de acordo com os a hora inicial e hora final. vejamos a conclusão:

vamos simular as seguintes horas reais vinda do RTC (Relogio de tempo real) : 01:00, 05:00, 21:00,

Os intervalo de tempo seguirão o seguinte padrão: <inicial>, <final>

TESTE INTERVALO: 04:00, 10:00 

O grande segredo é converter a hora para inteiro retirando os ":"

Define o primeiro conceito quando a hora (inicial < final):

if (inicial < agora < final)

Simulando (400 < 100 < 1000) é falso!

Simulando (400 < 500 < 1000) é verdadeiro!

Simulando (400 < 2100 < 1000) é falso!

Define o segundo conceito quando a hora (inicial > final):

TESTE INTERVALO: 20:00, 03:00

if ((inicial > agora < final) ou (inicial < agora > final))

Simulando ((2000 > 100 < 300) ou (2000 < 100 > 300)) verdadeiro!!

Simulando ((2000 > 500 < 300) ou (2000 < 500 > 300)) falso!!

Simulando ((2000 > 2100 < 300) ou (2000 < 2100 > 300)) verdadeiro!!

Seguindo essa logica da pra definir corretamente o estado real do equipamento, em qualquer instante em que se desejara, essa foi a melhor forma que achei para trabalha com horas, convertendo elas para inteiros comparando se é maior ou menor, em outras programações comparar horas ou datas é muito facil, mas com o arduino tive uma dificuldade, e muitos codigos com deficiencia nessa parte, por isso estou postando essa ideia caso alguem tenha uma melhor e queira compartilhar será bem vindo!! Muito obrigado!!

Acionamento_no_intervalo.ino (Pequeno exemplo)

Exibições: 1527

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Thiago Condé em 5 outubro 2017 às 20:23

Estou com dificuldade de criar um algoritmo que trabalhe nos horarios estipulados. Hora é para desligar hora para ligar de acordo com uma tabela que faz verificação todo instante. Para facilitar os cálculos as horas e minutos são concatenados ex: 12:00 -> 1200 ou 01:00 -> 100 .
10:00 liga 
12:00 desliga 
15:00 liga 
20:00 desliga 
21:00 liga 
03:00 desliga
preciso fazer um algorimo que pegue a hora atual e compare com a lista e fale se esta ligado ou desligado!!
Exemplo agora é 11:00 é para esta ligado qual logica poderia usar para definir se esta desligado ou nao de acordo com a hora "atual" e a "hora de cada linha" percorrida em toda a tabela? nao sei se me entenderam qualquer sugestão sera bem vinda!

Comentário de Thiago Condé em 8 outubro 2016 às 9:49

Isso mesmo!  Falta a lib, e o modulo, setado na hora certa. Mas que bom que entendeu, no começo eu nem imaginava de como iria fazer essas situações serem verdadeiras, pois queria comprar hora, e depois minutos, separadamente, as vezes os minutos seriam maior ou menor, a hora tbm, iria complicar mais, ai pesquisando achei uma aplicação onde o cara fez algo assim, mas para um programa desktop, no caso, outras programações a hora é nativa e tem o timestamp que é a hora int em ordem, mas no arduino não tem. Mas isso quebra um galhão. 

Comentário de Tiago Alexandre em 8 outubro 2016 às 1:23

Thiago, acho que entendi seu exemplo, show de bola a ideia, vou testar aqui, acho que só faltou colocar a Lib que você usou, imagino que seja essa aqui:
https://github.com/chrisfryer78/ArduinoRTClibrary

Obrigado por compartilhar.

Comentário de Thiago Condé em 7 outubro 2016 às 19:26

Acionamento_no_intervalo.ino (Pequeno exemplo)

Comentário de Tiago Alexandre em 7 outubro 2016 às 11:44

Opa, ficaremos no aguardo, aparentemente fica bem sucinto o código, contribuirá bastante, o  comando manual e automático também é uma excelente contribuição.

Comentário de Thiago Condé em 7 outubro 2016 às 10:44

Fala Tiago, eu vou montar um exemplo simples e comentado, vou tentar editar ou criar um novo post, comentar passo a passo. Vou incluir tbm, o comando manual e automático. Isso será mais a noite pois agora estou trabalhando. 

Comentário de Tiago Alexandre em 6 outubro 2016 às 12:56

Thiago, muito interessante o conceito, estou precisando exatamente de algo asim.

Teria como mostrar um exemplo pratico, eu entendi o conceito, mas não consegui montar a execução.

Comentário de José Gustavo Abreu Murta em 3 outubro 2016 às 22:28

Muito obrigado. 

Comentário de Thiago Condé em 3 outubro 2016 às 15:43

Isso mesmo pode ser usado com minutos tbm!!

Eu usei apenas duas linhas para conveter a hora do modulo:

 myRTC.updateTime();
 int agora = myRTC.hours*100 + myRTC.minutes; //concactenando

Ja a hora final e incial pode ser diretamente usada como inteiro ou convertida ".toInt()"

E funciona perfeitamente me atendeu muito bem, dispensa bibliotecas etc.

Comentário de José Gustavo Abreu Murta em 2 outubro 2016 às 13:22

Bom dia Thaigo, 

Toda nova solução é sempre bem vinda. 

Como converteu as horas em inteiros ? (sketch) 

Dá para usar minutos também, não é ? 10:52 , 04:32 , etc. 

Obrigado por compartilhar. 

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço