efecto dia y noche en acuario

hola buenas, después de leer y ver un montón de vídeos voy a intentar hacer mi acuario automático (aunque solo sea el efecto día y noche) y solo sea copiar y pegar trozos de sketch ya hechos, ya que por desgracia no doy para mas.... y casi siempre acabo descuartizándolo y ya no sabiendo por donde caminar ,lo que es el tema de montaje y cablear no tengo problema , pero el tema de programación no me entra....... mis preguntas son:

-este sketch esta preparado para instalar en arduino UNO, podre instalarlo en un arduino NANO o MINI , o si hay mas pequeños? ya que mi intencion es ponerlo en una caja disimulada (mas o menos) por algun lado del acuario con su fuente de alimentacion .

  • este sketch veo que lleva pantalla o monitor, que de momento no me interesa y si se puede la quitaria del sketch, hay algun problema si lo quito?

  • tendria que utilizar una placa con 2 reles o de 1 rele? ya que voy a utilizar tiras de led unas blancas (efecto dia ) y tras azules (efecto noche)

-si es con la targeta de 2 reles, tendre que modificar todo lo del sketch referente a 1 rele, incluido el cableado.

-el ultimo parrafo del esketch no acabo de entenderlo: para que sirve? segun el autor , para restablecer las variables de control

este es el sketch:

#include  // incluye libreria para interfaz I2C
#include  // incluye libreria para el manejo del modulo RTC

RTC_DS3231 rtc; // crea objeto del tipo RTC_DS3231

bool evento_inicio = true; // variable de control para inicio de evento con valor true
bool evento_fin = true; // variable de control para finalizacion de evento con valor true

# define RELE 3 // constante RELE con valor 3 que corresponde a pin digital 3
// donde se encuentra conectado el modulo de rele
void setup () {
Serial.begin(9600); // inicializa comunicacion serie a 9600 bps
pinMode(RELE, OUTPUT); // pin 3 como salida

if (! rtc.begin()) { // si falla la inicializacion del modulo
Serial.println("Modulo RTC no encontrado !"); // muestra mensaje de error
while (1); // bucle infinito que detiene ejecucion del programa
}
}

void loop () {
DateTime fecha = rtc.now(); // funcion que devuelve fecha y horario en formato
// DateTime y asigna a variable fecha
if ( fecha.hour() == 14 && fecha.minute() == 30 ){ // si hora = 14 y minutos = 30
   if ( evento_inicio == true ){ // si evento_inicio es verdadero
     digitalWrite(RELE, HIGH); // activa modulo de rele con nivel alto
     Serial.println( "Rele encendido" ); // muestra texto en monitor serie
     evento_inicio = false; // carga valor falso en variable de control
   } // para evitar ingresar mas de una vez
 }

if ( fecha.hour() == 15 && fecha.minute() == 30 ){ // si hora = 15 y minutos = 30
   if ( evento_fin == true ){ // si evento_fin es verdadero
     digitalWrite(RELE, LOW); // desactiva modulo de rele con nivel bajo
     Serial.println( "Rele apagado" ); // muestra texto en monitor serie
     evento_fin = false; // carga valor falso en variable de control
   } // para evitar ingresar mas de una vez
 }

Serial.print(fecha.day()); // funcion que obtiene el dia de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.year()); // funcion que obtiene el año de la fecha completa
Serial.print(" "); // caracter espacio en blanco como separador
Serial.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.println(fecha.second()); // funcion que obtiene los segundos de la fecha completa

delay(1000); // demora de 1 segundo

 if ( fecha.hour() == 2 && fecha.minute() == 0 ){ // si hora = 2 y minutos = 0 restablece valores de
   evento_inicio = true; // variables de control en verdadero
   evento_fin = true;
 }
}

ya e conseguido quitar lo de la programación para el monitor , sin problemas y las pruebas que e realizado con un rele y dos leds uno puesto en el contacto de NC y el otro en el contacto de NA si que realiza el encendido de un led al entrar en la programación y cuando termina lo programado , apaga el led y enciende el otro. puede haber algún problema con este tipo de conexión? o seria mejor utilizar 2? voy a utilizar tiras de leds, unas azules y otras blancas que tengo

|500x281

|281x500

|500x281

IMG_20191208_120321 (1).jpg|1920x1080

IMG_20191208_120329.jpg|1920x1080

IMG_20191209_164141.jpg|1080x1920

Después de 58 posts aún no posteas correctamente el código y las imagenes. Por favor, lee las NORMAS y edita el código/imagenes para que se vean correctamente.

Como dice victorjam, 59 mensajes y no sabes postear una imagen, o un código, que he tenido que editarlo yo, porque no se trata de postear en un nuevo post sino editar el que esta mal posteado.

Pasa por Como visualizar las Imagenes Adjuntas en Arduino.cc para aprender a postear las imagenes. Tu hilo será movido a Software porque por ahora no es mas que eso, una consulta de Software. Si veo que pasa el tiempo y sigues con tu acuario agregándole cosas, se transformará en un proyecto que merece ser posteado en esa sección.

este sketch esta preparado para instalar en arduino UNO, podre instalarlo en un arduino NANO o MINI , o si hay mas pequeños? ya que mi intencion es ponerlo en una caja disimulada (mas o menos) por algun lado del acuario con su fuente de alimentacion .

Los sketchs en general son portables (los puedes usar en otros arduinos similares) solo cambia la placa y el mismo código funcionara en un NANO o MINI y en primera instancia en un MEGA también.

- este sketch veo que lleva pantalla  o monitor, que de momento no me interesa y si se puede la quitaria del sketch, hay algun problema si lo quito?

Por supuesto que no hay problema, espero sepas eliminar cuidadosamente las referencias al LCD o pantalla que use.

  • tendria que utilizar una placa con 2 reles o de 1 rele? ya que voy a utilizar tiras de led unas blancas (efecto dia ) y otras azules (efecto noche)

Si las tiras son fijas entonces requires dos Reles, de lo contrario si tienes una tira RGB puedes poner el color que gustes, pero requiere mas trabajo pero no demasiado. No se que has comprado porque no lo mencionas.

-si es con la targeta de 2 reles, tendre que modificar todo lo del sketch referente a 1 rele, incluido el cableado.

Si tienes uan tarjeta de 2 reles y solo usas 1 no te preocupes, siempre habra aplicación o uso para el relé restante.

-el ultimo parrafo del esketch no acabo de entenderlo: para que sirve? segun el autor , para restablecer las variables de control

Estas lineas, activan

if ( fecha.hour() == 14 && fecha.minute() == 30 ){ // si hora = 14 y minutos = 30

desactivan

if ( fecha.hour() == 15 && fecha.minute() == 30 ){ // si hora = 15 y minutos = 30

las luces.

Para mi esta mal por varias razones. 1) un relé habitualmente se activa con LOW y desactiva con HIGH, sin embargo quien hizo el programa lo ha puesto al revés. 2) si hablamos de luces las activa a las 14:30 y desactiva 15:30 vaya, eso no simula el sol o lo que pretendas simular

Además este código es muy repetitivo, y presenta información cuando no debería llenando la consola del monitor serie de información no relevante. Ya que no tendrás un LCD ahora es importante ver lo que hace falta ver.

ok, lo que hagais , bien echo, ( si no haber estudiado decia mi padre) ja.ja.ja

mas preguntas... hay algun otro mecanismo que no sea un rele? para hacer la misma función que un rele? lo digo por que estará bastante tiempo encendido o apagado? en el cambio de hora " de invierno a verano" o " verano a invierno" yo tengo que ajustar la hora en el DS3231 ? o cambia automático?

Existe un tipo de rele llamado de enclavamiento o Relés con retención de posición. Pregunta en cuarquier tienda de electronica.

El DS3231 solo te da la hora actual, tu tendrias que definir las fechas de cambio de horario.

Kike_GL: Existe un tipo de rele llamado de enclavamiento o Relés con retención de posición. Pregunta en cuarquier tienda de electronica.

El DS3231 solo te da la hora actual, tu tendrias que definir las fechas de cambio de horario.

ok, a que te refieres a definir las fechas de cambio? . esos reles pueden funcionar con arduino?

Las fechas las comparas con condicionales para que haga el cambio de funcion.

No hay ningun problema por usar reles normales, yo tengo reles que se pasan dias enclavados, siempre que uses el diodo en antiparalelo en la bobina para que al desclavar descargue si no podrias quemar la salida.

hola cuando dices diodo de descarga , quieres decir que tengo que soldar un diodo en los terminales del rele? pero si uso los reles que esta montados en placa para arduino, donde se sueldan y que tipo y modelo de diodo tengo que usar? por ejemplo estos: |500x500 los reles bi estables o de enclava miento son estos? tambien tengo que poner diodos para su descarga? por lo que veo tengo que utilizar varios modulos ya que no encuentro modulos de reles enclavamiento y biestable de varios modulos juntos: |500x476 |500x500

rele.jpg|1000x1000

rele biestable.jpg|1600x1600

rele estado solido.jpg|1600x1524

Los que vienen en placa suelen estar ya protegidos, el primero es optoacoplado, se separa del equipo mediante un diodo y un receptor que están dentro del chip ese cuadrado, el biestable cambia de estado por pulso, en la placa solo veo una resistencia así que no se decirte si esta protegido, el ultimo tiene pinta de ser un relé normal con un botón de activación manual y también lleva el optoacoplado.

Este buen hombre te explica por que se usa y como se pone, es mas para reles sueltos sin placa.

gracias por responder , al mismo tiempo voy leyendo viendo proyectos de la gente que utiliza leds neopixel, e visto por ebay y son unas pequeñas tiras que utiliza soldando unas con otras , veo que haría falta muchas, resultaría mas caro,pero veo que no haria falta reles ya que los neopixel son rgb, que seria mas facil o practico? que opinais?

Si lo ibas a iluminar con tiras de led normales no va a variar mucho el precio aunque todo depende del tamaño del acuario. El principal atractivo de los neopixel es que cada led puede tener un color/intensidad distinto al resto y si esto no lo vas a utilizar puedes ir a tiras RGB normales que son mas baratas.

Si no te quieres complicar con arduino, venden en aliexpress unos controladores de led Magic Home en el que puedes programarle desde una APP la hora de encendido/apagado, cambio de color de la tira, incluso controlarla con Google Home, ademas lo tienes por 5€.

el acuario es de unos 40 litros , es pequeño , pero mas que nada era por hacer algo con arduino facil, pero lees las inmensas posibilidades que tiene y.........te hace cambiar de idea ja.ja.ja

Te recomendé el controlador al leer que habías copiado el código, claro que puedes hacerlo con arduino pero hay que entender varias cosas antes y eso solo se consigue leyendo y probando.

ya tengo los reles en casa , voy a empezar a trastear ...ya voy poniendo avances

bueno pues retomo el tema , despues de tanto tiempo, estoy haciendo pruebas con el modulo IRF520

Y acá estamos para colaborar.

hola , este es el código que a mi me funciona , con las pruebas que estoy realizando , con 2 IRF520N uno actua en el efecto dia y el otro en el efecto noche los cuales controlan : el primer IRF520N : 5 tramos de 40cm de tira de led blanco frio 3528 1 tramo de 40cm de tira de led UV

el segundo IRF520N: 1 tramo de tira led azul 3528

al estar tantas horas, conectados los MOSFET seria conveniente instalarles a cada uno un disipador de aluminio ?

#include    // incluye libreria para el manejo del modulo RTC

RTC_DS3231 rtc;     // crea objeto del tipo RTC_DS3231

bool evento_inicio = true;  // variable de control para inicio de evento con valor true
bool evento_fin = true;   // variable de control para finalizacion de evento con valor true

# define TRIAC1  3     // constante TRIAC con valor 3 que corresponde a pin digital 3
# define TRIAC2  5    // constante TRIAC con valor 5 que corresponde a pin digital 5
        // donde se encuentra conectado el modulo de rele
void setup () {

 pinMode(TRIAC1, OUTPUT);   // pin 3 como salida
 pinMode(TRIAC2, OUTPUT);   // pin 5 como salida 

 if (! rtc.begin()) {       // si falla la inicializacion del modulo

 while (1);         // bucle infinito que detiene ejecucion del programa
 }
}

void loop () {
 DateTime fecha = rtc.now();        // funcion que devuelve fecha y horario en formato
              // DateTime y asigna a variable fecha
 if ( fecha.hour() == 19 && fecha.minute() == 7 ){ // si hora = __ y minutos = __
    if ( evento_inicio == true ){     // si evento_inicio es verdadero
      digitalWrite(TRIAC1, HIGH);       // activa modulo de triac con nivel alto
      digitalWrite(TRIAC2, LOW);       // activa modulo de triac con nivel alto
      
      evento_inicio = false;        // carga valor falso en variable de control   
    }             // para evitar ingresar mas de una vez
  }

 if ( fecha.hour() == 19 && fecha.minute() == 8 ){ // si hora = __ y minutos = __
    if ( evento_fin == true ){        // si evento_fin es verdadero
      digitalWrite(TRIAC1, LOW);        // desactiva modulo de triac con nivel bajo
      digitalWrite(TRIAC2, HIGH);        // desactiva modulo de triac con nivel bajo
     
      
      evento_inicio = false;       // carga valor falso en variable de control
    }             // para evitar ingresar mas de una vez
 }

if ( fecha.hour() == 19 && fecha.minute() == 9 ){ // si hora = __ y minutos = __
    if ( evento_fin == true ){        // si evento_fin es verdadero
      digitalWrite(TRIAC1, LOW);        // desactiva modulo de triac con nivel bajo
      digitalWrite(TRIAC2, LOW);        // desactiva modulo de triac con nivel bajo
     
      
      evento_fin = false;       // carga valor falso en variable de control
    }             // para evitar ingresar mas de una vez
 }

 delay(1000);           // demora de 1 segundo

  if ( fecha.hour() == 2 && fecha.minute() == 0 ){  // si hora = ___ y minutos = ____ restablece valores de
    evento_inicio = true;       // variables de control en verdadero
    evento_fin = true;
  }
}

este trozo de código que significa ? que a las 2 de la noche se reinicia? si es asi apagara tira de led azul ?o continuara hasta la programacion de efecto dia y haga el cambio de luz. se podria poner que se reinicie a las 24:00 ? o realmente no afecta en nada

  if ( fecha.hour() == 2 && fecha.minute() == 0 ){  // si hora = ___ y minutos = ____ restablece valores de
    evento_inicio = true;       // variables de control en verdadero
    evento_fin = true;