Amigos,

 

ja estou com meu arduino uno a pleno vapor. Recentemente adquiri um DS1307 RTC para incorporar horas aos meus projetos. Consegui fazer as ligações e acertar o horário.

 

Agora estou procurando como definir que determinada ação aconteca em determinado horário, como ligar uma luz. Não sei fazer isso e estou pedindo uma ajuda.

 

qualquer dica será bem vinda. Se tiverem um modelo, ou um site que eu possa utilizar será muito útil.

Na net até hoje só encontrei como configurá-lo mas não como chamar a função.

 

Podem me ajudar?

Exibições: 8717

Responder esta

Respostas a este tópico

Olá Sidney!

Encomendei meu modulo DS1307 essa semana! Quando chegar vou começar a aprender.

Mas imagino que você deva passar a data/hora para variáveis no momento da escolha do usuário, e logo compará-las em um ciclo...

Por exemplo, vamos supor que você criou uma interface com um display LCD, e o usuário entrou no menu

"Escolha do horário de disparo". O usuário deve escolher Dia / Mês / Ano / Hora / Minutos / Segundos. Assim

que o usuário confirmar o horário desejado, vc passa esses valores pra uma variável string...

Após isso o sistema entra em um ciclo de comparação, pode ser um while por exemplo,

no qual vc compara a leitura em tempo real do DS1307 e a String de entrada do usuário.

Enquanto elas forem diferentes vc segue com o ciclo de leitura. Se elas forem iguais, vc sai do while

e parte pra ação desejada.

Deve ser algo semelhante a isso! Esse tutorial pode ajudá-lo: http://bildr.org/2011/03/ds1307-arduino/

Abraço!

Diego,

se seu DS1307 ainda não chegou vamos começar a programar e dai quando chegar já terá resolvido todas as pendências.

Bom, entendi o que vc falou.

Mas como vou ligar um motor, por exemplo, 1 hora, a partir das 19:00 não sei como fazer para cobrir esta faixa de minutos.

Pensei em especificar somente as horas, mas dai se o tempo começar as 19:30 até as 20:30 complica de novo.

 

Estou estudando vários meteriais, mas se já tiver adiantado vamos discutir o código.

Como disse já acertei as horas sem problema.

sei pegar a hora atual, mas dai em diante não sai mais nada.

Olá Sidney! Chegou meu módulo da Sparkfun ontem! Mas só vou poder

programar após o ano novo!

Mas enquanto isso vamos debatendo!

No código exemplo do Arduino no link que passei ele pegou cada informação

e colocou em uma variável:

int second = bcdToDec(Wire.receive()); 
int
minute = bcdToDec(Wire.receive());

int hour = bcdToDec(Wire.receive() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.receive()); //0-6 -> sunday - Saturday
int monthDay = bcdToDec(Wire.receive());
int month = bcdToDec(Wire.receive());
int year = bcdToDec(Wire.receive());

Vamos tentar desenvolver algo... Eu ainda não usei o DS
mas vamos trabalhar com a hipótese abaixo...

Vamos supor que você deseja ativar o motor
as 19:24 até 20:31 e agora são 18:25.

Se vc colher os dados do DS nesse momento,
na variável "hour" vc terá o valor int "18"
e na variável "minute", o valor int "25".

Para a nossa lógica, creio que devemos
ter outras variáveis, com a hora e minuto
de ativação e outras para quantas horas
e minutos o sistema atuará

Ok, o usuário entra no display LCD
que ele quer que o sistema seja ativado
as 19:24. No momento da inserção do
usuário vc guarda os valores "19" na
variável int "HoraInicio" e o valor "24"
na variável int "MinutoInicio".
O usuário também deverá entrar com
o valor de hora e minuto em que o
sistema ficará ativo. No nosso caso,
1 hora e 7 minutos (das 19:24 até 20:31).
Na variável int "HoraAtuacao" você guarda o valor "1"
e na variável int "MinutoAtuação"
vc guarda o valor "7".

Agora você calcula o horário final.
Pra isso você soma
int HoraAtivacao = HoraInicio + HoraAtuação" (19 + 1 = 20)
e depois soma
"int MinutoAtivacao = MinutoInicio + MinutoAtuação" (24 + 7 = 31)

(ATENÇÃO!
Se "MinutoInicio + MinutoAtuação > 60",
a soma ultrapassou 60 minutos e você deve
somar + 1 no "HorárioInicio", e logo
fazer "60 - (MinutoInicio + MinutoAtuacao)").
(Verificar também se o sistema passou da meia noite!
Tem que compensar na soma)


Pronto! Agora você entra num While
e fica comparando (a cada segundo ou algo assim)
"HoraAtivacao" e "MinutoAtivacao" com "hour" e "minute".
se forem diferentes vc segue no While!
Se forem iguais você sai do While e ativa o motor!

Acho que isso deveria resolver!
Não esqueça de comentar os progressos, hehehe, não vou poder programar até
dia 2 =-(!!!!

Abraços!



Diego,

 

foi ótimo sua ajuda. Já conseguiu abrir minha mente para as possibilidades. Entre natal e ano novo vou trabalhar neste projeto.

Quero publicar meu projeto para  discussão aqui no labdegaragem e colocar à prova.

 

até

como os dados saem do rtc? vc's sabem, pergunto saem digital (zeros e un's) ou analógicos...? poderiam tratar dessa maneira... pelo valores... é só uma idéia....

Allan,

 

sei que o RTC DS1307 tem comunicação I2C. Podemos usar um comando Gettime e ele fornece o tempo atual.

Já estou rascunhando o projeto.

Quem tiver mais idéias, por favor nos ajude.

vc poderia publicar o que ja tem?

Diego,

 

conseguiu algum progresso?

Preciso de ajuda pois não consigo andar com este projeto.

Se eu tivesse um exemplo simples de como ligar um led em horario programado já me ajudaria.

void loop() {

   If (HORA = HORA_QUE_QUERO_ACIONAR_A_CARGA) {

      .... AcionaCarga();

   }

}

Se não for uma lógica condicional feito essa, eu não entendi a pergunta...

Abraços!

Fellipe,

é isso mesmo. Condicional.

Mas então deixa eu entender. Vou falar os passos e veja se daria certo.

1. Configuro o RTC1307 com a hora atual.

2. Defino hora como variavel.

3. Uso a condicional. Se hora e minuto for a que quero então ele liga.

 

Agora surgiu uma dúvida. Se quero ligar a bomba em uma faixa de tempo, tipo das 19:30 a 20:20 como eu faria para funcionar nessa faixa.

 

Acho que com essa ajuda sua vou resolver meu problema. Agradeço muito pois sou iniciante e não tenho os caminhos para seguir.

 

até

O caminho é por ai mesmo.

Quando a for maior ou igual a hora que deve ser acionada, mantém acionado.

If (hora >= hora_programada_para_ligar) ...

Só precisa verificar a forma que vai utilizar as variáveis, se vai tratar os segundos tbm.... Mas é isso mesmo. O caminho ta certo.

Montei um reloginho despertador uma vez, e usei dessa forma.

Vc precisa tratar tbm a data, pois existe a condição de acionar às 23h e deligar somente às 07h da manha do outro dia.

Abraços!

Fellipe,

 

que bom. Acho que vai sair. Se eu fizer o programa posso mandar o arquivo para você? Vc tem o IDE do arduino instalado na sua maquina? Dai eu mandaria o .pde para vc olhar.

Pode ser?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço