efecto dia y noche en acuario

Van varias preguntas y no te hemos respondido ninguna.

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

No importa el tiempo que este funcionando. Un dispositivo no necesita horas a menos que por programa tu lo fuerces a situaciones donde la disipaci贸n cambie. Como no tengo esa respuesta dir茅 o supondr茅 que siempre es igual. Tu ponlo a funcionar en luego de un par de minutos (solo por dar un tiempo de calentamiento) siente como esta el MOSFET. Caliente no significa que debas ponerle disipador. Ahora si lo tocas y no puedes sostener tus dedos entonces si conviene usar disipador.

Respuesta a post#19

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;

en esa consulta comparas la hora usando fecha.hour() con las 2 AM y los minutos con 0

El problema es que eso se ejectua MUCHAS VECES durante todo ese largo minuto. Pero si, dice que a las 2:00 se active evento_inicio y qeu evento_fin tmb o sea.. algo no esta bien.

Como no has puesto que hacen evento_inico que supongo debieran encender las luces y evento_fin debieran apagarlas, supongo que ha sido un error de c贸digo. La idea es que evento_inicio se ponga en true com esta y evento_fin este en la rutina de activaci贸n de las luces o de las tiras led y que luego de recibir la orden cambien evento_inicio = false.

Este c贸digo no esta bien porque esto se repite con cada ciclo asi que por mas que apagues los flags (evento_inicio o evento_fin) se reactivar谩n con cada ciclo.

Respueta a post#21

for (BRILLO = 0; BRILLO < 256; BRILLO++){   // bucle incrementa BRILLO
聽 analogWrite(MOSFET, BRILLO);聽 聽        // PWM en pin 3 con valor de BRILLO
聽 delay(25);聽 聽 聽 聽                // demora de 25 mseg.
聽 }

Esto es un ciclo que va de 0 a 255 y no responde a lo que pides que es aumentar el brillo por hora. Primero debes definir cuanto brillo aumentar谩 por hora. Porque tienes 24 horas y 256 niveles asi que ese es tu primer desaf铆o. Luego no puedes usar un ciclo for sino un incremento dado por una variable de tiempo que tu determinar谩s. puede ser por minuto, cada 2 minutos o cada X segundos.

Lo que veo al final del post#22 es que estas cometiendo algunos errores de como encarar la cosa. Si pones todo en un ciclo el cambio ser谩 vertiginoso y eso no creo que sea la idea.

Veamos este 煤ltimo c贸digo

if ( fecha.hour() == 12 && fecha.minute() == 57 ){ // si hora = __ y minutos = __
聽 聽 if ( evento_inicio == true ){聽 聽  // si evento_inicio es verdadero
聽 聽 for (BRILLO = 0; BRILLO < 256; BRILLO++){聽 // bucle incrementa BRILLO
聽 analogWrite(TRIAC1, BRILLO);聽 聽 聽 聽 // PWM en pin 3 con valor de BRILLO
聽 聽 }
聽 聽 聽 analogWrite(TRIAC1, HIGH);聽 聽 聽  // activa modulo de triac con nivel alto <=== ESTA DE MAS
聽 聽 聽 analogWrite(TRIAC2, LOW);聽 聽 聽  // activa modulo de triac con nivel alto聽 <=== ESTA DE MAS 
聽 聽  
聽 聽 聽 evento_inicio = false;聽 聽 聽 聽 // carga valor falso en variable de control聽  
聽 聽 }聽 聽 聽 聽 聽 聽  // para evitar ingresar mas de una vez
聽 }

Si tienes un ciclo for para que luego dejas un comando como analogWrite(TRIAC1, HIGH);

analogWrite requiere un pin como TRIAC y un valor entre 0 y 255 no un true/false como HIGH o LOW. Asi que elimina esas dos l铆neas. Seria en todo caso

analogWrite(TRIAC1, 255);
analogWrite(TRIAC2, HIGH);

pero nunca analogWrite(TRIAC1, HIGH);

pero repito, es superfluo o al menos lo es para TRIAC1 porque ya lo dejaste en 255.

Dime si se entiende?

ok gracias por responder , voy a desglosarlo y a analizar todas tus respuestas , tanto movimiento y pregunta a sido gracias al puente , en las semanas normales no tengo mucho tiempo , pero lo dicho poco a poco voy a empaparme de tus respuestas

Bueno, te ayudo en lo mas importante. Dime en cuanto tiempo quieres que amanezca y en cuanto oscurezca.

Digamos que dices 1 hora = 60 min = 60 * 60 seg = 3600 seg

Si tienes 256 pasos entonces 3600/256 = aprox 14 segundos no importa si no es perfecto

Entonces cada 14 segundos logras que pase de 0 a brillo total o de esa situaci贸n a oscuridad. C贸mo lo haces?

No como lo estas programando o si pero con leve variante.

Tomar茅 tu c贸digo y lo modificar茅 de acuerdo a estas dos posiciones. Amanecer y Oscurecer, pondr茅 el lapso de tiempo como una constante para que tu lo modifiques a tu gusto tmb.

Esta es una versi贸n simple de como deber铆a ser. Prueba a ver si funciona

#include  聽 // incluye libreria para el manejo del modulo RTC
#define 聽STEP_AMANECER 14000

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
int BRILLO; 聽 聽 聽 // variable para almacenar valores PWM
unsigned long tbrillo;

# 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
int hora = fecha.hour();
int minuto = minuto();

// DateTime y asigna a variable fecha
if ( hora == 12 && minuto == 57 ) { // si hora = __ y minutos = __
evento_inicio = true;
}
if (evento_inicio)
amanecer();


if ( hora == 12 && minuto == 58 ){ // si hora = __ y minutos = __
if ( evento_fin == true ){ 聽 聽 聽 聽// si evento_fin es verdadero
analogWrite(TRIAC1, 聽 0); 聽 聽 聽 聽// desactiva modulo de triac con nivel bajo
analogWrite(TRIAC2, 255); 聽 聽 聽 聽// desactiva modulo de triac con nivel bajo
evento_inicio = false; 聽 聽 聽 // carga valor falso en variable de control
} 聽 聽 聽 聽 聽 聽 // para evitar ingresar mas de una vez
}
}

void amanecer() {
if (millis() - tbrillo > STEP_AMANECER) {
if (BRILLO ++ > 255) {
聽 聽BRILLO = 255;
}
analogWrite(TRIAC1, BRILLO); 聽 聽 聽 聽// PWM en pin 3 con valor de BRILLO
tbrillo = millis();
}
analogWrite(TRIAC2, 0); 聽 聽 聽 // activa modulo de triac con nivel alto
}

hola gracias ,mi intenci贸n podr铆a ser : empieza a amanecer a las 6 (0 valor ) hasta las 12 que es el m谩ximo (256 valor) y a partir de las 12 ( 256 valor) hasta las 18:00 (0 valor)

1 hora= 60 min=60*60 seg=3600 segH x 6H=21000 seg/256 valor = 84,375seg /60 =1,4 minutos.

osea a mi entender cada 1,4 minutos deber铆a de incrementar una d茅cima el valor

Bueno, cambia esto

#define聽 STEP_AMANECER 14000 es para 14 segundos = 14 * 1000

en tu caso pon

#define聽 STEP_AMANECER 1.4*60*1000

hola , cuando le doy a verificar me sale este error , :

estado de salida 1 'minuto' no se puede utilizar como funci贸n

esta traducido

Captura.PNG|717x746

Creo que va as铆

int minuto = fecha.minute();

Vamos taper!! 谩nimo, hay cosas que son instintivamente simples y otras no tanto.

Ya te respondi贸 @krnlpanic pero debieras observar que tienes un objeto fecha definido como

DateTime fecha = rtc.now();

Y luego de ahi se desprenden fecha.hour() y fecha.minute()

Si lo miras ahora podr谩s observar como tiene cierta l贸gica.

con este cambio si se deja cargar el codigo voy a probar a ver

hola , e estado realizando pruebas con este trozo de c贸digo, y veo que y funciona, pero cuando sube la intensidad cada 1.4 minutos , se apaga unos 5 segundos el led lo e calculado con un cronometro , pero entre el apagado y el momento que esta encendido si que esta 1.4 minutos. Esto es en amanecer , ahora tendr茅 que hacer lo mismo con atardecer, este paso deber谩 ser al contrario o sea menos menos (--) ? y despues con el efecto noche?

gracias

#define 聽STEP_AMANECER 1.4*60*1000
#define 聽STEP_ATARDECER 1.4*60*1000
#define 聽STEP_NOCHE 1.4*60*1000

Si se apaga es porque hay algo mal programado. Dejame verlo.

NOTA: Recuerda que aunque sea una sola l铆nea de c贸digo siempre debe ir con etiquetas para c贸digos. Edita por favor.

lo siento no hay forma no lo saco :angry: :angry: :angry:, no puedo abusar mas de ustedes, voy a utilizar la primera versi贸n un triac para cada tira de leds programados para que enciendan a diferete horario y mas o menos hacen la funci贸n de efecto d铆a y noche , gracias a todos los que me hab茅is ayudado

Este es el problema?

ola , e estado realizando pruebas con este trozo de c贸digo, y veo que y funciona, pero cuando sube la intensidad cada 1.4 minutos , se apaga unos 5 segundos el led lo e calculado con un cronometro , pero entre el apagado y el momento que esta encendido si que esta 1.4 minutos.

no, el problema es el no saber,

Bueno. Tranquilo @taper.
Mira te dir茅 algo, hay gente que no da ganas de ayudar y otras que hacen todo el esfuerzo. Tal vez arranquen mal (por su desconocimiento) y no sepan expresarse. Recuerda que los que te responden son siempre gente que tiene alguna experiencia y no todos somos tolerantes (me incluyo, yo tengo mis d铆as).
Asi que no saber no debe avergonzarte. Verg煤enza debe darle a alquel que viene y pide que le hagan el trabajo.

Te propongo lo mismo que le he dicho a muchos.
Presiona RESET sin olvidar todo lo que ya tienes y recomencemos.
Dime donde has quedado estancado y trabajamos desde ahi paso a paso.
Te parece?

ok

hola e estado haciendo mas pruebas : e puesto en programaci贸n a 6 horas este trozo de c贸digo y continua apagando-se el led a cada momento que hace el cambio de subir la intensidad, pero ahora esta 1 minuto encendido y 5 segundos a pagado + o - , calculado con el cronometro del tlf , antes con una programaci贸n de unos 5 minutos estaba encendido 1.4 minutos y 5 segundos apagado, pero me e dado cuenta que en la misma placa del TRIAC lleva un diodo que indica que esta encendido , pues cuando se apaga el led programado el led de la placa del triac no se apaga continua siempre encendido , pero cuando empieza la programacion si que esta casi apagado osea luce muy tenue como la programacion poco a poco va subiendo de intensidad

este trozo de c贸digo que significa? para que sirve? que funci贸n realiza'

void amanecer() {
if (millis() - tbrillo > STEP_AMANECER) {
if (BRILLO ++ > 255) {
 聽 BRILLO = 255;
}
analogWrite(TRIAC1, BRILLO); 聽 聽 聽 聽// PWM en pin 3 con valor de BRILLO
tbrillo = millis();
}
analogWrite(TRIAC2, 0); 聽 聽 聽 // activa modulo de triac con nivel alto

Esa porci贸n de c贸digo o procedimiento lo que hace es esto.

usa una variable llamada tbrillo que es del tipo unsigned long. Dicha variable luego de activar el TRIAC1 con el nivel de brillo corresondiente analogWrite(TRIAC1, BRILLO); se actualiza con el valor actual de millis() para esperar al pr贸ximo momento de cambiar por un nuevo nivel de brillo. El famoso step. Ademas se asegura que TRIAC2 este apagado.

Si el BRILLo supera 255 lo pone en ese valor.

Nada mas. Todo eso ocurre cuando es llamado amanecer() y si se cumple la condici贸n

if (millis() - tbrillo > STEP_AMANECER) {

es decir cada STEP_AMANECER milisegundos.

estoy en ello , a demas me e apuntado a un peque帽o cursillo..