sistema de ahorro de agua, almacena agua de una lavadora y la almacena en un tanque de 100 litros, el sistema solo acciona una bomba si detecta agua que sale por el drenaje de la lavadora, en caso contrario la bomba se apaga, el sistema detecta si la bomba no logra cebarse y induce cebado haciendo encendidos cortos hasta que un sensor de nivel verifica que el nuvel de un balde de almacenamiento parcial baja por accion de la succion de la bomba, se detecta ademas si el tanque de 100 litros se llena por completo y apaga la bomba y ademas entra en modo alarma si no logra cebarse

Dependencies:   DebouncedIn PinDetect Pulse1 mbed

La idea de este sistema es obtener agua gris para vaciado de cisternas(Sanitarios). El sistema aprovecha el agua de desecho de una lavadora y la almacena en un tanque elevado de 100 litros. Esta cantidad de agua es suficiente para vaciar una cisterna durante una semana completa, con el gasto de una persona. El sanitario se le clausura la entrada de agua potable y se le acondiciona una nueva tubería que llena el tanque con el agua gris de este sistema.

En resumen el sistema acciona la bomba solo si se detecta flujo de agua en el drenaje de la lavadora y además vigila que no se de una inundación. En caso de que el sistema falle por alguna razón.

El programa publicado esta incompleto, por ahora solo da pistas, aunque ya está listo y funcionando perfectamente, es un reto que debe ser programado. Mas adelante lo publicaremos completamente.

señales del sensor de flujo /media/uploads/tony63/lavadora2.png /media/uploads/tony63/lavadora3.png

*********** onda del sensor de flujo cuando este se esta perdiendo /media/uploads/tony63/lavadora4.png ***************** Detalle del sistema sobre la lavadora. se puede instalar el tanque grande directamente sobre la lavadora ya que esta puede soportar mas de 100Kg de peso. /media/uploads/tony63/lavacompleto.png

*********** Modulo FRDMKL25Z. Este se alimenta por un cargador USB de pared. y abajo se aprecia el escudo para los componentes adicionales . /media/uploads/tony63/lavafrdm.png /media/uploads/tony63/escudolavadora.png

*********** Sistema instalado. Vista del sensor de nivel en el balde /media/uploads/tony63/leveltank.png

*********** Observe la posición de las válvulas rojas de PVC. Esta posición es la de aprovechamiento de agua. Pero si se giran 90 grados(ambas), quedan en modo drenaje y es la posición que deben tener si el sistema cae en condición de contingencia o fallo. ************ . Circuito esquemático. se diseñó un escudo similar a los de arduino sobre un pcb universal de prototipos arduino, donde se soldaron las componentes electrónicas. Al igual que un arduino se inserta encima..no publicamos fotos de esta PCB. /media/uploads/tony63/planolava2.png

SE DEBEN HACER LAS SIGUIENTES CORRECCIONES AL PLANO CONECTAR EL SENSOR DE FLUJO A LA ENTRADA PTA13 (la original PTC12, no soporta interrupción) CONECTAR LA ENTRADA DEL SENSOR DE NIVEL DEL TANQUE GRANDE A PTD5 (la original no soporta interrupción) Este no se ve en el plano de arriba, EL RESTO ESTA OK! el sensor del plano de arriba es el del Balde. Se requiere uno idéntico para el tanque grande

Revision:
0:542dfe9204c5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Apr 22 06:44:17 2016 +0000
@@ -0,0 +1,144 @@
+/*
+DISEÑO POR MEDIO DE FREEDOM BOARD FRDMKL25Z DE NXP Y PROGRAMADA EN www.mbed.org  BUSCAR CUENTA Tony63 (PROGRAMA lAVADORA)
+PROGRAMA PARA UN SISTEMA DE RECICLAJE DE AGUAS GRISES EN UNA VIVIENDA. SU FUNCION ES ACCIONAR UNA BOMBA DE ASPIRACION.
+EN LA MEDIDA QUE LA BOMBA DE AGUA DE UNA LAVADORA LANZA AGUA POR EL DRENAJE.
+PARA DETECTAR ESTE EVENTO,  SE EMPLEA UN SENSOR DE FLUJO DE AGUA QUE PRODUCE PULSOS CON UNA FRECUENCIA PROPORCIONAL AL FLUJO
+ESTE YA SE LOGRO CARACTERIZAR Y PRODUCE UNA ONDA CUADRADA DE CICLO DE DUREZA DE CASO EL 50% CON DURACION SEGUN LAS FOTOS
+
+CUANDO SE ENCIENDE LA BOMBA, ESTA A VECES NO LOGRA ASPIRAR BIEN EL AGUA YA QUE NO SIEMPRE LOGRA EL CEBADO CORRECTO.
+TOCA HACER RECONECCIONES RAPIDAS DE LA BOMBA PARA QUE LOGRE ASPIRAR AGUA DE UN BALDE DONDE ESTA INSTALADA
+Y A ESE BALDE LE LLEGA AGUA DEL DRENAJE DE LA LAVADORA.
+EN LA PRACTICA PUEDE REQUERIR HASTA 3 RECIERRES 
+SI EL TANQUE DE ALMACENAMIENTO ELEVADO DE 100 LITROS, SE LLENA.  DEBE EMITIR ALARMA SONORA. ESTO SE LOGRA CON UN SENSOR DE NIVEL MAGNETICO
+EL OPERADOR DEBE ACCIONAR LAS VALVULAS MANUALES DE PVC DE COLOR ROJO EN EL MODO INDICADO POR LOS GRAFICOS. PARA EVITAR INUNDACIONES
+
+EL SISTEMA INICIALMENTE HACE UN TEST CON EL ENCENDIDO DE LEDS. LUEGO DE UNOS SEGUNDOS SE PONE A ESPERAR LA APARICION DE PULSOS EN UN RANGO DE 5 A 50ms 
+QUE ESTEN PRESENTES POR AL MENOS 200ms SI ESTO SUCEDE ES INDICO CLARO DE QUE HAY AGUA PASANDO POR EL DRENAJE Y UNOS SEGUNDOS DESPUES PRENDE LA BOMBA ESPERA A QUE LA BOMBA SUCCIONE UNOS SEGUNDOS Y LUEGO 
+SE VA A REVISAR EL SENSOR DE NIVEL DEL BALDE SI ESTE SE HACE UNO O ESTA EN UNO DEBE PONERSE A HACER RECIERRES ESTOS SON CONTADOS SI LLEGAN NA SER 4 EL SISTEMA ENTRA EN CONTINGENCIA Y DA ALARMA Y APAGA LA BOMBA
+EN ESTA SITUACION SE DEBEN PONER LAS VALVULAS MANUALES DE PVC EN MODO DRENAJE
+
+SI EL SENSOR DE NIVEL ESTA EN CERO ES INDICIO DE QUE ESTA BOMBEANDO BIEN Y EL SISTEMA RETORNA A MUESTREAR PULSOS SI LOS HAY PERMANECE LA BOMBA ENCENDIDA
+VUELVE A HACER TEST DEL NIVEL DEL BALDE Y ADEMAS REVISA NIVEL DE TANQUE, SI EL TANQUE SE LLENA SE DETECTA CON SENSOR DE NIVEL MAXIMO Y SE DA ALARMA SE DEBEN ACCIONAR VALVULAS DE PVC Y EL LED ROJO DESTELLA DE FORMA INDEFINIDA
+
+LA BOMBA SE ENERGIZA POR MEDIO DE UN TRIAC Y UN OPTO-ACOPLADOR (LED/TRIAC) MOC3020 QUE HACE EL DISPARO EN EL CRUCE CERO PARA EVITAR RUIDO ELECTRICO QUE PUEDE AFECTAR EL MICROCONTROLADOR
+*/
+#include "mbed.h"
+#include <Pulse1.h>
+#include "DebouncedIn.h"
+PulseInOut H2O(PTC12);// en este puerto se pone el sensor de flujo
+DigitalOut LedVerde(LED2);//leds sobre la FRDMKL25Z
+DigitalOut LedRojo(LED1);
+DigitalOut LedAzul(LED3);
+DigitalOut Bomba(PTA17);//triac que enciende la bomba por optoacoplador MOC3010
+DebouncedIn LevelBalde(PTC17);//sensor de nivel del balde donde se mete la bomba de aspiracion
+DebouncedIn LevelTanque(PTC16);//sensor de nivel en el tanque de almacenamiento de 100 litros
+//la logica de los sensores de nivel es; activado=1
+int i; //variable de conteo3
+int intentos=0;
+int primerP;
+// ************************ACA SE INICIA EL PROGRAMA*****************************
+int main(void){ 
+//inicialmente se prenden leds
+LedRojo=0;
+LedVerde=0;
+LedAzul=0;
+wait(2);
+LedRojo=1;
+LedVerde=1;
+LedAzul=1;
+wait_ms(500);
+LedVerde=1;//encendemos solo el led rojo
+LedRojo=0;
+LedAzul=1;
+LedVerde=1;
+Bomba=0;
+wait(1); //ESPERAMOS UN SEGUNDO
+/*nos quedamos a la espera de detectar si la lavadora acciona la bomba de drenaje.
+eso se hace detectando si hay flujo de agua y verificando que los pulsos no son falsos positivos.
+Medimos el primer pulso bajo que aparece y revisamos si esta en un ranfo de 5 a 50mS se hace un segundo muestreo a los 200mS y si estan en el mismo ramgo
+se consideran aceptables como pulsos de flujo casi constantes
+luego accionamos la bomba y esperamos a que esta reaccione y luego tenemos que verificar que hay bombeo al tanque grande de 100litros
+si el balde se esta llenando es por que no esta aspirando y se dben hacer recierres hasta que la bomba logre el cebado en cada intento volvemos a revisar el sensor de nivel delñ balde
+si logra bombear es por que el sensor da cero y lo que sigue es revisar los otros sensores de nivel si los hay y luego repetir a muestrear el sensor de flujo para decidir con la bomba accionada o apagarla
+*/
+//*************************************************************************I N I C I O************************************************                   
+muestreo_inc_flow:primerP=0;
+                  LedVerde=0;
+                  wait_ms(100);
+                  LedVerde=1;
+                  Bomba=0;
+                  LedRojo=0;
+                                      ;//leemos la duracion del primer pulso bajo)
+                                      ;//el pulso debe tener un rango conocido y real y si se cumple continua
+                                      ;
+                                      ;
+                                      {
+                      LedVerde=0;
+                      LedRojo=1;
+                      LedAzul=1;
+                      Bomba=1;
+                      wait(2);
+                      goto verify_pump;  
+                      }
+                                           //volver a muestrear los pulsos
+                    }
+                   LedVerde=1;
+                   LedRojo=0;
+                   LedAzul=1;
+                   Bomba=0;
+                   
+                              {  //si el tanque esta lleno indicar alarma general
+                     LedVerde=1;
+                     LedRojo=0;
+                     LedAzul=1;
+                     Bomba=0;
+                     goto fracasoR;
+                     }      
+                   goto muestreo_inc_flow;
+                     //*********************************************************************************************************
+                    //verificar si la bonba logra hacer succion muestreando el nivel de agua del balde
+                    //1. se acciona la bomba pero despues se alcanza el nivel maximo  del balde (flanco de subida es que el balde se rebosa)
+                    //2. se acciona la bomba pero el nivel no desciende (flanco de caida no presente, no vacia el balde)
+                    //************************************************************************************************* 
+                    //esperemos a que el balde se llene por causa de bomba sin succion, no debe haber agua al principio
+                    //pero si se acciona la bomba y no hay succion el nivel del balde sube y hay que inducir cebado
+                    //haciendo reconexiones rapidas de la Bomba a la red electrica.
+//nueva seccion********************************************************************************************************************************                    
+ verify_pump:                    {  //no hay succion se debe hacer recierres
+                                    //apagar bomba de inmediato y los leds
+                                    //esperamos un poco              
+                                    //prender bomba de nuevo
+                                    //prender led verde
+                                    //apagar el rojo
+                       
+                                    //si con 5 recierres no succiona,...apagar todo y dar alarma general
+                       
+                         goto fracaso;    //ir a fracaso
+                       }
+                                    //esperar que inicie el bombeo
+                                    //si esto se cumple, logró succión
+                                    //hacer intentos =0;
+                                    // toca ir a esperar perdida de flujo
+                       }
+                                    //va a verificar de nuevo bomba               
+                     }
+                                    //como no es verdadero todo esto toca volver a indagar por pulsos
+                  //***********************************************************************************************************
+fracaso:          LedRojo=1;// se enclava el programa en un ciclo infinito donde solo sale si de da reset prende el led azul
+                  LedVerde=1;
+                  LedAzul=0;
+                  Bomba=0;
+                  wait_ms(300);
+                  LedAzul=1;
+                  wait_ms(300);
+                  goto fracaso; 
+fracasoR:         LedRojo=0;// se enclava el programa en un ciclo infinito donde solo sale si de da reset prende el led azul
+                  LedVerde=1;
+                  LedAzul=1;
+                  Bomba=0;
+                  wait_ms(300);
+                  LedRojo=1;
+                  wait_ms(300);
+                  goto fracasoR; 
+                     
+ }