Problema con rele

Tengo un problema, mi intencion es controlar una placa de reles, y que se activen diferentes reles segun la hora del dia.
Por que no se activan a la hora marcada.

Gracias de antemano

PAso el codigo al un nuevo msj

Nadie tiene idea de por que no hace el encendido del rele con este codigo varias veces al dia?

No he mirado el código, pero te marca bien la hora??? Has mirado que por Serial te dé bien la hora??

Un saludo

Hola gracias por contestar, lo tengo en hora, puesto con otro codigo anterior, que me marca la hora correcta con el otro codigo, y me mostraba la hora bien, la funcion poner en hora con este codigo no la utilizo, ya q supongo que el reloj ya esta en hora,
El problema biene que la primera activacion del rele de luces se lleva a cabo y por la mañana se encinde el foco, pero acto seguido tiene que empezar ha pensar en las lluvias cada hora y no las hace, se olvida....
Gracias por tu tiempo.

Haz una cosa,

Vete poniendo para ver por Serial cuando va pasando por los subprogramas y a ver cuando se para y donde.
Pon por ejemplo que empiece a las 14 y que acabe a las 14:01 y así lo haces rápido

Un saludo

Con el otro codigo me mostraba la hora automaticamente, con este no me la muestra automaticamente, tengo que hacer algo?
Saludos y gracias

El motivo de no ponerlo en hora con este codigo, es que me dava un error en wire.h cuando le indicava la hora actual y intentava cargar el codigo.

Ya se mostrar el reloj y lo tengo en hora, he visto otra forma de hacer que realice la activacion del rele, he codigo anterior lo he modificado, me veo con el problema de que permanecen encendidor los reles todo el timpo, fuera de la hora fijada y tampoco se desconectan.

de las 90 personas que entraron a mirar nadie tiene idea de lo que pasa?
Pues si que tamos apañaos XD

Hola,

Haz un codigo sencillo donde enciendas los dos reles al mismo tiempo, lo mas seguro es que el consumo de corriente sea mayor que el que entregan los puertos del dispositivo y no alcance para energizar ambos al mismo tiempo, espero no se te haya quemado nada.

Deberias usar algun transistor, buffer, optoacopladot, puente H, o equivalente para energizar el rele y nunca directamente desde el arduino.

Cambia el titulo a problema encendiendo dos relé segun la hora, y asi entra menos gente a ver a que llamas codigo novato.

Y upara encapsular lo que sea código utiliza esto: //Coloca tu codigo aqui dentro de las etiquetas correctas

Saludos.

Es una placa de reles, que se puede conectar directamente al arduino, se pueden activar todos los reles a la vezsin problemas.
Lo que no consigo es que me haga la activacion a la hora marcada.

Alguien me puede decir que esta mal del codigo?

#include <LiquidCrystal.h>
#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68
#include <RTClib.h>

RTC_DS1307 RTC; // Crea el objeto RTC
//temperatura
int Temp = 0;
char Grados = 'º';
int Ana1 = A0;   //Entrada analogica de LM35


int rele = 8; //rele, luces1.
int rele1= 7; //rele, luces1.




// Convierte números normales decimales a BCD (binario decimal codificado)
byte decToBcd(byte val)
{
  return ((val/10*16) + (val%10));
}

// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val)
{
  return ((val/16*10) + (val%16));
}
byte second, minute, hour, dayofweek, dayofmonth, month, year;
// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}

// Establece la fecha y el tiempo del ds1307
void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  // Resetea el registro puntero
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // Alguno de estos necesitan enmascarar, ciertos bits son bits de control   

  *second     = bcdToDec(Wire.read()&0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read()&0x3f);
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}

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

  pinMode(rele,OUTPUT);
  pinMode(rele1,OUTPUT);
  pinMode(13,OUTPUT);
  digitalWrite(13, HIGH);          //Activamos la retroiluminacion
  byte second, minute, hour, dayOfMonth, month, year;
  Wire.begin();
RTC.begin(); // Establece la velocidad de datos del RTC
   
 
  second = 0;
  minute = 59;
  hour = 13;
    dayOfMonth = 17;
  month = 1;
  year = 13;
  setDateDs1307(second, minute, hour, dayOfMonth, month, year);
 
}
//control de las luces segun la hora:
void luces()
{
if(hour == 11 && minute == 1)
{
digitalWrite (rele, HIGH);
}
if(hour == 12 && minute == 1)
{
digitalWrite (rele, LOW);
}
}
void lluvia()
{
if(hour == 13 && minute == 59)
{
digitalWrite (rele1, LOW);
}
if(hour == 14 && minute == 1)
{
digitalWrite (rele1,HIGH);
}
}





   void loop()
{
  byte second, minute, hour, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfMonth, &month, &year); 
 
{
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC

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); // La información se actualiza cada 1 seg.
}


 {
luces();

lluvia();
}
   //temperatura//
 
 
 
    Temp = analogRead(Ana1);          //Leemos el valor de la entrada analogica
  Temp = map(Temp,0,1024,20,150);  //Escalamos la señal a grados centigrados
 
  //Mostramos los grados en el serial
  Serial.print("Grados: ");
  Serial.print(Temp);
  Serial.print(Grados);
  Serial.println("C");
 
 
 
 
 
  delay(10000);                  //Al ser temperatura no hace falta leerlo tan seguido
}

Hola

No se, yo probaría a sustituir hour por hour(), así coges la hora del sistema en lugar de una variable que no le envías a la función.

Saludos

//control de las luces segun la hora:
void luces()
{
if(hour() == 11 && minute() == 1)
{
digitalWrite (rele, HIGH);
}
if(hour() == 12 && minute() == 1)
{
digitalWrite (rele, LOW);
}
}
void lluvia()
{
if(hour() == 13 && minute() == 59)
{
digitalWrite (rele1, LOW);
}
if(hour() == 14 && minute() == 1)
{
digitalWrite (rele1,HIGH);
}
}

Gracias por contestar ante todo y por emplear tu tiempo en intentar ayudarme.

Hola,

Lo que te dice e4bak es que lo que imprimes por serial lo obtienes usando now.hour(), mientras lo que usas en luces lo obtienes de hour, lo que deberias hacer es usar una sola de las dos formas:

//Utiliza solo una de estas dos formas
getDateDs1307(&second, &minute, &hour, &dayOfMonth, &month, &year); 
DateTime now = RTC.now();

Sin embargo si quieres que te funcione así tendrias que poner DateTime now; afuera para que se declare globalmente y lo puedas usar desde luces() y lluvia(). Y me acabo de dar cuenta que hour y minute las tienes dentro del setup, deberias colocarlos afuera para que sean globales y poder usarlas en loop(), luces() y lluvia().

Lo otro es que sigas usando hour y minute, en primer lugar intenta mandarlas por serial para asegurarte que estan leyendo los valores correctamente, y una cosa que vi raro es que usas unas llaves adicionales que en principio no hacen nada pero te recomiendo quitar ya que tal vez puedan causar problemas.

Te dejo los codigos modificados para que pruebes:

Opcion 1: //Usando el objeto DateTime now declarado globalmente

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

RTC_DS1307 RTC; // Crea el objeto RTC

DateTime now;

//temperatura
int Temp = 0;
char Grados = 'º';
int Ana1 = A0;   //Entrada analogica de LM35

int rele = 8; //rele, luces1.
int rele1= 7; //rele, luces1.


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

  pinMode(rele,OUTPUT);
  pinMode(rele1,OUTPUT);
  pinMode(13,OUTPUT);
  
  digitalWrite(13, HIGH);          //Activamos la retroiluminacion
  
    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__));
  }
 
}
//control de las luces segun la hora:
void luces()
{
   if(now.hour() == 11 && now.minute() == 1)
  {
    digitalWrite (rele, HIGH);
  }
  
  if(now.hour() == 12 && now.minute() == 1)
  {
    digitalWrite (rele, LOW);
  }
}

void lluvia()
{
  if(now.hour() == 13 && now.minute() == 59)
  {
    digitalWrite (rele1, LOW);
  }
  
  if(now.hour() == 14 && now.minute() == 1)
  {
    digitalWrite (rele1,HIGH);
  }
}

void loop()
{

  now = RTC.now(); // Obtiene la fecha y hora del RTC
  
  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); // La información se actualiza cada 1 seg.

  luces();

  lluvia();

   //temperatura//
    Temp = analogRead(Ana1);          //Leemos el valor de la entrada analogica
    Temp = map(Temp,0,1024,20,150);  //Escalamos la señal a grados centigrados
 
  //Mostramos los grados en el serial
  Serial.print("Grados: ");
  Serial.print(Temp);
  Serial.print(Grados);
  Serial.println("C");

  //delay(10000);                  //Al ser temperatura no hace falta leerlo tan seguido
  delay(1000); //Igual si quieres esperar en un lado 1 seg y en el otro 10seg, necesitas hacer la temporizacion sin delays.
}

Opcion 2://Usando hour y minute sin las llaves extras y enviandolo por serial.

#include <LiquidCrystal.h>
#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68
#include <RTClib.h>

//RTC_DS1307 RTC; // Crea el objeto RTC

//temperatura
int Temp = 0;
char Grados = 'º';
int Ana1 = A0;   //Entrada analogica de LM35

int rele = 8; //rele, luces1.
int rele1= 7; //rele, luces1.

byte second, minute, hour, dayOfMonth, month, year;

// Convierte números normales decimales a BCD (binario decimal codificado)
byte decToBcd(byte val)
{
  return ((val/10*16) + (val%10));
}

// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val)
{
  return ((val/16*10) + (val%16));
}
byte second, minute, hour, dayofweek, dayofmonth, month, year;
// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}

// Establece la fecha y el tiempo del ds1307
void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  // Resetea el registro puntero
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // Alguno de estos necesitan enmascarar, ciertos bits son bits de control   

  *second     = bcdToDec(Wire.read()&0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read()&0x3f);
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}

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

  pinMode(rele,OUTPUT);
  pinMode(rele1,OUTPUT);
  pinMode(13,OUTPUT);

  digitalWrite(13, HIGH);          //Activamos la retroiluminacion

  Wire.begin();
  //RTC.begin(); // Establece la velocidad de datos del RTC
 
  second = 0;
  minute = 59;
  hour = 13;
  dayOfMonth = 17;
  month = 1;
  year = 13;
  setDateDs1307(second, minute, hour, dayOfMonth, month, year);
 
}
//control de las luces segun la hora:
void luces()
{
  if(hour == 11 && minute == 1)
  {
    digitalWrite (rele, HIGH);
  }
  if(hour == 12 && minute == 1)
  {
    digitalWrite (rele, LOW);
  }
}

void lluvia()
{
  if(hour == 13 && minute == 59)
  {
    digitalWrite (rele1, LOW);
  }
  if(hour == 14 && minute == 1)
  {
    digitalWrite (rele1,HIGH);
  }
}


void loop()
{
  getDateDs1307(&second, &minute, &hour, &dayOfMonth, &month, &year); 
 
  //DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC

  Serial.print(year, DEC);
  Serial.print('/');
  Serial.print(month, DEC);
  Serial.print('/');
  Serial.print(dayOfMonth, DEC);
  Serial.print(' ');
  Serial.print(hour, DEC);
  Serial.print(':');
  Serial.print(minute, DEC);
  Serial.print(':');
  Serial.print(second, DEC);
  Serial.println();
  
  //delay(1000); // La información se actualiza cada 1 seg.

  luces();

  lluvia();
  
  //temperatura//
  Temp = analogRead(Ana1);          //Leemos el valor de la entrada analogica
  Temp = map(Temp,0,1024,20,150);  //Escalamos la señal a grados centigrados
 
  //Mostramos los grados en el serial
  Serial.print("Grados: ");
  Serial.print(Temp);
  Serial.print(Grados);
  Serial.println("C");
 
  //delay(10000);                  //Al ser temperatura no hace falta leerlo tan seguido
  
  delay(1000); // El ciclo se repite cada segundo
  //Para poder hacer la temporizacion por separado de cada segmento del codigo leete lo de esperar sin usar delay.
}

Por favor pruebalos ambos y me cuentas como te va.

Una vez que te funcione eso, revisa lo de temporizar sin usar delay Temporizador con Arduino sin usar funcion delay() - Software - Arduino Forum

Saludos.

Luis A. Mata C.
Anaco-Venezuela

El primer código esta ok el segundo no, me muestra error.

Con el primer código:
El primero si yo cargo el código y el primer encendido de luces por ejemplo es a los 5 minutos y el apagado a los 6, y en lluvia a en encendido a los 8 y apagado a los 9 me encuentro con que solo cargar el código todos los relés se activan encendiendo luces y lluvia por lo que no respeta este encendido pero si el apagado, pasa igual con lluvia el encendido como ya esta pasa de largo hasta el apagado que si lo respeta.

Intentare ver que puedo hacer con esto... aunque no me explico por qu pasa, y si lo soluciono me pondré con lo de los milis que veo un poco por donde va.

Cabe decir que mi intencion es hacer lluvias cada hora durante el día.
Una vez terminado la secuencia de encendido apagado si creo un segundo void lluvia2 con una segunda hora de encendido y una segunda de apagado, el funcionamiento es correcto puesto que la función lluvia anterior dejo el relé en off.

Saludos y gracias por vuestro tiempo.

Hola,

Ninguno de los codigos los compile , me imgaino que tiene algun error de sintaxis.

Si lo que deseas es que inicien apagados debes colocarlo en la inicializacion, es decir agregra dentro del setup lo siguiente:

digitalWrite (rele, LOW);
digitalWrite (rele1, LOW);

Saludos.

Muchas gracias, a ver si mañana lo puedo modificar, saludos y gracias te dejo un +1!!!

Hola, gracias por ayudarme, puede enfocar esto ultimo que me mencionas y lo aplique al código que colgué, por que con ninguno de los tuyos lo conseguía.....

Ahora he conseguido que se encienda a la hora la función Lluvia, tantas veces como quiera al día, que era lo que pretendía. "por fin" pues no.....

El problema es que no se por que no hacen igual la función Luzdia o Niebla, sigo el mismo principio que con Lluvia....

A ver si tu que tienes mejores ideas sabes que pasa.
Muchas gracias

#include <LiquidCrystal_I2C.h>


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


#define DS1307_I2C_ADDRESS 0x68


RTC_DS1307 RTC; // Crea el objeto RTC


LiquidCrystal_I2C lcd(0x27,20,4);

//temperatura
int Temp = 0;
int pDelay = 3500; //Retraso personalizado (Personal Delay)
int Ana1 = A0;   //Entrada analogica de LM35
char Grados = 'º';

int Luzdia = 22; //rele, Luces1.
int Lluvia= 23; //rele, Lluvia
int Niebla= 24; //rele, Niebla


// Convierte números normales decimales a BCD (binario decimal codificado)
byte decToBcd(byte val)
{
  return ((val/10*16) + (val%10));
}

// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val)
{
  return ((val/16*10) + (val%16));
}


///////////////////////////////////////RTC///////////////

byte second, minute, hour, dayofweek, dayofmonth, month, year;
// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}

// Establece la fecha y el tiempo del ds1307
void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  // Resetea el registro puntero
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // Alguno de estos necesitan enmascarar, ciertos bits son bits de control   

  *second     = bcdToDec(Wire.read()&0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read()&0x3f);
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}

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

  pinMode(Luzdia,OUTPUT);
  pinMode(Lluvia,OUTPUT);
  pinMode(Niebla,OUTPUT);

  byte second, minute, hour, dayOfMonth, month, year;
  Wire.begin();
RTC.begin(); // Establece la velocidad de datos del RTC
   
 ////////////////////Porner en hora////////////
 

  second = 50;
  minute = 58;
  hour = 13;
    dayOfMonth = 17;
  month = 1;
  year = 13;
  setDateDs1307(second, minute, hour, dayOfMonth, month, year);
  

//////////////////////////////////////// HIGH Estado del los reles al cargar codigo

digitalWrite (Luzdia, HIGH); 
digitalWrite (Lluvia,  HIGH); 
digitalWrite (Niebla,  HIGH); 



lcd.init(); 
  lcd.backlight();
  lcd.clear();
}


//////////////////////////////////////////////////

   void loop()
{
  byte second, minute, hour, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfMonth, &month, &year); 
 
{
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC

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();


lcd.clear();
  lcd.setCursor(13,3);
  if (hour < 10) lcd.print("0");
  lcd.print(hour, DEC);
  lcd.print(":");  
  if (minute < 10) lcd.print("0");
  lcd.print(minute, DEC);
  lcd.setCursor(0,3);
  if (dayOfMonth < 10) lcd.print("0");
  lcd.print(dayOfMonth, DEC); 
  lcd.print("/");
  if (month < 10) lcd.print("0");
  lcd.print(month, DEC);  
  lcd.print("/"); 
  lcd.print("20");  
  if (year < 10) lcd.print("0");
  lcd.print(year, DEC);
  lcd.print("  "); 
delay(pDelay); // La información se actualiza cada 1 seg.
}



//////////////////////////////////////////////// Lluvias///////////////////////////////
{
  lcd.clear();
  lcd.setCursor(3,1);
  lcd.print("LLUVIA");
  lcd.print("  "); 
  lcd.setCursor(13,3);
  if (hour < 10) lcd.print("0");
  lcd.print(hour, DEC);
  lcd.print(":");  
  if (minute < 10) lcd.print("0");
  lcd.print(minute, DEC);
  lcd.setCursor(0,3);
  if (dayOfMonth < 10) lcd.print("0");
  lcd.print(dayOfMonth, DEC); 
  lcd.print("/");
  if (month < 10) lcd.print("0");
  lcd.print(month, DEC);  
  lcd.print("/"); 
  lcd.print("20");  
  if (year < 10) lcd.print("0");
  lcd.print(year, DEC);
  lcd.print("  "); 
  lcd.setCursor(11,1);
    lcd.print("- OFF");
}

if(hour == 13 && minute == 59 || hour == 14 && minute == 1  || hour == 14 && minute == 3  )
{ 
digitalWrite (Lluvia,LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}

else

if(hour == 14 && minute == 0 || hour == 14 && minute == 2 || hour == 14 && minute == 4  )
{
digitalWrite (Lluvia, HIGH);
lcd.setCursor(11,1);
    lcd.print("- OFF");
}

delay(pDelay);

//////////////////////////////////////////////// Luces dia ///////////////////////////////
{
  lcd.clear();
  lcd.setCursor(3,1);
  lcd.print("LUZ DIA");
  lcd.print("  "); 
  lcd.setCursor(13,3);
  if (hour < 10) lcd.print("0");
  lcd.print(hour, DEC);
  lcd.print(":");  
  if (minute < 10) lcd.print("0");
  lcd.print(minute, DEC);
  lcd.setCursor(0,3);
  if (dayOfMonth < 10) lcd.print("0");
  lcd.print(dayOfMonth, DEC); 
  lcd.print("/");
  if (month < 10) lcd.print("0");
  lcd.print(month, DEC);  
  lcd.print("/"); 
  lcd.print("20");  
  if (year < 10) lcd.print("0");
  lcd.print(year, DEC);
  lcd.print("  "); 
  lcd.setCursor(11,1);
    lcd.print("- OFF");
}

if(hour == 13 && minute == 0)
{
digitalWrite (Luzdia, LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}

else

if(hour == 14 && minute == 0)
{
digitalWrite (Luzdia, HIGH);
lcd.setCursor(11,1);
    lcd.print("- OFF");  
}
delay(pDelay);


//////////////////////////////////////////////// Niebla ///////////////////////////////
{
  lcd.clear();
  lcd.setCursor(3,1);
  lcd.print("NIEBLA  - OFF");
  lcd.print("  "); 
  lcd.setCursor(13,3);
  if (hour < 10) lcd.print("0");
  lcd.print(hour, DEC);
  lcd.print(":");  
  if (minute < 10) lcd.print("0");
  lcd.print(minute, DEC);
  lcd.setCursor(0,3);
  if (dayOfMonth < 10) lcd.print("0");
  lcd.print(dayOfMonth, DEC); 
  lcd.print("/");
  if (month < 10) lcd.print("0");
  lcd.print(month, DEC);  
  lcd.print("/"); 
  lcd.print("20");  
  if (year < 10) lcd.print("0");
  lcd.print(year, DEC);
  lcd.print("  "); 
  lcd.setCursor(11,1);
    lcd.print("- OFF");
}

if(hour == 13 && minute == 0)
{
digitalWrite (Niebla, LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}
else

if(hour == 14 && minute == 0)
{
digitalWrite (Niebla, HIGH);
lcd.setCursor(11,1);
    lcd.print("- ON");  
}
delay(pDelay);



///////////////////////////////////////////////////temperatura///////////////////////////
   
 
    Temp = analogRead(Ana1);          //Leemos el valor de la entrada analogica
  Temp = map(Temp,0,1024,20,150);  //Escalamos la señal a grados centigrados
 
  //Mostramos los grados en el serial
  Serial.print("Grados: ");
  Serial.print(Temp);
  Serial.print(Grados);
  Serial.println("C");