-
Otra duda que me salta al volver a leer, es necesario los reles si para lo único que lo voy a usar es para amanecer -apagado-anochecer, lo pregunto porque como durante el día no los voy a encender me daría igual que saltase la luz, y tampoco necesitaría la foto resistencia?. Perdona tanta pregunta.
saludos.
-
Duende puedes hacer un (amanecer - anochecer) por la mañana y otro por la tarde, y así ni relés ni célula, pero con esta última queda de lujo. Un saludo
-
Si no te digo que no, pero para ir iniciándome y modificar el programa en los horarios yo creo que cuantas menos cosas mejor, de momento, así que yo me decanto por un amanecer por la mañana y un anochecer por la tarde que es lo más básico y lo que ahora mismo quería hacer.
si comprara una mega en lugar de una uno, también habría que modificar el número de los pines donde van las entradas y salidas?, o simplemente es tener una placa con mayores posibilidades?.
y de las tres versiones de programa que has realizado yo debería usar una intermedia entre la primera y la segunda?
muchas gracias por tus aclaraciones.
-
Duende con este codigo de abajo, una placa UNO, el rtc3231, y una LCD 1602 con el serial I2c. Tienes lo que necesitas, solo tienes que agregarle los dias y meses que te hagan falta con sus horas, que son parecidos a los anteriores.
Funciona perfecto, y ahora amanecer a las 8.00 hace 30 minutos amanecer, a las 8:45 corta luces; a las 20:00 enciende al 100% luces y alas 20:45 hace el anochecer de 30 minutos
if(d.hour24h == 8 && d.minutes >= 0){
alba();}//llamada al alba
else if(d.hour24h == 8 && d.minutes == 45){
apagar();}//llamada a apagar luces
if(d.hour24h == 20 && d.minutes == 0){
encender();}//llamada a endencer
else if(d.hour24h == 20 && d.minutes >= 45){
ocaso();}//llamada ocaso
******************************************
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); /* Funcion de configuracion
de pines del modulo LCD/I2C (Direccion,en,rw,rs,d4,d5,d6,d7,backlight,polarida d)*/
#include <RTC.h> //version 1.4.4
RTC rtc(DST_ON);
#include <Wire.h> // Libreria de comunicacion I2C/TWI de Arduino IDE
int PIN_P_LUCES1 = 5;// pin de las tiras
int PIN_P_LUCES2 = 6;
byte DIMEO_LUZ1 = 255;
byte Dimeo1;
long duende = 7000; // Intervalo de espera para el ir subiendo-bajando la intensidad (milisegundos)
long previousMillis = 0; // valor que almacena tiempo
unsigned long currentMillis; // Guardo el tiempo actual para ir comparando con previousMillis
void setup()
{
lcd.begin(16, 2); //Inicializacion de LCD de 20 caracteres y 4 lineas
lcd.backlight(); // Dejamos encendido el backlight
rtc.getData();
pinMode( PIN_P_LUCES1, OUTPUT );
pinMode( PIN_P_LUCES2, OUTPUT );
Dimeo1 = 0;
}
void loop()
{
Data d = rtc.getData();
lcd.setCursor(0, 0);
if (d.hour24h < 10)
lcd.print("0");
lcd.print(d.hour24h, DEC);
lcd.print(":");
if (d.minutes < 10)
lcd.print("0");
lcd.print(d.minutes, DEC);
lcd.print(" "); // espacio al dia
/*
if (d.seconds < 10)
lcd.print("0");
lcd.print(d.seconds, DEC);
lcd.setCursor(12, 0);
*/
if (d.day < 10)
lcd.print("0");
lcd.print(d.day, DEC);
lcd.print("/");
if (d.month < 10)
lcd.print("0");
lcd.print(d.month, DEC);
lcd.print("/");
lcd.print(d.year - 2000, DEC);
//lcd.print(d.year, DEC);
//lcd.clear(); //Borrado del LCD
lcd.setCursor(0, 1); // direccion LCD(caracter 0,linea 2)
lcd.print("AVIARIO DUENDE69");
if (d.month == 2) {
if ((d.day == 1)||(d.day == 2)){
if(d.hour24h == 8 && d.minutes >= 0){
alba();}//llamada al alba
else if(d.hour24h == 8 && d.minutes == 45){
apagar();}//llamada a apagar luces
if(d.hour24h == 20 && d.minutes == 0){
encender();}//llamada a endencer
else if(d.hour24h == 20 && d.minutes >= 45){
ocaso();}//llamada ocaso
}//fin dias
}//fin mes
}//fin lood
void alba(){// ENCIENDE LUZ EN MEDIA HORA AUMENTANDO EL VALOR De 0 HASTA 255
//Data d = rtc.getData();
currentMillis = millis();
if(currentMillis - previousMillis > duende)
{
previousMillis = currentMillis;
lcd.setCursor(0, 1);
if ( Dimeo1 < DIMEO_LUZ1 )
{
Dimeo1 += 1;
if (Dimeo1 >= DIMEO_LUZ1){
Dimeo1 = DIMEO_LUZ1;
}
analogWrite( PIN_P_LUCES1, Dimeo1 );
analogWrite( PIN_P_LUCES2, Dimeo1 );
}//fin if-dimeo
}//fin millis
}//fin amanecer
void apagar(){// corta la luz en seco a 0
if (Dimeo1 >= DIMEO_LUZ1){
analogWrite( PIN_P_LUCES1, 0 );
analogWrite( PIN_P_LUCES2, 0 );
}
}
void encender(){//enciende la luz al maximo (255)
if (Dimeo1 < DIMEO_LUZ1){
Dimeo1 = DIMEO_LUZ1;
analogWrite( PIN_P_LUCES1, Dimeo1 );
analogWrite( PIN_P_LUCES2,Dimeo1 );
}
}
void ocaso(){// APAGA LUZ Nº1 EN MEDIA HORA DISMINUYENDO EL VALOR DE 255 HASTA 0
currentMillis = millis();
if(currentMillis - previousMillis > duende)
{
previousMillis = currentMillis;
if(Dimeo1 > 0){
Dimeo1 -= 1;
if (Dimeo1 <= 0){
Dimeo1 = 0;
}
analogWrite( PIN_P_LUCES1, Dimeo1 );// APAGA LA TIRA DE LEDS
analogWrite( PIN_P_LUCES2, Dimeo1 );
}
}
}//fin ocaso
-
Layans muchísimas gracias por la paciencia que estás teniendo con mi ingnorancia, de verdad que te lo agradezco.
if(d.hour24h == 8 && d.minutes >= 0){
alba();}//llamada al alba
else if(d.hour24h == 8 && d.minutes == 45){
apagar();}//llamada a apagar luces
if(d.hour24h == 20 && d.minutes == 0){
encender();}//llamada a endencer
else if(d.hour24h == 20 && d.minutes >= 45){
ocaso();}//llamada ocaso
entiendo que aquí es donde debo modificar el horario que quiero que empiecen y terminen el encendido y apagado de luces.
-
En que zona del programa debería de colocar los días?, es necesario cambiarlo todos los años sino empiezo el mismo día?
podria usar las fórmulas que has usado en los archivos anteriores?, y el programa que me has puesto se grabaría tal cual está una vez modifique las horas y coloque las fechas en las que quiero que funcionen?, copiare también lo de la sonda de temperatura ya que es importante.
gracias
-
Duende, si has visto los otros códigos, es similar a ellos.
if (d.month == 2) {
if (d.day == 1){
if(d.hour24h == 8 && d.minutes >= 0){
alba();}//llamada al alba
else if(d.hour24h == 8 && d.minutes == 45){
apagar();}//llamada a apagar luces
if(d.hour24h == 20 && d.minutes == 0){
encender();}//llamada a endencer
else if(d.hour24h == 20 && d.minutes >= 45){
ocaso();}//llamada ocaso
}//fin dias
if(d.day == 2){
if(d.hour24h == 8 && d.minutes >= 5){
alba();}//llamada al alba
else if(d.hour24h == 8 && d.minutes == 45){
apagar();}//llamada a apagar luces
if(d.hour24h == 20 && d.minutes == 0){
encender();}//llamada a endencer
else if(d.hour24h == 20 && d.minutes >= 55){
ocaso();}//llamada ocaso
}//fin dia 2
if(d.day == 3)
if(d.hour24h == 8 && d.minutes >= 15){
alba();}//llamada al alba
...............
}//fin mes
Así sucesivos
-
Ufff creo que si lo entiendo, voy a s ver los otros, ahora cada día lleva tela de curro.
saludos
-
Si logro montar algo, que realmente no sé cuándo podrá ser, me lo podrás revisar?.me refiero al programa.
saludos
-
Hola, agradecer tu trabajo antes de todo, una consulta, se puede usar un rele en vez de un tip ?
Enviado desde mi GT-I9195 mediante Tapatalk