collapse

* Posts Recentes

O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Contagem com o relogio DS1307  (Lida 4573 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline AntonioGoncalves

  • Mini Robot
  • *
  • Mensagens: 5
Contagem com o relogio DS1307
« em: 11 de Fevereiro de 2017, 23:16 »
Boa  noite pessoal

Sou novo por aqui, descobri este Forum nas minhas pesquisas para um projeto que gostaria de fazer ,devo dizer tambem que estou comecar com o arduino faz pouco tempo unicamento tenho feito codigos basicos

Agora tenho um desafio maior pela frente e sozinho não esta nada facil e como vi que aqui tambem se USA o arduino resolvi pedir ajuda!

Bem tenho que fazer uma pequana automatização para uma estufa de plantas onde tem que estar 30 dias  e ter uma janela de ventilação aberta um serto tempo e outro fechada!

Ou seja  o arduino começao a contar os 30 dias a partir de quando è ligado  e mostrar no LCD20X4(para eu nao ter engano nos dias ), e a janela esta 4 Horas aberta e passados 4 Horas fecha e assim sucessivamnte os 30 dias. mas estes tempo sacados do DS1307

A janela vai fincionar com um Motor de caixa redutora  12V 1A e com dois Switchs um fim de abertura da janela e outro quando fim de janela fechada !

Gente como disse jà pesquisei tudo e nao encontrei nada que me ajuda-se , por isso serà que algem deste Forum  me pode ajudar a realizar Estas funcoes para o arduino com o descrito em cima ???

Sinceramente neste momento nao sei por onde pagar !! ainda comecei a fazer a contagem dos dias mas aparece varios nemeros seguidos no LCD

O codigo que fiz ate Agora è o seguinte:

Código: [Seleccione]
#include <Wire.h>//livraria para o manejo do protocolo i2c
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include "RTClib.h" //l
#define DHTPIN 7 //
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27,20,4);// Display 20x4
RTC_DS1307 RTC;//

int puls1=8;
int puls2=4;
int puls3=6;
int modo=9;
int led =13;
char texto[10];
int horas=17,minutos=16,segundos=0,anos,mess,dias=0;
int inicio=0;
//char daysOfTheWeek[7][14] = {"Domingo", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sabado"};
//a linha acima é um array com os dias da semana

String zero(int n){ //função que verifica se o numero é menor
                    //que dez, e se for adiciona o 0 antes
  if(n < 10){       //Exemplo: entra 5, sai 05-> 00:05:00
    return "0" + String(n);       //como seria-> 00:5:00
  }else{
    return String(n);
  }
}


void setup ()
{
  // serie, wire, modulo RTC y LCD
    //Serial.begin(9600);
    Wire.begin();
    dht.begin();
    RTC.begin();
   
    lcd.backlight();
    lcd.init();
       //RTC.adjust(DateTime(__DATE__, __TIME__));//ajusta o relogio por software
    //RTC.adjust(DateTime(2014, 1, 21, 3, 0, 0));//Se Ajusta la hora por Software
   pinMode(8,INPUT);//pin de aumento
    pinMode(9,INPUT);//pin configuracao
    pinMode(led, OUTPUT);
}
void loop ()
{
  // mostrar_lcd();
  DateTime now = RTC.now(); //
    float h = dht.readHumidity();// lê a humidade
    float temp = dht.readTemperature(); //lê a temperatura
   
  mostrar_lcd();
  delay(50);
  lcd.setCursor(0,0); //
  lcd.print("Temp.: "); // Prints string "Temp." on the LCD
  lcd.print(temp); // Prints the temperature value from the sensor
  lcd.print(" C");
  lcd.setCursor(0,1);
  lcd.print("Humi.: ");
  lcd.print(h);
  lcd.print(" %");

///////////////// Ajustar a Hora
    int hora=now.hour();
    int minuto=now.minute();
    int segundo=now.second();
    int ano=now.year();
    int mes=now.month();
    int dia=now.day();

[i][i] //Comecei afazer a contagem dos dias mas aparece Numeros estranos [/i][/i]

    if (hora==horas && minuto==minutos && segundo==segundos && inicio>0 )
    { 
      inicio=inicio+1;
      lcd.setCursor(17,0);
      lcd.print(inicio);
       
      delay(500);
   }     

void mostrar_lcd()
{
     DateTime now = RTC.now(); //se accede a los datos del RTC
 
     // Se imprime en el primer renglon posicion 0,0
     lcd.setCursor(0,2);
      //Se Imprime el data
     lcd.print("date.: ");
     lcd.print(zero(now.day()) + "/" + zero(now.month()) + "/" + now.year());
      //Se Imprime el horario
     lcd.setCursor(0,3);
     lcd.print("time.: ");
     lcd.print(zero(now.hour())+ ":" +  zero(now.minute())+ ":" + zero(now.second()));

delay(50);
}

Offline LVirtual

  • Mini Robot
  • *
  • Mensagens: 472
  • http://www.s-tronika.com
    • S-Tronika - Serviços Técnicos de Electrónica
Re: Contagem com o relogio DS1307
« Responder #1 em: 12 de Fevereiro de 2017, 18:39 »
eu nao sei programar arduinos, mas sei que os RTC's da dallas forncem sempre a Data/hora em formato bcd.
no caso deste RTC os dados saem de forma serial, noutros mais antigos eram de forma paralela.

o formato BCD é um formato quase decimal :)
tens aqui a sua descriçao: https://en.wikipedia.org/wiki/Binary-coded_decimal

tens que implementar um conversor de bcd para decimal no sw do arduino e depois fazeres as contas numa subrotina de contador para saberes quando passaram 4 horas para fechar a a janela e depois para a abrir.

se estas a usar formatos hexadecimais para essas rotinas vai dar sempre barraca porque o BCD é essencialmente decimal.

no BCD cada digito é formado por 4 bits, num byte tens dois digitos seguidos, no caso deste integrado é assim: https://drive.google.com/open?id=0B4i9yBKv1LG4Zkg3R2lCN0tocjQ

como o formato bcd é digitos de 0 a 9 em binario de 4 bits, podes sempre fixar uma hora certa para abrir e fechar a janela e ao leres o byte dessa hora no RTC disparas a funcçao de abrir ou fechar. isto se for sempre para abrir ou fechar a mesma hora. senao teras que comparar continuamente a hora do RTC com as horas fixadas numa memoria nao volatil para disparares as funcçoes respectivas.


mais um edit:
e nao deverias usar numeros formatados como strings para fazer calculos matematicos, mas antes formatados como inteiros ou longos...
« Última modificação: 12 de Fevereiro de 2017, 18:45 por LVirtual »
"O defeito mais grave dos humanos, aquele que coloca mais obstáculos à sua evolução, é a crença profundamente arreigada na infalibilidade dos seus raciocínios e dos seus pontos de vista."

Offline AntonioGoncalves

  • Mini Robot
  • *
  • Mensagens: 5
Re: Contagem com o relogio DS1307
« Responder #2 em: 12 de Fevereiro de 2017, 19:29 »
Obrigado LVirtualpor responder!!

Realmente o que pertendo è outro caminho visto que os formatos da Hora e data jà  estao tratados na biblioteca !

Como disse em cima o meu problema è emplementar o codigo para que o arduino faço o que descrevi no poste anterior , mas para isso algum aqui do Forum com esperiencia na programaçao do arduino me fize-se o basico do que pertendo para eu depois com essas bases desenvolver mais o meu projeto , eu nao queria o codigo feito de bandeja , mas uma coisa è verdade eu nao tenho neste momento conhecimento para mais !

O codigo que fiz foi baseado em pesquisas que fiz e depois tento compreender e desenvolver mais ,mas infelimente tenho que ver os exemplos estudalos e depois seguir em Frente

Espero vossa compreenção

Offline LVirtual

  • Mini Robot
  • *
  • Mensagens: 472
  • http://www.s-tronika.com
    • S-Tronika - Serviços Técnicos de Electrónica
Re: Contagem com o relogio DS1307
« Responder #3 em: 12 de Fevereiro de 2017, 19:53 »
parece-me que tambem dará jeito saber como é que estas a usar fisicamente o RTC DS1307.
se num modulo externo em que envia para o arduino essa informaçao se é o RTC de referencia do proprio arduino...
O circuito integrado em si, existe e é usado em muita coisa para alem dos arduinos.
Olhando de forma enviesada para o codigo fonte vejo algo que tambem nao é bom para calculos matematicos como os sinais de ":" no formato string da data. se queres comparar dois numeros que é o caso nao podes ter nada em formato alfanumerico. nem precisas de estar a fazer concatenações de algarismos e letras para verificar se uma data esta igual a um valor requerido. pelo que disseste so precisas de saber a hora do dia, portanto andar ai a meter 2 pontos no meio dos numeros e a converter em string  tambem nao me parece muito logico...
pega no que ja sabes de programaçao e reformula tudo. ;)
"O defeito mais grave dos humanos, aquele que coloca mais obstáculos à sua evolução, é a crença profundamente arreigada na infalibilidade dos seus raciocínios e dos seus pontos de vista."

Offline AntonioGoncalves

  • Mini Robot
  • *
  • Mensagens: 5
Re: Contagem com o relogio DS1307
« Responder #4 em: 12 de Fevereiro de 2017, 20:45 »
Lvirtual esse codigo esta a funcionar na bancada Sem problema esse formato string  nada tem a ver  visto isso è so para mostrar no LCD!

O que eu nao estou conseguindo è por em paratica  de como fazer as funcoes para que eu consiga o que quero!

Estou quase a ficar careca de tanto teste que tenho feito e nao da certo !

Obrigado pela atenção

Offline LVirtual

  • Mini Robot
  • *
  • Mensagens: 472
  • http://www.s-tronika.com
    • S-Tronika - Serviços Técnicos de Electrónica
Re: Contagem com o relogio DS1307
« Responder #5 em: 12 de Fevereiro de 2017, 20:47 »
relê o que eu escrevi. isso é tudo uma questao de raciocinio logico... ;)
"O defeito mais grave dos humanos, aquele que coloca mais obstáculos à sua evolução, é a crença profundamente arreigada na infalibilidade dos seus raciocínios e dos seus pontos de vista."

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Contagem com o relogio DS1307
« Responder #6 em: 12 de Fevereiro de 2017, 22:39 »
Esse código compila com um } a menos?

Que funções queres fazer, ou melhor, tenta dizer/explicar como queres implementar a coisa.
Amanhã já olho melhor para o teu código e volto a reler os vossos textos, que acho que só se estão a confundir mais um ao outro....
Avr fanboy

Offline AntonioGoncalves

  • Mini Robot
  • *
  • Mensagens: 5
Re: Contagem com o relogio DS1307
« Responder #7 em: 13 de Fevereiro de 2017, 15:42 »
Ola senso ,obrigado pela ajuda!

A falta da chave foi talves quando eu copiei o codigo  e fiz algumas alterações  esqueci da chave ,mas o codigo foi compilado Sem problemas Antes de o colocar aqui

senso como eu ja descrevi em cima o que pertendo è o seguinte;

Eu quero que quando ligar o arduino os dias começa a partir desse momento  a contar os dias ou seja se o arduino foi ligado ao 12:00 cemeça a contar a partir desse momento e passado 24 Horas conta um dia e assim sucessivamente ate ao 30 dia e termina aí mostrando a contagem dos dias no LCD

Depois durante esse tempo tem que ser ventidado e para isso quero fazer uma janela que deve abrir e estar aberta 4horas, passado esse tempo fechar e estar fechada 4horas  depois assim sucessivamente durante 30dias  e termina para isso vou usar um Motor de 12V e dois Switchs para fim de abertura da janela e fim de janela fechada.

Mas estes tempos controlados pelo relogio DS1307 deviso ter uma bateria e mesmo que falhe alguma coisa o retelogio continua o seu funcionamento

Como descrevi sao duas funçoes que tenho que emplementar no codigo postado em cima , mas nao tenho tido sucesso ,caso não entendas bem o que quero posta aqui

Desde ja agradeço
« Última modificação: 13 de Fevereiro de 2017, 19:02 por AntonioGoncalves »