Control persiana con luxómetro y sensor de lluvia

Cerrado
Juan Ramon
Mensajes: 244
Registrado: Mar Feb 12, 2019 7:52 pm
Ubicación: Alicante

Control persiana con luxómetro y sensor de lluvia

Mensaje por Juan Ramon » Vie Feb 22, 2019 8:09 pm

Iniciado por crakarts.
Bueno pues hoy me ha dado por programar el tema de las persianas, quiero controlar que se bajen cuando llueva y cuando sea de noche y por el contrario cuando deje de llover vuelva a su posición inicial y por la mañana que se suban hasta arriba, aquí os pongo mi código a ver que os parece

GLOBAL VARIABLE ZONE

Código: Seleccionar todo

boolean lluvia=false;   // Variable boolean para la pantalla STATUS SCREEN
boolean noche=false;//Variable para ver si es de noche

byte contadorLluvia=0;//Contador para ver si lleva dos minutos lloviendo
byte contadorOscuridad=0;//Contador que mira si es de noche
byte posicion[2]={0,1}; // Poner nº de circuitos de persianas y en valor array el nº del circuito
NEW MINUTE()

Código: Seleccionar todo

//********************DETECTOR DE LLUVIA********************
//Si detectamos que esta empezando a llover
if (circuits[10].Value == 1 && noche==false && lluvia==false && Condicionados[0]==true)
{

//Guardamos la posicion de las persianas antes de bajarlas
for (int n=0;n<Number_Circuit;n++)     // bucle que recorre todos los circuitos y si es el de persiana actua en consecuencia
   {
 if (circuits[n].Type == Persiana)
 {
  posicion[n]=circuits[n].Value;  // graba posicion en variable
  circuits[n].Value=0;
 }
}
lluvia=true; //Ponemos el booleano lluvia en verdad
SelectScene(1);//Bajamos las persianas con la escena 1
SetAlarm(1);//Mandamos alarma de bajar persianas por lluvia

}
else{
contadorLluvia=0;// Si era una falsa alarma pone el contador a 0
}
//Si detectamos que ha dejado de llover
if (circuits[10].Value == 0 && noche==false && lluvia==true && Condicionados[0]==true)
{
contadorLluvia++;
if(contadorLluvia==5)
{
for (int n=0;n<Number_Circuit;n++)     // bucle que recorre todos los circuitos y si es el de persiana actua en consecuencia
   {
 if (circuits[n].Type == Persiana)
 {
  circuits[n].Value=posicion[n];    // Reestablece la posicion que tenia
 }
}
lluvia=false;//ponemos el booleano lluvia en falso
SelectScene(3);//Subimos persianas
SetAlarm(3);//Mandamos alarma
}
}
//Si deja de llover y es de noche, no hacemos nada , solo cambiamos el nooleano lluvia
else if (circuits[10].Value == 0 && noche==true && lluvia==true && Condicionados[0]==true)
{
lluvia=false; //Cambiamos el booleano lluvia a falso
}

//********************DETECTOR DE LUZ********************
//Si detectamos que es de noche
if (Sensors[0].Value < Consignas[0] && noche==false && lluvia==false && Condicionados[1]==true)
{
contadorOscuridad++;
//Esperamos cinco minutos para confirmar que es de noche
if(contadorOscuridad==5)
{
noche=true; //Ponemos el booleano noche en verdad
SelectScene(1);//Bajamos las persianas con la escena 1
SetAlarm(0);//Mandamos alarma de bajar persianas por ser de noche
}
}
else
{
contadorOscuridad=0;//Si no es de noche reactivamos el contador
}
//Si detectamos que es de día
if (Sensors[0].Value>Consignas[0] && noche==true && lluvia==false && Condicionados[1]==true)
{
noche=false; //Ponemos el booleano noche en falso
SelectScene(2);//Subimos las persianas con la escena 2
SetAlarm(2); //Subimos las persianas por que es de día
}
FREE TEXT

Código: Seleccionar todo

if (Number==1){//Primera linea de la pantalla texto libre
if (noche==true){return "Modo Noche";}else{return "Modo día";}}
if (Number==2){//Segunda linea de la pantalla texto libre
  if (lluvia==true){return "Modo Lluvia";}else{return "Modo deja de llover";}}


Electra
Hola crackarts.
Yo tengo instalado en una de mis centrales algo parecido a lo que quieres montar.
Sensor de luz para persianas y luz exterior.
Sensor de lluvia para cerrar toldos.
Sensor de viento para cerrar toldos.
Todos los sensores están programados con consignas que hacen que se genere una escena y así es más versátil la instalación. Por ejemplo cuando anochece en invierno interesa que se cierren las persianas para contribuir al aislamiento, pero en verano las subo al porcentaje programado en una escena para refrescar.
Todo me funciona perfectamente excepto el sensor de lluvia que al principio era el que comenta Roberto, pero como dice bobq es eficaz con el riego pero tarda mucho en reaccionar si queremos proteger un toldo o una ventana para que no se moje cuando llueve.
Ahora he puesto uno de los chinos sobre circuito impreso y el rocío hace que se dispare, pero bueno en verano que es cuando abro los toldos no suele existir este problema.

CÓDIGO:
USER CODE LIBRARY START

Código: Seleccionar todo

boolean Oscuridad=false;   // Variable boolean para la pantalla STATUS SCREEN
boolean lluvia=false;   // Variable boolean para la pantalla STATUS SCREEN 
GLOBAL VARIABLES ZONE

Código: Seleccionar todo

boolean Oscuridad=false;   // Variable boolean para la pantalla STATUS SCREEN
boolean lluvia=false;   // Variable boolean para la pantalla STATUS SCREEN
void LoopNewSecond(){//This event occurs every second

Código: Seleccionar todo

//SENSOR LUZ  
  Sensors[0].Value = analogRead(A0);                       // El sensor[0], tendrá el valor de analogRead (A0).
  if((Sensors[0].Value > Consignas[0])&&(Oscuridad==true)) // Si(el valor del sensor[0] es mayor que la consigna [0])y Oscuridad==true
  {
  Oscuridad=false;                                         // La variable Oscuridad tomará el valor de falsee (MODO NOCHE)
    if  (Condicionados[3] == true)                         // Si el condicionado [3] está activado
  {
  
  SelectScene(4);                                          //SelectScene(4)
  SetAlarm(1);                                             //SetAlarm(0)
   }
   }
  if((Sensors[0].Value < Consignas[1])&&(Oscuridad==false)) //  Si((el valor del sensor[0] es menor que la consigna [1])
 {      
  
  Oscuridad=true;                                          // La variable Oscuridad tomará el valor de true (MODO NOCHE)

  if  (Condicionados[7] == true)                           // Si el condicionado [7] está activado
  {
   circuits [22].Value=249;
  SelectScene(8);                                          //SelectScene(8)
  SetAlarm(2);                                             //SetAlarm(1)
   } 
   }  

      //SENSOR  LLUVIA
  if (Inputs[15].InState > 0){lluvia=true;}
  else{lluvia=false;}

   //SENSOR LLUVIA
  if ((lluvia && Condicionados[9])==true)                               //Lluvia & Condicionado, (vamos a cerrar las persianas)
  {
 SelectScene(10);circuits[22].Value=249;                                               // Se selecciona la escena(10)
  }  


String FreeText(byte Number){

Código: Seleccionar todo

if (Number==1){//Primera linea de la pantalla texto libre
  if (Oscuridad==true){return "Modo Noche";}else{return "Modo Día";}
}

if (Number==2){//Segunda linea de la pantalla texto libre
  if (lluvia==true){return "¡ESTÁ LLOVIENDO!";}else{return "No llueve";}
} 
Nota: no están incluidas las líneas pertenecientes al sensor de viento dado que no procede en este post.
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.
Juan Ramón.

Cerrado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado