jueves, 24 de marzo de 2016

Cagei: Configuración del módulo reloj ds1307

Conexión del módulo al arduino uno  
Tomado de: http://www.geekfactory.mx/wp-content/uploads/2015/03/arduino_tinyrtc_diagrama_conexion.png 
Imagen propia


Luego de conectar el módulo al arduinio, procedemos con el siguiente sketch para programar la fecha y hora de acuerdo al pc donde hemos conectado nuestro arduino, siguiendo el siguiente programa, descarga primero la libreria RTClib.h, (ver cómo agregarla):

#include <Wire.h> 
#include "RTClib.h"
RTC_DS1307 RTC;

void setup () {
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
RTC.adjust(DateTime(__DATE__, __TIME__)); 
// Establece la fecha y hora (Comentar una vez establecida la hora)
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
}

void loop () 
{
}

Una vez subido este programa, ya se debe haber configurado el ds1307 con la fecha y hora, para poderla conocer en el monitor serial, cargamos el siguiente programa:

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
//RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
}
void loop(){
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
   
Serial.print(now.year(), DEC); // Año
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
delay(1000); // La información se actualiza cada 1 seg.
}

tomado de: http://www.tuelectronica.es/tutoriales/arduino/reloj-rtc-i2c-con-arduino.html

Aquí algunos tips con alarmas que pueden servir en nuestro proyecto:


Un vistazo a lo que llevo del código del temporizador, con el cual esperamos encender 
un reflector led de 10W de las 6:00 a las 20:00 horas, al igual que un aireador cuatro veces al día.
Aún no está completo el código, pero ya funciona con el modulo ds1307 con los horarios establecidos,
falta aún el sensor DTH11 y el módulo bluetooth HC06, pero con este código ya se puede
empezar a experimentar con las lechugas en la maqueta construida.





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

RTC_DS1307 RTC;

int hora=0;
int minutos=0;
int segundos=0;
int luz=13;
int aire=12;


void setup () {
  //Inicializamos el puerto serie, wire y el modulo RTC
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    //Si quitamos el comentario de la linea siguiente, se ajusta la hora y la fecha con la del ordenador
    //RTC.adjust(DateTime(__DATE__, __TIME__));
  
  pinMode(luz,OUTPUT);
  pinMode(aire,OUTPUT);

  }
  
void loop () 
  {
    
 // Se llama a la función fecha() para imprimir la fecha en el monitor serie -----
    fecha();
//-------------------------------------------

 //lee el tiempo del modulo ds1307, previamente se ha configurado con la hora.
    DateTime now = RTC.now();
    hora=(now.hour(),DEC);
    minutos=(now.minute(),DEC);
    segundos=(now.second(),DEC);

// tanto el temporizador de luz como aire se puede incluir en un if mayor
// para dar la opción de manual o automático y poder mostrar desde el celular
// como se puede accionar con la app.


//-------------------------- TEMPORIZADOR  DIGITAL PARA ENCENDER LA ILUMINACION ------------------------
// el foto periodo inicia a las 6am y termina a las 20:00 horas o 8pm.
// 14 horas de luz, con un periodo de 10 sin la misma.
// hay que buscar la manera de modificar esto desde android, pero que quede grabado en rom.

  if (now.hour()>= 6 && now.hour()<20)
  {
  digitalWrite(luz,HIGH);
  Serial.println("led on");
  }
  else 
  {
  digitalWrite(luz,LOW);
  Serial.println("led off");
  }

  
//--------------------TEMPORIZADOR PARA ENCENDER Y APAGAR EL AIREADOR -----------------------------------

// Este se encenderá 4 veces al día, de las 1:00 a las 3:00;    2 horas
// de las 9:00 a las 11:00                                      2 horas
// de las 13:00 a las 14:00                                     1 hora
// de las 18:00 a las 20:00                                     2 horas total 7 horas, potencia del aireador 5W

if (now.hour()>= 1 && now.hour()<3)
  {
  digitalWrite(aire,HIGH);
  Serial.println("aireador on");
  }
  else if (now.hour()>= 9 && now.hour()<11)
    {
      digitalWrite(aire,HIGH);
      Serial.println("aireador on");
    }
      else if (now.hour()>= 13 && now.hour()<14)
        {
        digitalWrite(aire,HIGH);
        Serial.println("aireador on");
        }
        else if (now.hour()>= 18 && now.hour()<20)
          {
            digitalWrite(aire,HIGH);
            Serial.println("aireador on");
          }
  else
  {
  digitalWrite(aire,LOW);
  Serial.println("aireador off");
  }



delay(1000);   
   
}//cierre del void loop



//-------------- función para leer la fecha del ds1307-----
//-------------- también escribe en el monitor serie ------

void fecha(){
   
    //lee el tiempo del modulo ds1307, previamente se ha configurado con la hora.
    DateTime now = RTC.now();
    hora=(now.hour(),DEC);
    minutos=(now.minute(),DEC);
    segundos=(now.second(),DEC);
  
   //imprimimos por el monitor serial para ver la información en el pc
  
    //Imprimimos el dia
    Serial.print(now.day(), DEC);
    Serial.print('/');
    //Imprimimos el mes
    Serial.print(now.month(), DEC);
    Serial.print('/');
    //Imprimimos el año
    Serial.print(now.year(), DEC);
    Serial.print(' ');
    //Imprimimos la hora
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    //Imprimimos los minutos
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    //Imprimimos los segundos
    Serial.print(now.second(), DEC);
    Serial.println();
  }
//---------------- FIN FUNCION FECHA-------------------------------------------

En la siguiente entrada se puede apreciar la continuación del proyecto con el sensor de temperatura y humedad.

No hay comentarios:

Publicar un comentario