LusoRobótica - Robótica em Português

Robótica => Iniciantes => Tópico iniciado por: jony-kid em 30 de Janeiro de 2013, 23:54

Título: RTC com alarme.
Enviado por: jony-kid em 30 de Janeiro de 2013, 23:54
Boas noites depois de ter desistido de tentar fazer algo com o meu arduino aqui estou eu de volta.
Tenho arduino com RTC e Lcd, a mostrar data e hora.

O que eu queria fazer neste momento era:
Acender um led a "x" horas e desligar a "y" horas, tenho o seguinte codigo que não está a funcionar gostava que me ajudassem a ver o que estou a fazer mal.

Código: [Seleccione]
#include <LiquidCrystal.h>  // Inclui a biblioteca para LCD
#include <Wire.h>           // Biblioteca para RTC 
#include "RTClib.h"

RTC_DS1307 RTC;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int LED = 8; // Criei a variavel LED com o pino 13

void setup()
{
  Serial.begin(9600);
  pinMode(LED,OUTPUT);  // Coloquei aqui para falar que o LED sera saida
  Wire.begin();
  RTC.begin();
  lcd.begin(20, 4);
  if (!RTC.isrunning())
  {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}


void loop()
{
  DateTime agora = RTC.now();
  String relogio_data = "DT: ";
  String relogio_hora = "HR: ";
 
  int dia = agora.day();
  int mes = agora.month();
  int ano = agora.year();
 
  relogio_data += ArrumaZero(dia);
  relogio_data += "/";
  relogio_data += ArrumaZero(mes);
  relogio_data += "/";
  relogio_data += ano;
 
  int hora = agora.hour();
  int minuto = agora.minute();
  int segundo = agora.second();
 
  // Aqui ficara o codigo que compara a hora e minuto
Serial.print (minuto) ;
  if ( hora == '23' && minuto == '34')
  {
   digitalWrite(LED,HIGH);
  }
  if ( hora == '00' && minuto == '36')
  {
   digitalWrite(LED,LOW);
  }


  relogio_hora += ArrumaZero(hora);
  relogio_hora += ":";
  relogio_hora += ArrumaZero(minuto);
  relogio_hora += ":";
  relogio_hora += ArrumaZero(segundo);
 
  lcd.setCursor(0, 0);
  lcd.print(relogio_data);
  lcd.setCursor(0, 1);
  lcd.print(relogio_hora);
 
  delay(500);
}


String ArrumaZero(int i)
{
  String ret;
  if (i < 10) ret += "0";
  ret += i;
  return ret;
}

Título: Re: RTC com alarme.
Enviado por: senso em 31 de Janeiro de 2013, 00:46
Strings comparam-se com "ab" e não 'ab', e usar strings para isso é um uso horrivel e desnecessário de ram.
Título: Re: RTC com alarme.
Enviado por: jony-kid em 31 de Janeiro de 2013, 00:52
Este codigo não foi feito por mim, quem me dera...
Título: Re: RTC com alarme.
Enviado por: jony-kid em 01 de Fevereiro de 2013, 21:31
Ninguem dá uma ajuda por aqui?
Título: Re: RTC com alarme.
Enviado por: senso em 01 de Fevereiro de 2013, 21:41
Strings comparam-se com "ab" e não com 'ab', e usar strings para isso é um uso horrivel e desnecessário de ram.
Título: Re: RTC com alarme.
Enviado por: jony-kid em 03 de Fevereiro de 2013, 02:28
Pois para quem não percebe nada disto foi uma bela ajuda... ;D ;D ;D ;D

Tenho andado a ver se encontro um código mais simples para ver se consigo fazer algo mas ainda nada.
Os meus conhecimentos são zero nestas andanças sem ajuda para me iniciar não vou lá de certeza pois os meus estudos foram muito poucos, sei que posso ser chato mas não é por mal.

Gostava de poder fazer algo simples para começar a iniciar-me, mas estou prestes a desistir mais uma vez.

Gostave de pelo menos:
Data e hora - já tenho
Temperatura - já tenho
Falta só controlar os reles (leds) com as horas

Ninguem me arranja um pedaço de codigo para eu poder começar?

Desde já o meu obrigado
João Oliveira.
Título: Re: RTC com alarme.
Enviado por: tarquinio em 03 de Fevereiro de 2013, 03:34
O que o senso estava a dizer era que estavas a comparar coisas diferentes, de uma forma errada.

Código: [Seleccione]
  int hora = agora.hour();
  int minuto = agora.minute();
  int segundo = agora.second();
 
  if ( hora == '23' && minuto == '34')
  {
   digitalWrite(LED,HIGH);
  }

Tens aqui uma grande salada de variáveis... :P
hora, minuto e segundo são int's, ou seja números inteiros
'23' é uma coisa que nem está correcta, quando muito seria "23" como o senso disse... Mas mesmo "23" seria uma string que tem o número 2, depois o numero 3, não representa o numero 23, que é o que tu queres fazer...
Para comparares um valor numérico escreves simplesmente
Código: [Seleccione]
if ( hora == 23 && minuto == 34)
Título: Re: RTC com alarme.
Enviado por: vdr em 03 de Fevereiro de 2013, 09:15
Pois para quem não percebe nada disto foi uma bela ajuda... ;D ;D ;D ;D

Tenho andado a ver se encontro um código mais simples para ver se consigo fazer algo mas ainda nada.
Os meus conhecimentos são zero nestas andanças sem ajuda para me iniciar não vou lá de certeza pois os meus estudos foram muito poucos, sei que posso ser chato mas não é por mal.

Gostava de poder fazer algo simples para começar a iniciar-me, mas estou prestes a desistir mais uma vez.

Gostave de pelo menos:
Data e hora - já tenho
Temperatura - já tenho
Falta só controlar os reles (leds) com as horas

Ninguem me arranja um pedaço de codigo para eu poder começar?

Desde já o meu obrigado
João Oliveira.

Aconselho-te a ganhar umas bases em C.
Existem muitos bons livros para tal, acredita que te poupa muitas dores de cabeça.
Título: Re: RTC com alarme.
Enviado por: jony-kid em 03 de Fevereiro de 2013, 12:36
O meu grande obrigado pela ajuda.
Mais logo já experimento e digo alguma.
Realmente as minhas noções de Arduino e programação nem de perto nem de longe são as melhores posso ate dizer que nenhumas.
Em relação ao livro, o problema e que o meu inglês não e o melhor.
Aconselham algum livro em português, será que existe?

O meu grande obrigado.
João Oliveira
Título: Re: RTC com alarme.
Enviado por: vdr em 03 de Fevereiro de 2013, 19:27
Na altura aprendi por este, Linguagem C - Luís Damas. Encontras usados por 15€
Título: Re: RTC com alarme.
Enviado por: jony-kid em 03 de Fevereiro de 2013, 23:33
Citar
Aconselho-te a ganhar umas bases em C.
Existem muitos bons livros para tal, acredita que te poupa muitas dores de cabeça.

Citar
Na altura aprendi por este, Linguagem C - Luís Damas. Encontras usados por 15€

Em relação ao livro já estou a tratar de o encomendar, em prencipio já o arranjei usado.

Agora vamos ao que interessa:
Hoje depois da ajuda que me deram ganhei outra vontade e resolvi começar de novo e tentar eu mesmo aproveitando bocados de codigo que fui guardando ao longo das minhas pesquisas  ;D ;D ;D.

O codigo que tenho neste momento é:

Código: [Seleccione]
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
 
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>  // Inclui a biblioteca para LCD

RTC_DS1307 RTC;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int rele1 = 13;

void setup () {
    Serial.begin(57600);
    Wire.begin();
    RTC.begin();
    lcd.begin(20, 4);
 
  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 agora = RTC.now();
   
    int dia = agora.day();
    int mes = agora.month();
    int ano = agora.year();
   
    lcd.setCursor(0,0);
    lcd.print("Data: ");
    lcd.print(agora.day(), DEC);
    lcd.print('/');
    lcd.print(agora.month(), DEC);
    lcd.print('/');
    lcd.print(agora.year(), DEC);
   
   lcd.print(' ');
 
   
    int hora = agora.hour();
    int minuto = agora.minute();
    int segundo = agora.second();
 
   
    lcd.setCursor(0,1);
    lcd.print("Hora: ");
   
    lcd.print(agora.hour(), DEC);
    lcd.print(':');
    lcd.print(agora.minute(), DEC);
    lcd.print(':');
    lcd.print(agora.second(), DEC);
    lcd.print("");
   
   
    if ( hora == 22 && minuto == 24)
  {
   digitalWrite(rele1,HIGH);
  }
  if ( hora == 22 && minuto == 25)
  {
   digitalWrite(rele1,LOW);
  }
  Serial.println();
    delay(1000);
   


   

}

Parece estar a funcionar á exceção de um promenor.
O que acontece?
Nos segundos, quando cchega a 59s, o 9 mantem-se ficando assim, 19,29,39,49,59,69,79,89 a seguir 10, 11 até 59 e depois retoma a mesma situação.
Não me parece que o relogio se atrase ou adinte mas não fica bem.
Já tentei descobrir o porquê disto acontecer mas não descobri o porquê, será que me podem ajudar?
Título: Re: RTC com alarme.
Enviado por: tarquinio em 04 de Fevereiro de 2013, 01:33
Isso não tem a ver com o relógio, é um bug por causa de como escreves as coisas no LCD... :P
Qdo fazes os prints ele não apaga o que estava lá antes... Ele não está a escrever 19, 29, 39..., está a escrever 1, 2, 3..., só que o 9 dos 59 segundos nunca foi apagado.
Tens ou de apagar texto anterior antes de escreveres o novo, ou de colocar os zeros antes nos valores <10 (que era o que fazia a função ArrumaZero()).
Título: Re: RTC com alarme.
Enviado por: jony-kid em 04 de Fevereiro de 2013, 01:45
Obrigado pela ajuda, tinha quase a certeza que se tratava disso.
Agora é que não estou a ver como fazer sem ser com a string tenho de ver melhor.

Isto é tudo novidade
lol
Título: Re: RTC com alarme.
Enviado por: pmj_pedro em 04 de Fevereiro de 2013, 01:52
Obrigado pela ajuda, tinha quase a certeza que se tratava disso.
Agora é que não estou a ver como fazer sem ser com a string tenho de ver melhor.

Isto é tudo novidade
lol

Nao sei pk tens os dados em string, mas começas por ver a string como um array de char, que é o que acontece em C, verificas se o 1 char da um numero, depois convertes esse char para numero ( basta subtrair '0'), fazes isso para os restantes elementos da string e compares com o que queres
Título: Re: RTC com alarme.
Enviado por: jony-kid em 04 de Fevereiro de 2013, 02:19
A string estava a usar anteriormente agora não.
Agora estou a estudar um novo codigo.
Título: Re: RTC com alarme.
Enviado por: jony-kid em 04 de Fevereiro de 2013, 23:41
Boas cá estou eu de novo.

Estou novamente com um problema mas agora não sei se será no codigo.

tenho estado a experimentar o codigo que publiquei num pos anterior e o que noto de anormal neste momento, é que quando faço input no pino 13 ou qualquer outro atravez do codigo a saida não é de 5v só vica pelos 2.57v porque será?

será que fiz algo de errado no arduino?
Título: Re: RTC com alarme.
Enviado por: senso em 05 de Fevereiro de 2013, 00:08
Input e saida não são a mesma coisa..
Explica melhor, mas não deves ter influência nenhuma do led no pino de saida em uso normal.
Título: Re: RTC com alarme.
Enviado por: jony-kid em 05 de Fevereiro de 2013, 00:35
Tens razão passo a explicar melhor.

Quando faço o Examples/blink na porta 13 tudo funciona bem o led fica com brilho.

No codigo que estou a usar tenho int rele1 = 13; quando digo á hora x e minuto y para ligar a porta 13 ele realmente liga mas muito fraquinho.


Outro problema quando tento alimentar externamente o arduino passado algum tempo o lcd passa-se e começa a acrescentar numeros e alterar tudo as horas ficam todas maradas.
Título: Re: RTC com alarme.
Enviado por: senso em 05 de Fevereiro de 2013, 01:01
Isso deve ser ruido do relé a comutar, estás a usar algum transistor?
Isso do pino, quase de certeza que não o estás a declarar/definir como saida, os 2.7v que vês é porque estás a ligar e desligar o pull-up interno do pino que devido á resistência externa que tens ligado ao pino(carga do led, fios, etc) te dá 2.7v).
Título: Re: RTC com alarme.
Enviado por: jony-kid em 05 de Fevereiro de 2013, 01:15
Não estou a usar rele.
Estou a usar um led para simular um rele.

Tudo como está, resistência, fio e led com o blink já me vai para os 4.7v e o led já acende corretamente.
Título: Re: RTC com alarme.
Enviado por: senso em 05 de Fevereiro de 2013, 02:19
É porque não estás a meter o pino como uma saida então.
Falta-te o setup isto:
pinMode(rele1, OUTPUT);
Título: Re: RTC com alarme.
Enviado por: jony-kid em 05 de Fevereiro de 2013, 12:47
Pois deve de ser isso mesmo.
Vai-se aprendendo já lhe vou tomando o gosto.

Título: Re: RTC com alarme.
Enviado por: jony-kid em 06 de Fevereiro de 2013, 22:45
Por algum motivo estou a ter problemas em compilar o codigo no arduino.
Estou a receber este erro:
avrdude: stk500_getsync(): not in sync: resp=0x00

Alguem sabe o que possa ser?
Título: Re: RTC com alarme.
Enviado por: pmj_pedro em 07 de Fevereiro de 2013, 00:32
Por algum motivo estou a ter problemas em compilar o codigo no arduino.
Estou a receber este erro:
avrdude: stk500_getsync(): not in sync: resp=0x00

Alguem sabe o que possa ser?

isso normalmente é um erro de comunicaçao entre o pc e o arduino, podem ser a drives o bootloader, ou o que costuma ser mais frequente é o baudrathe
Título: Re: RTC com alarme.
Enviado por: jony-kid em 22 de Fevereiro de 2013, 12:39
Boas.
Cá estou eu de novo com uma duvida...

Comprei na China um bloco de reles para o Arduino, e quando contecto o pino do Arduino ao do rele ele liga, e quando dou os 5v no pino ele desliga.

Deveria de ser ao contrario certo?
Título: Re: RTC com alarme.
Enviado por: pmj_pedro em 22 de Fevereiro de 2013, 14:41
Boas.
Cá estou eu de novo com uma duvida...

Comprei na China um bloco de reles para o Arduino, e quando contecto o pino do Arduino ao do rele ele liga, e quando dou os 5v no pino ele desliga.

Deveria de ser ao contrario certo?

Em principio vais ter de usar um transistor para comutar o rele (atençao que eu nunca trabalhei com nenhum), mas se isso o 5v para desligar e a ground para ligar fazem te impressao, podes ser utilizar o transistor em emissor comum, que tem um ganho negativo. Mas num micro-controladora, a logica ser positiva ou negativa nao causa nenhum diferença e podes smp inverter por software, basta um '!'.

Espero nao estar a dizer nenhum asneira