boa tarde garagistas....

to com um projeto, onde vou automatizar meu aquario...

minha primeira dificuldade foi em fazer o horario dos eventos...

bom consegui montar um DS1307 com isso pela comunicação i2c meu arduino tem 

relogio externo...

consegui gazer o comenado para que em determinado horario  ele dispare o evendo,

até ai tudo certo.... agora meu "passo a mais" seria setar a horas dos evendos...

ffiz uma variavel que conta o numero de pulso que eu dou em um botão.... ou seja, essa variavel seria para altera a "hora" do disparo do evendo.... meu problema é o seguinte... quando eu faço esse codigo de contagem sozinho ele funciona perfeito.... porem na hora que e adiciono ele no codigo do DS1307 (turo todos dos delay da programação) eu nãoconsigo mais fazer a contagem.... ou seja, quando eu disponibilizo a informação i2c nçao consego mais fazer as contagens,alguem tem alguma ideia? 

abraços

Exibições: 4181

Responder esta

Respostas a este tópico

Janderson,

estou fazendo algo parecido. Minha filhinha tem um Betta que precisa de cuidados. Quero usar o arduino para facilitar algumas coisas. E ainda quero associar o aquario com um bonsai que tenho fazendo um penjing.

Vamos trabalhar juntos nisso? Considero que sim.

Então vamos ao projeto.

Acho que posso ajudar e tenho certeza que traremos mais pessoas para o grupo. Como não consigo ajudar acompanhar todos os posts espero que as pessoas que precisem vejam a informação aqui.

Vou colocar parte de um código que já está funcionando dai vamos comentando cada parte, ok?

Nesta primeira parte criou-se uma sequencia de dados que são consultados pelo programa. Veja que a informação de horário é armazenada na forma binária. Isso é uma das coisas mais interessante. Então existe uma função que faz binario decimal e outra decimal binario.

Depois o código usa a função if para comparar informações.

***********************************************************************************************************************************************/ // these arrays store timer data // on hour, on minute, off hour, off minute, day of week [1-7 Sun>Sat, 8 = daily, 9 = weekends, 10 = weekdays], on/off (0 off 1 on) int t1[7]= { //Timer do motor de 1cv   0,0,0,0,0,0,0}; int t2[7]= { //Timer do alimentador   0,0,0,0,0,0,0}; int dd=1000; // used for delay in show timer data

#include <Wire.h> #define DS1307_I2C_ADDRESS 0x68 #include <LiquidCrystal.h> // we need this library for the LCD commands LiquidCrystal lcd(12,11,5,4,3,2);

// Convert normal decimal numbers to binary coded decimal byte decToBcd(byte val) {   return ( (val/10*16) + (val%10) ); }

// Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) {   return ( (val/16*10) + (val%16) ); }

// aqui é o codigo para o RTC uso o DS1307

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
Serial.begin(9600);
Wire.begin();
RTC.begin();

if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}

void loop () {
DateTime now = RTC.now();

?*Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);*/
}

//essa parde da serial , podemos tirar, pelo fato de nao utilazar e tem um delay ali no final que fara o programa ficar sendo interrompido..

Olha,

realmente vi esta lib RTC.lib.h mas não cheguei a usá-la. Minha duvida é quanto ao ajuste do relógio. Será que foi colocado informação em binário?

Nunca vi este código funcionando. Vou ver se encontro um código para testar no meu equipamento já que funcionou com o outro.

vc quer que tipo de automação? iluminação, alimentação, oxigenação?

isso, é esse tipo de altomação... para eu fazer algum tipo de comando para o RTC eu tenh que chamar uma função assim

DateTime agora = RTC.now();
if(agora.hour() == 11 && agora.minute() == 0 && agora.second() == 0)
{
    // Executa toda vez que for 11:00:00 hs
    // Exemplo, acende um led
    digitalWrite(13, HIGH);
}
isso faria com que minha iluminação acenda por exemplo...  isso eu ja fiz ja testei e funciono....
porem, vamos  dizer que eu faça esse projeto para vender,e meu cliente queira ajustar esse horario como ele quiser..... eu tava pensando em fazer algo mais ou menos assim.....

int hora_liga = 0;
int hota_desliga = 0;
int botao = 10;


void setup (){
pinMode (botao, INPUT); // aqui seria um botão para ajustar a hora de ligar
digitalWrite(botao,1);// ativo resistor de elevação
digitalWrite(13, OUTPUT); // led que vai simular o lampada do aquario
digitalWrite(13,0); // fica desligado até a funçao dele for verdadeira...
Serial.begin (9600); //inicia a serial a 9600 bauts
Serial.println ("iniciando Seria...");// string pra confirma que a serial ta iniciada
}

void loop (){
if (digitalRead(botao)==0){//si voce perta o botao entra aqui
if (digitalRead(botao)== 1){//se voce solta o botao entra aqui
hora_liga++;
Serial.println (hora_liga);
delay (300);
}

}
}

eu nao testei esse codigo agora, mas teoricamente é pra ele funcionar.....

ai aquele hora_liga seria pra ser uma variavel la no codigo de cima,onde ta o numero 11(11 horas)

só que.... quando eu faço esse codigo de baixo beleza... funciona perfeito,porem quando eu bota a comunicação i2c pra funcionar ele não conta mais nada.... ai não sei como eu faço pra troca a variavel ali hora_liga

nao sei se fui bem claro.... esse é o ultimo problema que eu to tendo....

Alterando somente a variável com seu novo horário, quando o circuito for reinicializado, teria que reconfigurar os horários outra vez. Talvez seria melhor gravar os horários em memória (eeprom).

boa fellipe vou dar uma estudada nisso hoje....

mas sera que eu nao continuaria com o meu problema de não conseguir fazer a contagem?

porque meu problema no momento não seria o armazenamento,e sim como altera essa variável...

como falei ali em cima... eu não consigo fazer um "contador" quando minha comunicação i2c entra na jogada

grato!

Respondendo na pressa agora... Mas...

Um tempo atrás fiz um circuito com RTC e resolvi usar uma biblioteca pra isso. Talvez dê alguma ajuda... Postei no blog: http://www.efeitonerd.com.br/2012/04/relogio-digital.html

Abraços!

Ola galera fiz um relogio com RTC, mas toda vez que desligo o arduino e volto a ligar ele volta para a hr que setei.Vcs poderiam postar o código de como setar a hora.Thanks

Amigo,

eu fiz assim, setei o horário e depois comentei o codigo deixando só a consulta.

Funcionou.

Queria saber mais noticias sobre o projeto do aquario. Tem alguma notícia nova?

estou precisando pegar a hora atual com o rtc. Tem algo aí que possa ajudar?

como assim mano, explica melhor,,,

tenho o rtc. Quero que ele verifique qual a hora atual e armazene em variaveis hora minuto e segundo.

Quero fazer um relogio com o arduino

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço