Problema con rele

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

Hola,

En tu codigo tienes definido byte second, minute, hour, dayOfMonth, month, year; dentro del setup y dentro del loop, eso los hace variables diferentes y no se puede predecir cual sea el funcionamiento, empieza por borrar esas declaraciones de alli adentro y colocar una sola externa global al comienzo del codigo antes del setup.

En el caso de la niebla pusiste tanto para preder como apagar lo mismo en el LCD lcd.print("- ON "); aunque eso solo afectaria el mensaje y no el relé.

Y quita esas llaves { } adicionales en tu código :disappointed_relieved: :disappointed_relieved: :disappointed_relieved: :disappointed_relieved:

Saudos.

Creeo que lo tengo, compi, ya te dire!!!

Modificado:

Hola, hace días que no podía entrar. Todo bien?
Tengo un problema y es que solo se enciende a la hora , por ejemplo la luz se enciende a las 14:00 pero si yo cargo el codigo despue de esta hora no enciende hasta el dia siguiente a las 14:00.... lo intente con encendido if(hour >= 20 && minute >= 30 ) pero el apagado no lo hace o si lo hace cada vez que pasa por encendido hace un parpadeo el rele....

El otro problema que me he encontrado que a día de hoy 30 el código me pinta en el lcd la fecha de 00/06/2013 y le indico que es día 30....
También me he dado cuenta que en el serial pinta 06/13/2013 12:58:52, no entiendo si utilizar el código del reloj para escribir en el serial y en el lcd, me de escribe 2 fechas diferentes, no se por que ocurre.

He tenido que hacer un if por cada hora de activacion, me pregunto si se podria hacer mas simple!

El problema de que se reinicie o inicie el programa entre las horas comprendidas y el encienda sin esperar a la hora de encendido del día siguiente está solucionado, ahora a ver qué pasa con lo otro...

Y empezar con los milis!!!!

Hola, :frowning: estoy estancado con el reloj, el codigo no funciona.

Este es el anterior que parecia que funciona pero el reloj no va bien.

[code] void loop()
{
 
  getDateDs1307(&second, &minute, &hour, &dayOfMonth, &month, &year); 
 

DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), 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 == 10 && minute == 1  )
{ 
digitalWrite (Lluvia,LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}

else

if(hour == 10 && minute == 2 )

digitalWrite (Lluvia, HIGH);
lcd.setCursor(11,1);
    lcd.print("- OFF");

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

else

if(hour == 11 && minute == 2 )

digitalWrite (Lluvia, HIGH);
lcd.setCursor(11,1);
    lcd.print("- OFF");
    
////
if(hour == 12 && minute == 1  )
{ 
digitalWrite (Lluvia,LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}

else

if(hour == 12 && minute == 2 )

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 >= 10 && minute >=  1  && hour <=  22 && minute <=  30)
{ 
digitalWrite (Luzdia,LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}
else

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 >= 22 && minute >=  1  && hour <=  22 && minute <=  16 )
{ 
digitalWrite (Niebla,LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}
else

digitalWrite (Niebla, HIGH);
lcd.setCursor(11,1);
    lcd.print("- OFF ");

////
if(hour >= 22 && minute >=  1  && hour <=  22 && minute <=  15 )
{ 
digitalWrite (Niebla,LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}
else

digitalWrite (Niebla, HIGH);
lcd.setCursor(11,1);
    lcd.print("- OFF ");

////
if(hour >= 23 && minute >=  1  && hour <=  23 && minute <=  15 )
{ 
digitalWrite (Niebla,LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}
else

digitalWrite (Niebla, HIGH);
lcd.setCursor(11,1);
    lcd.print("- OFF ");

///
if(hour >= 24 && minute >=  1  && hour <=  24 && minute <=  15 )
{ 
digitalWrite (Niebla,LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}
else

digitalWrite (Niebla, HIGH);
lcd.setCursor(11,1);
    lcd.print("- OFF ");

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

digitalWrite (Niebla, HIGH);
lcd.setCursor(11,1);
    lcd.print("- OFF ");

///
if(hour >= 2 && minute >=  1  && hour <=  2 && minute <=  15 )
{ 
digitalWrite (Niebla,LOW);
lcd.setCursor(11,1);
    lcd.print("- ON ");
}
else

digitalWrite (Niebla, HIGH);
lcd.setCursor(11,1);
    lcd.print("- OFF ");


delay(pDelay);

///temperatura

  //Calcula la temperatura usando como referencia 5v
SenTemp1 = (5.0 * analogRead(0)*100.0)/1023.0;

Serial.println (SenTemp1); //escribe la temperatura en el serial
lcd.clear();
lcd.setCursor(0,0);
  lcd.print("TEM1:"); 
  lcd.print("  ");
  lcd.setCursor(12,0);
  lcd.print("C "); 
  lcd.print("  ");
 lcd.setCursor(6,0);
  lcd.print(SenTemp1); 
  lcd.print("  ");
  lcd.clear();
    lcd.setCursor(0,1);
  lcd.print("CALENTADOR");
  lcd.print("  "); 
  lcd.setCursor(0,2);
  lcd.print("VENTILADOR");
lcd.setCursor(11,1);
    lcd.print("- OFF");
lcd.setCursor(11,2);
    lcd.print("- OFF");
  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);
  
///Calentador 

if (SenTemp1 < 24) //Valor on
{
  digitalWrite(Calentador, LOW); //calentador on
lcd.setCursor(11,1);
    lcd.print("- ON ");
}
if (SenTemp1 > 25) //Valor off
  digitalWrite(Calentador, HIGH); // calentador off
lcd.setCursor(11,1);
    lcd.print("- OFF ");


////Ventiladore

if (SenTemp1 > 27)//
{
  digitalWrite(Ventilador, LOW); //venti on
lcd.setCursor(11,2);
    lcd.print("- ON ");
}
else
  digitalWrite(Ventilador, HIGH); //venti
lcd.setCursor(11,2);
    lcd.print("- OFF ");

delay (2000);
}

[/code]

Utilizando este código para comprobar el reloj, me marca bien en el serial, no se que ocurre....

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

RTC_DS1307 RTC; // Crea el objeto RTC

void setup () {
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
Wire.begin(); // Establece la velocidad de datos del bus I2C
RTC.begin(); // Establece la velocidad de datos del RTC


///RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora

}

void loop () {
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.
}

Por lo que intentare hacer algo con este...

//Luz

if(now.hour() >= 18 && now.minute() >= 30 && now.hour() <= 20 && now.minute() <= 30)
{
digitalWrite (Luzdia,LOW);

}
else

digitalWrite (Lluzdia, HIGH);

delay(1000);

Lo que ocurre es que compara hora y minuto si enciende a las 18:30 se cierra a las 19:30 por que el minuto de cerrarse es 30 y le da igual si la hora que tendria que cerrar son las 20....

Hola,

Analiza mejor lo que estas escibiendo:

if(now.hour() >= 18 && now.minute() >=  30 && now.hour() <=  20 && now.minute() <=  30)

Alli dice que si la hora esta entre 18 y 20, y el minuto esta entre 30 y 30 enciendelo. Osea que a las 18:31 se apaga porque no satisface la condición de los minutos.

La condicion correcta es, si hora es 18 y minuto mayor o igual a 30, o hora es 19 (o mayor que 18 y menor que 20 si son varias horas), o hora es 20 y minuto menor o igual a 30.

if( (now.hour()==18 && now.minute()>= 30) || (now.hour()==19) || (now.hour()==20 && now.minute()<=30) )

Espero esto te funcione, en caso de que tengas problemas lo mejor es probar tu codigo por etapas, probar el codigo del reloj solo, luego probar la lógica encendiendo unos leds, luego probar la circuiteria encendiendo los reles, y ya una vez que estes seguro que todo funciona por separado irlo uniendo.

Saludos.

Vale muchas gracias he captado la idea para esto.
De esta manera funciona perfectamente si el periodo tiene que ser durante varias horas:

if( (now.hour()>=12 && now.minute()>= 57) || (now.hour()==13) && (now.hour()==13 && now.minute()<=58) )

Solo tiene un problema que si el periodo son 10 horas el código es largo.

Otra forma que he funciona , un poco engorrosa si se tiene que hacer diferentes...

int hourlluvia1 = 9;
int minutelluvia1 = 40;
int hourlluvia2 = 12;
int minutelluvia2 = 50;

loop

if(now.hour() >= hourlluvia1 && now.minute() >= minutelluvia1 )

{ 
digitalWrite (Lluvia,LOW);

}
else
digitalWrite (Lluvia,HIGH);

if(now.hour() >= hourlluvia2 && now.minute() >= minutelluvia2 )

{
digitalWrite (Lluvia, HIGH);

    }

y otra mas también funcionando bien.

if((now.hour() > 12 ||now.hour() == 12  && now.minute() >= 28) && ( now.hour() < 13 || now.hour() == 13 && now.minute() <=28))

{ 
digitalWrite (Lluvia,LOW);

}
else
digitalWrite (Lluvia, HIGH);

Pues muchas gracias por el aporte Luis y por molestarte en ayudarme.

Si procurare hacerlo por separado y ver si funciona, ahora tengo que intentar que funcione cada hora durante 15 minutos y si se va la luz.
Gracias.

Vale gracias por la ayuda parece que funciona.
Tengo el problema de un pico de intensidad por una bomba de 48w conectada a uno de los reles que clava el arduino cuando se enciende, no entiendo por que ocurre ya que las características de la placa indican que no tendría que pasar, que puedo hacer?

Hola,

Supongo que los 48Watts los sacas de otra alimentación sino ya habrias quemado el arduino (o tal vez el arduino es mas robusto de lo que pense). El arduino tiene un regulador de 5v 1A (NCP1117), osea que nunca entregara mas de 5 watts. Si lo tienes conectado a esa alimentación pues el regulador se calentara y suerte tienes que hace shutdown y no se quema.

La funcion del rele es precisamente esa, poder separar tu circuito de poca corriente (Arduino) de una etapa de potencia que maneja voltajes y corrientes elevadas.

Ahora suponiendo que la corriente de la carga la tengas de otro circuito, el problema puede ser que la corriente de activación de ese relé sea mayor que la que puede entregar el arduino por un pin (40mA), en cuyo caso tendras que agregar algun transistor, buffer, optoacoplador o equivalente, que te permita entregar la corriente que necesita el relé sin forzar el arduino.

Saludos.

Hola, si utilizo el rele por que la bomba va a 220V, y la bomba tiene su alimentacion a 215v en mi caso que es conectada por arduino con ayuda del rele.

Si la alimento de manera independiente se soluciona el problema.
Funciona a 5V el modulo y diria que tiene optoacoplador por cada rele...
Este modelo de modulo.
http://www.ebay.com/itm/8-Channel-5V-Relay-Shield-Module-for-Arduino-UNO-2560-1280-ARM-PIC-AVR-STM32-/161058127715?pt=LH_DefaultDomain_0&hash=item257fcfff63

Lo que no entiendo mucho como tengo que conectar arduino al modulo y que pines son los de fuente extra para el modulo, seria retirar el jumper conectar jd-vcc y gnd a la fuente de 5v y y vcc y IN1 IN2... al arduino
Es como lo tengo ahora mismo supongo que es correcto por que funciona.
Pues esto es lo que he hecho: alimento modulo rele por separado, alejamiento de la bobinas tanto módulo relé y la de la bomba, arduino con su propia fuente de alimentación.
Lo que me he dado cuenta es que no se clava arduino solo desconecta el puerto serial y no transmite, por que el reloj en el monitor serial se para y intento cargar el código y me dice que puerto serial no encontrado, lo que ocurre es que cuando se acciona el rele y por lo tanto la bomba se escucha un sonido como un
"clac" por los altavoces... esto no se si será muy bueno y por que ocurre y como solucionarlo, aunque arduino cuando funcione no tiene que estar conectado por USB.

Hola dboodb:

Yo tengo exactamente el mismo problema. He pensado que quizás sea un problema de ruido electromagnético al cerrar (o abrir) el contacto del relé.

He probado montando varistores a la salida del relé, poniendo filtros de red a la entrada de las fuentes y separando el módulo del arduino (físicamente).

Nade me ha funcionapo, a día de hoy sigo igual.

¿Conseguiste tú solucionar el problema?. Saludos.

Jul 03, 2013, 07:58 pm Last Edit: Jul 04, 2013, 11:10 am by dboodb Reason: 1
Ultima respuesta Jul 04, 2013