collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


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]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


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


Focos LED SMD por almamater
[16 de Dezembro de 2023, 14:12]


I Belive por dropes
[15 de Dezembro de 2023, 13:59]


Carga de corrente eletrónica ZPB30A1 60W por jm_araujo
[11 de Dezembro de 2023, 13:27]

Autor Tópico: Arduino+RTC - Simulador de Presença Residencial  (Lida 16147 vezes)

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

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #15 em: 03 de Maio de 2013, 03:08 »
Ok mas já testaste esta parte de imprimir a data?
Isso não pode estar a funcionar bem assim...
Não podes fazer Serial.print() de um vector sem indicar quais são as posições a imprimir... Por isso é que acho estranho não haver erros.
Código: [Seleccione]
      Serial.print(rtc);
Sendo rtc um vector, isto nem deveria compilar no arduino, muito menos imprimir os valores certos... No outro post perguntaste porque é que às vezes aquilo imprimia coisas estranhas... É por causa de coisas destas ;)

Citação de: SoBraL-BR
Quando ele ligar a sirene, vai colocar na variavel "mmalarme" a hora atual somada +1 minuto. Desta forma, quando a hora atual entrar no minuto seguinte do acionamento da sirene, ele vai desligar a sirene. O "mmalarme = 60" é só um valor default pro programa nao ficar executando a condiçao abaixo do else if, já que nao existe o minuto "60" no rtc.
Sim eu tinha percebido a idéia... Os dois erros que eu disse que aconteciam acontecem mesmo...
O primeiro erro... Se os sensores forem activados no minuto 59, ele liga a sirene e fica com o valor 60 na variável mmalarme. O que significa que a sirene se vai desligar quando os minutos forem=60, que nunca acontece, ou mais provávelmente quando um vizinho furioso for lá parti-la, porque ela tocou a noite inteira sen parar! :P
O segundo erro, como já referi no mail anterior é que quando fazes
Código: [Seleccione]
    mmalarme = ++rtc[1];
este código altera tanto a variável mmalarme como a posição 1 de rtc... O que significa que para todas as comparações que são feitas a seguir o tempo estará sempre adiantado um minuto.
Se tens dúvidas experimenta fazer
Código: [Seleccione]
      Serial.print(rtc[2]);
      int aux = ++rtc[2];
      Serial.print(rtc[2]);
e logo ves :P

Acredita, vale bem a pena aprender a trabalhar com a library Time do Arduino do que andar a fazer código para resolver estas coisas todas, principalmente se mais tarde quiseres fazer coisas com datas tambem.

Offline SoBraL-BR

  • Mini Robot
  • *
  • Mensagens: 14
    • Liga Oficial Pokémon de Blumenau
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #16 em: 03 de Maio de 2013, 23:26 »
Hehe,
Tens razão Tarquino. Obrigado pelas dicas... realmente poderia acontecer da sirene nunca desligar, hehe.

Veja as alteraçoes que eu fiz, e vejas se tem algum erro. Aparentemente pareceu tudo funcionar como previsto.
Em paralelo, vou estudar sobre a library de tempo conforme sugerido.
Obrigado!

Citar
//ALARME - Os sensores ficam sempre HIGH. Quando ele detecta movimento, cortam o sinal (LOW)
sensor1 = digitalRead(alarme1);
sensor2 = digitalRead(alarme2);

if (sensor1 == LOW || sensor2 == LOW){
  digitalWrite(sirene, HIGH);
   SSalarme = rtc[0];
   --SSalarme;
   }
if (SSalarme == rtc[0]){
  digitalWrite(sirene, LOW);
  SSalarme = 60; //coloca um valor que nao existe no mmalarme pra nao ficar desligando a sirene em vão     
  }
if (SSalarme == -1){
  SSalarme = 59;
  }

...continua...

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #17 em: 04 de Maio de 2013, 00:21 »
Sim assim dá para desenrascar, fica com um tempo fixo de 59 segundos.
Assim de repente não estou a ver nenhum problema que possa acontecer com esse código.

Offline SoBraL-BR

  • Mini Robot
  • *
  • Mensagens: 14
    • Liga Oficial Pokémon de Blumenau
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #18 em: 05 de Maio de 2013, 06:21 »
Tarquino,
Nas ultimas simulaçoes que eu fiz, apresentou o problema na imagem anexo abaixo.
Parece que o programa se perde na hora atual no momento em que é acionado um segundo relé.

Vou estudar o codigo e tentar descobrir o motivo disso acontecer.
Caso o motivo esteja mais claro pra voce, favor dar um toq. Abraço!



Programa completo:
Citar
// Modificated by SoBraL - mr.sobral@hotmail.com
// Font: http://arduino.cc/forum/index.php/topic,8833.0.html
// Before you need to install the library DS1307: http://bricofoy.free.fr/forums/arduino/DS1307.zip

#include <WProgram.h> //é um recurso para referenciar a biblioteca Wiring
#include <Wire.h> //inclui a biblioteca Wire necessaria para comunicaçao i2c
#include <DS1307.h> //inclui a biblioteca de comandos do DS1307 utilizada neste programa. Necessário baixá-la no link acima

int rtc[6];
int irfalarme = 8;
int quarto = 9;
int banheiro = 10;
int radio = 11;
int sirene = 12;

int sensor = 0; //variavel para gravar o nivel de sinal do sensor
int SSalarme = 60; //variavel para guardar o segundo atual que o sensor detectou movimento

void setup()
{
Serial.begin(9600);
pinMode(irfalarme, INPUT);
for (int pino = 9; pino <= 13; pino++) { // configura pinos 10 ao 13 como saída
  pinMode(pino, OUTPUT);
  digitalWrite(pino, LOW); // desliga pinos 10 ao 13
  }
/* Esta sequencia de comandos deve ser escrita apenas uma vez, para
configurar a hora do Shield RTC 1307. Troque os numeros pela hora atual

RTC.stop();
RTC.set(DS1307_SEC,10);        //define o segundo rtc[0]
RTC.set(DS1307_MIN,12);     //define o minuto rtc[1]
RTC.set(DS1307_HR,0);       //define a hora rtc[2]
RTC.set(DS1307_DOW,1);       //define o dia da semana rtc[3]
RTC.set(DS1307_DATE,2);       //define o dia rtc[4]
RTC.set(DS1307_MTH,5);        //define o mes rtc[5]
RTC.set(DS1307_YR,13);         //define o ano rtc[6]
RTC.start();
*/
RTC.get(rtc,true);
//delay(60000); //espera 60segundos para os sensores se estabilizarem e a pessoa trancar a casa sem disparos.
}

void MudaDispositivo(byte dispositivo, byte estado, byte hora, byte minuto, byte segundo, int* rtc) {
    if ( rtc[2] == hora  &&  rtc[1] == minuto && rtc[0] == segundo )
    digitalWrite(dispositivo, estado);
   }

void loop()
{
//ALARME - Os sensores ficam sempre HIGH. Quando ele detecta movimento, cortam o sinal (LOW)
sensor = digitalRead(irfalarme);

if (sensor == LOW){
  digitalWrite(sirene, HIGH);
   SSalarme = rtc[0];
   --SSalarme;
   }
if (SSalarme == rtc[0]){
  digitalWrite(sirene, LOW);
  SSalarme = 60; //coloca um valor que nao existe no ssalarme pra nao ficar desligando a sirene em vão no proximo loop.
  }
if (SSalarme == -1){ //garantir que nunca vai ficar com segundo -1, oque deixaria a sirene ligada enternamente
  SSalarme = 59;
  }

//Simula presença durante o dia
MudaDispositivo(radio, HIGH, 9, 40, 10, rtc);
MudaDispositivo(radio, LOW, 10, 20, 10, rtc);
MudaDispositivo(radio, HIGH, 14, 45, 10, rtc);
MudaDispositivo(radio, LOW, 15, 20, 10, rtc);
MudaDispositivo(radio, HIGH, 16, 30, 10, rtc);
MudaDispositivo(radio, LOW, 16, 55, 10, rtc);

//Simula presença de noite
MudaDispositivo(banheiro, HIGH, 18, 40, 10, rtc);
MudaDispositivo(banheiro, LOW, 18, 43, 10, rtc);
MudaDispositivo(quarto, HIGH, 18, 43, 20, rtc);
MudaDispositivo(radio, HIGH, 18, 55, 10, rtc);
MudaDispositivo(quarto, LOW, 18, 58, 10, rtc);
MudaDispositivo(quarto, HIGH, 19, 40, 10, rtc);
MudaDispositivo(banheiro, HIGH, 19, 40, 30, rtc);
MudaDispositivo(banheiro, LOW, 19, 41, 40, rtc);
MudaDispositivo(quarto, LOW, 19, 42, 10, rtc);
MudaDispositivo(radio, LOW, 20, 5, 10, rtc);

MudaDispositivo(quarto, HIGH, 20, 10, 10, rtc);
MudaDispositivo(quarto, LOW, 20, 10, 40, rtc);
MudaDispositivo(banheiro, HIGH, 20, 10, 50, rtc);
MudaDispositivo(banheiro, LOW, 20, 11, 20, rtc);
MudaDispositivo(quarto, HIGH, 20, 20, 50, rtc);
MudaDispositivo(quarto, LOW, 20, 21, 20, rtc);
MudaDispositivo(banheiro, HIGH, 20, 45, 40, rtc);
MudaDispositivo(banheiro, LOW, 20, 46, 10, rtc);

MudaDispositivo(quarto, HIGH, 21, 10, 10, rtc);
MudaDispositivo(banheiro, HIGH, 21, 11, 10, rtc);
MudaDispositivo(banheiro, LOW, 21, 15, 10, rtc);
MudaDispositivo(radio, HIGH, 21, 15, 40, rtc);
MudaDispositivo(quarto, LOW, 21, 16, 10, rtc);
MudaDispositivo(quarto, HIGH, 22, 10, 10, rtc);
MudaDispositivo(quarto, LOW, 22, 10, 50, rtc);
MudaDispositivo(radio, LOW, 22, 16, 10, rtc);

//Simula colocar pijama e escovar os dentes
MudaDispositivo(quarto, HIGH, 22, 40, 10, rtc);
MudaDispositivo(banheiro, HIGH, 22, 41, 10, rtc);
MudaDispositivo(banheiro, LOW, 22, 43, 10, rtc);
MudaDispositivo(quarto, LOW, 22, 43, 30, rtc);

MudaDispositivo(quarto, HIGH, 23, 40, 10, rtc);
MudaDispositivo(banheiro, HIGH, 23, 40, 30, rtc);
MudaDispositivo(banheiro, LOW, 23, 41, 20, rtc);
MudaDispositivo(quarto, LOW, 23, 41, 40, rtc);

//Simula presença de madrugada
MudaDispositivo(quarto, HIGH, 2, 10, 10, rtc);
MudaDispositivo(banheiro, HIGH, 2, 10, 30, rtc);
MudaDispositivo(banheiro, LOW, 2, 11, 20, rtc);
MudaDispositivo(quarto, LOW, 2, 11, 40, rtc);

MudaDispositivo(quarto, HIGH, 4, 10, 10, rtc);
MudaDispositivo(banheiro, HIGH, 4, 10, 30, rtc);
MudaDispositivo(banheiro, LOW, 4, 11, 20, rtc);
MudaDispositivo(quarto, LOW, 4, 11, 40, rtc);

MudaDispositivo(quarto, HIGH, 6, 10, 10, rtc);
MudaDispositivo(banheiro, HIGH, 6, 10, 30, rtc);
MudaDispositivo(banheiro, LOW, 6, 11, 20, rtc);
MudaDispositivo(quarto, LOW, 6, 11, 40, rtc);

/*
Comando utilizado apenas pra ficar enviando via USB a hora atual
para que possam monitorar no "serial monitor" do simulador Arduino
e ver se esta tudo funcionando de acordo
*/

MudaDispositivo(quarto, HIGH, 2, 20, 10, rtc);
MudaDispositivo(banheiro, HIGH, 2, 20, 15, rtc);
MudaDispositivo(radio, HIGH, 2, 20, 20, rtc);
MudaDispositivo(quarto, LOW, 2, 20, 40, rtc);
MudaDispositivo(banheiro, LOW, 2, 20, 45, rtc);
MudaDispositivo(radio, LOW, 2, 20, 50, rtc);

for(int i=0; i<=6; i++){
    Serial.print(rtc);
    Serial.print(" ");
  }
Serial.println();
Serial.println(SSalarme);

//delay(1000);

}

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #19 em: 05 de Maio de 2013, 07:08 »
Assim de repente a coisa unica coisa que vejo errada é o
Código: [Seleccione]
int rtc[6];
que devia ser:
Código: [Seleccione]
int rtc[7];
Nas primerias versões estava o valor certo, depois alteraste para o valor errado, não percebi porque... :P

Offline SoBraL-BR

  • Mini Robot
  • *
  • Mensagens: 14
    • Liga Oficial Pokémon de Blumenau
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #20 em: 05 de Maio de 2013, 16:34 »
Tinha feito rtc[6] só pra remover a impressao do dia da semana, mas enfim, deixei como estava e o problema persiste.

Voce chegou a analisar a biblioteca ds1307.h? Segue abaixo.

Ainda nao consegui resolver esse problema do relogio se perder (85 85 45 7...) depois que aciona o segundo rele... >.<

Citar
/*
 *
 ********************************************************************************************************
 *          DS1307.h     library for DS1307 I2C rtc clock            *
 ********************************************************************************************************
 *
 * Created by D. Sjunnesson 1scale1.com d.sjunnesson (at) 1scale1.com
 * Modified by bricofoy - bricofoy (at) free.fr
 *
 * Created with combined information from
 *  http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1180908809
 *  http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1191209057
 *
 * Big credit to  mattt (please contact me for a more correct name...) from the Arduino forum
 * which has written the main part of the library which I have modified
 *
 * Rev history :
 *
 * ??-??-??   - mattt & dsjunnesson    - creation
 * 19-feb-2012   - bricofoy       - added arduino 1.0 compatibility
 * 20-feb-2012   - bricofoy       - bugfix : time was not preserved when setting or stopping clock
 * 21-feb-2012   - bricofoy       - bugfix : preserve existing seconds when starting/stopping clock
 *
 *TODO: enable AM/PM
 *   enable square wave output
 *
 */


// ensure this library description is only included once
#ifndef DS1307_h
#define DS1307_h

// include types & constants of Wiring core API
// this "if" is for compatibility with both arduino 1.0 and previous versions
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

// include types & constants of Wire ic2 lib
#include <../Wire/Wire.h>

#define DS1307_SEC 0
#define DS1307_MIN 1
#define DS1307_HR 2
#define DS1307_DOW 3
#define DS1307_DATE 4
#define DS1307_MTH 5
#define DS1307_YR 6

#define DS1307_BASE_YR 2000

#define DS1307_CTRL_ID B1101000  //DS1307

 // Define register bit masks
#define DS1307_CLOCKHALT B10000000

#define DS1307_LO_BCD  B00001111
#define DS1307_HI_BCD  B11110000

#define DS1307_HI_SEC  B01110000
#define DS1307_HI_MIN  B01110000
#define DS1307_HI_HR   B00110000
#define DS1307_LO_DOW  B00000111
#define DS1307_HI_DATE B00110000
#define DS1307_HI_MTH  B00110000
#define DS1307_HI_YR   B11110000

// library interface description
class DS1307
{
  // user-accessible "public" interface
  public:
    DS1307();
    void get(int *, boolean);
    int get(int, boolean);
    void set(int, int);
    void start(void);
    void stop(void);

  // library-accessible "private" interface
  private:
    byte rtc_bcd[7]; // used prior to read/set ds1307 registers;
    void read(void);
    void save(void);
};

extern DS1307 RTC;

#endif

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #21 em: 05 de Maio de 2013, 16:44 »
Decoupling do circuito?
Relé tem diodo de free-wheling para não causar (ainda) mais ruido?
Avr fanboy

Offline SoBraL-BR

  • Mini Robot
  • *
  • Mensagens: 14
    • Liga Oficial Pokémon de Blumenau
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #22 em: 05 de Maio de 2013, 17:45 »
tem sim... voce consegue ver nas fotos que os relés sao daquele shield, com resistor, transistor e diodo.

O problema só pode estar acontecendo devido ao "void MudaDispositivo", pois peguei uma outra biblioteca do ds1307, e acontece a mesma coisa...

Eu não entendo tao bem como funciona o método de ponteiros, então não faço ideia porque o relógio porque o relogio esta se perdendo.  :-\

Offline SoBraL-BR

  • Mini Robot
  • *
  • Mensagens: 14
    • Liga Oficial Pokémon de Blumenau
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #23 em: 05 de Maio de 2013, 18:13 »
Pessoal,
Pode ser muita carga sendo absorvida da USB???

Eu fiz o teste aqui, apenas com a USB ligada, quando os 3 reles (que sao alimentados pelo pino 5v do arduino)  são acionados , ele bagunça a hora. Mas se eu mander a USB ligada e também conectar a fonte 5v na placa do arduino, o relogio se acerta!  :o

Alguem sabe explicar?

Acho que o problema se resolveu colocando a fonte 5v externa. Se alguem puder explicar o motivo disso...
Vou testar melhor, mas agora só de mais tarde. Abraço!
« Última modificação: 05 de Maio de 2013, 18:38 por SoBraL-BR »

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #24 em: 05 de Maio de 2013, 22:28 »
Bom parece ser mesmo um problema qualquer de ruido no circuito então... Pelo menos já descobriste a causa.
De qualquer modo, em relação ao rtc[6], se quisesses imprimir menos um valor tinhas de decrementar um valor no for onde fazes o print, não no tamanho do vector.
Imprimir 6 posições quando existem 7 não tem problema, imprimir 7 quando só existem 7 já é mau... Já para não falar que a library usada espera que o vector tenha 7 posições, e só lhe dás um com 6 posições ele vai escrever coisas em posições que não devia.

Offline SoBraL-BR

  • Mini Robot
  • *
  • Mensagens: 14
    • Liga Oficial Pokémon de Blumenau
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #25 em: 07 de Maio de 2013, 01:00 »
Beleza Tarquino, mas nao concordei com esse problema. Ainda nao fez sentido pra mim o relogio se perder só pelo fato do segundo relé acionar.
Enfim, antes de saber a solução, acabei encontrando outra library do RTC, a qual me pareceu mais amigavel, tanto para configurar a hora, quanto na apresentaçao pela USB. Coloquei o link no cabeçalho do programa.
Sendo assim, segue abaixo o programa final, como tudo testado e funcionando:

Citar
/*
This program will to simulate presence of peoples in your house,
and will to monitor twice sensors PIR for alarm.
Modificated by SoBraL - mr.sobral@hotmail.com
Font: http://microcontrolandos.blogspot.com.br/2013/01/relogio-digital-com-arduino.html
Before you need to install the library DS1307: https://sites.google.com/site/microcontrolandos/arquivos/DS1307.zip

Pin connections on DS1307 module:

[DS1307] <--> [Arduino]
5V       <--> 5V
GND      <--> GND
SQW      <--> (not connected)
SCL      <--> Analog Input 5
SDA      <--> Analog Input 4

This software is free software.
*/

#include <string.h>
#include <Wire.h>
#include <DS1307.h>

char dateTime[20];
int RTCValues[7];
int HoraAtiva[6];

int piralarme = 8;
int quarto = 9;
int banheiro = 10;
int radio = 11;
int sirene = 12;

int sensor = 0; //variavel para gravar o nivel de sinal do sensor
int SSalarme = 60; //variavel para guardar o segundo atual que o sensor detectou movimento. Nenhum movimento = 60.

void setup() {
  Serial.begin(9600);
   
  Serial.println("Configurando portas do Arduino...");
  pinMode(piralarme, INPUT);
  for (int pino = 9; pino <= 13; pino++) { // configura pinos 10 ao 13 como saída
    pinMode(pino, OUTPUT);
    digitalWrite(pino, LOW); // desliga pinos 10 ao 13
    }
  Serial.println("Pronto!");
  Serial.println("Lendo informacoes do RTC...");
  DS1307.begin();
  Serial.println("Pronto!");
  Serial.println("...Aguardando 1 minuto para deixares a residencia...");
  delay(60000);
  Serial.println("Pronto! Seu sistema de Alarme e Simulador de Presenca Residencial esta ativo!");
}

void MudaDispositivo(byte dispositivo, byte estado, byte hora, byte minuto, byte segundo, int* HoraAtiva) {
    if (RTCValues[4] == hora  &&  RTCValues[5] == minuto && RTCValues[6] == segundo)
    digitalWrite(dispositivo, estado);
    }

void loop() {
    DS1307.getDate(RTCValues); //busca hora atual no RTC
   
//ALARME - Os sensores ficam sempre HIGH. Quando detectam movimento, cortam o sinal (LOW)
sensor = digitalRead(piralarme);

if (sensor == LOW){
  digitalWrite(sirene, HIGH);
   SSalarme = RTCValues[6];
   --SSalarme;
   }
if (SSalarme == RTCValues[6]){
  digitalWrite(sirene, LOW);
  SSalarme = 60; //coloca um valor que nao existe no ssalarme pra nao ficar desligando a sirene em vão no proximo loop.
  }
if (SSalarme == -1){ //garantir que nunca vai ficar com segundo -1, oque deixaria a sirene ligada enternamente
  SSalarme = 59;
  }


//Simula presença durante o dia
MudaDispositivo(radio, HIGH, 9, 40, 10, HoraAtiva);
MudaDispositivo(radio, LOW, 10, 20, 10, HoraAtiva);
MudaDispositivo(radio, HIGH, 14, 45, 10, HoraAtiva);
MudaDispositivo(radio, LOW, 15, 20, 10, HoraAtiva);
MudaDispositivo(radio, HIGH, 16, 30, 10, HoraAtiva);
MudaDispositivo(radio, LOW, 16, 55, 10, HoraAtiva);

//Simula presença de noite
MudaDispositivo(banheiro, HIGH, 18, 40, 10, HoraAtiva);
MudaDispositivo(banheiro, LOW, 18, 43, 10, HoraAtiva);
MudaDispositivo(quarto, HIGH, 18, 43, 20, HoraAtiva);
MudaDispositivo(radio, HIGH, 18, 55, 10, HoraAtiva);
MudaDispositivo(quarto, LOW, 18, 58, 10, HoraAtiva);
MudaDispositivo(quarto, HIGH, 19, 40, 10, HoraAtiva);
MudaDispositivo(banheiro, HIGH, 19, 40, 30, HoraAtiva);
MudaDispositivo(banheiro, LOW, 19, 41, 40, HoraAtiva);
MudaDispositivo(quarto, LOW, 19, 42, 10, HoraAtiva);
MudaDispositivo(radio, LOW, 20, 5, 10, HoraAtiva);

MudaDispositivo(quarto, HIGH, 20, 10, 10, HoraAtiva);
MudaDispositivo(quarto, LOW, 20, 10, 40, HoraAtiva);
MudaDispositivo(banheiro, HIGH, 20, 10, 50, HoraAtiva);
MudaDispositivo(banheiro, LOW, 20, 11, 20, HoraAtiva);
MudaDispositivo(quarto, HIGH, 20, 20, 50, HoraAtiva);
MudaDispositivo(quarto, LOW, 20, 21, 20, HoraAtiva);
MudaDispositivo(banheiro, HIGH, 20, 45, 40, HoraAtiva);
MudaDispositivo(banheiro, LOW, 20, 46, 10, HoraAtiva);

MudaDispositivo(quarto, HIGH, 21, 10, 10, HoraAtiva);
MudaDispositivo(banheiro, HIGH, 21, 11, 10, HoraAtiva);
MudaDispositivo(banheiro, LOW, 21, 15, 10, HoraAtiva);
MudaDispositivo(radio, HIGH, 21, 15, 40, HoraAtiva);
MudaDispositivo(quarto, LOW, 21, 16, 10, HoraAtiva);
MudaDispositivo(quarto, HIGH, 22, 10, 10, HoraAtiva);
MudaDispositivo(quarto, LOW, 22, 10, 50, HoraAtiva);
MudaDispositivo(radio, LOW, 22, 16, 10, HoraAtiva);

//Simula colocar pijama e escovar os dentes
MudaDispositivo(quarto, HIGH, 22, 40, 10, HoraAtiva);
MudaDispositivo(banheiro, HIGH, 22, 41, 10, HoraAtiva);
MudaDispositivo(banheiro, LOW, 22, 43, 10, HoraAtiva);
MudaDispositivo(quarto, LOW, 22, 43, 30, HoraAtiva);

MudaDispositivo(quarto, HIGH, 23, 40, 10, HoraAtiva);
MudaDispositivo(banheiro, HIGH, 23, 40, 30, HoraAtiva);
MudaDispositivo(banheiro, LOW, 23, 41, 20, HoraAtiva);
MudaDispositivo(quarto, LOW, 23, 41, 40, HoraAtiva);

//Simula presença de madrugada
MudaDispositivo(quarto, HIGH, 2, 10, 10, HoraAtiva);
MudaDispositivo(banheiro, HIGH, 2, 10, 30, HoraAtiva);
MudaDispositivo(banheiro, LOW, 2, 11, 20, HoraAtiva);
MudaDispositivo(quarto, LOW, 2, 11, 40, HoraAtiva);

MudaDispositivo(quarto, HIGH, 4, 10, 10, HoraAtiva);
MudaDispositivo(banheiro, HIGH, 4, 10, 30, HoraAtiva);
MudaDispositivo(banheiro, LOW, 4, 11, 20, HoraAtiva);
MudaDispositivo(quarto, LOW, 4, 11, 40, HoraAtiva);

MudaDispositivo(quarto, HIGH, 6, 10, 10, HoraAtiva);
MudaDispositivo(banheiro, HIGH, 6, 10, 30, HoraAtiva);
MudaDispositivo(banheiro, LOW, 6, 11, 20, HoraAtiva);
MudaDispositivo(quarto, LOW, 6, 11, 40, HoraAtiva);

/*
Comando utilizado apenas pra ficar enviando via USB a hora atual
para que possam monitorar no "serial monitor" do simulador Arduino
e ver se esta tudo funcionando de acordo

    sprintf(dateTime, "20%02d-%02d-%02d %02d:%02d:%02d", RTCValues[0],
            RTCValues[1], RTCValues[2], RTCValues[4], RTCValues[5],
            RTCValues[6]);
    Serial.print(dateTime);
    Serial.print(" - day of week: ");
    Serial.println(RTCValues[3]);
   
    delay(1000);
 */
}

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #26 em: 07 de Maio de 2013, 02:31 »
Beleza Tarquino, mas nao concordei com esse problema. Ainda nao fez sentido pra mim o relogio se perder só pelo fato do segundo relé acionar.
Bem neste caso o problema aparentemente não era esse. Seja como for, nunca é boa idéia escrever em enderecos de memória que não estão bem alocados... Pode não acontecer nada, mas tambem podem fazer um programa passar-se completamente e/ou levar o arduino a fazer reset...
Não é facil explicar o porque a uma pessoa que esteja a começar a programar... Mas acredita que podem acontecer coisas muita estranhas e que não parecem ter nada a ver umas com as outras. Ainda pior, se tiveres a memória mal alocada as coisas às vezes até podem funcionar bem, mas podem dar problemas muito mais tarde, quando se estiver a trabalhar noutra parte do programa (mesmo que esta nova parte do programa esteja bem).

Offline zotequi

  • Mini Robot
  • *
  • Mensagens: 5
Re: Arduino+RTC - Simulador de Presença Residencial
« Responder #27 em: 01 de Julho de 2014, 17:43 »
Olá. Vi um post de um RTC com Display LCD 20x4 que talvez possa ser útil: http://blog.filipeflop.com/modulos/rtc-ds1307-display-lcd-20x4-arduino.html

Abraço!