Bueno, lo primero de todo, me presento en este post, que aunque llevo leyendolo unos dias, no me había decidido a escribir. Me llamo Pedro, soy de Las palmas (vease: nueva ubicación), tengo un tropomorfo de años y soy nuevo en Arduino, aunque no en electricidad/electrónica/informática.
Para poner un poco en antecedentes, voy a contar como surgió la idea de esta centralita.
Hace un tiempo, reforme la casa y se quedo de coj***s estooo, de put* **dre en fin, muy bien, pero poco despues, se revento un grifo y gracias a Buda que estaba en casa, por que en 2 minutos que tardé en darme cuenta que no estaba a la orilla de la playa, la casa se inundó con unos 2cm de agua, si llego a estar fuera y vuelvo varias horas despues, ni hablamos. La cosa la solucioné rapido, cerré el agua, 5 horas limpiando y grifo nuevo. Listos.
Unos meses despues (no se cuantos, a lo mejor año y medio, que se yo), mi mujer se dejo sin querer un grifo abierto (o queriendo...), ¿y sabeis lo que paso? 5 horas recogiendo agua, yo cag*me en los mtos de toda la familia de mi mujer yo un poco enojado con mi mujer y bla, bla, bla.
De todo esto saque algo en claro: que tenia que buscar una forma de evitar que volviera a pasar. Así que tiré de lo aprendido en ese sitio que fuí para que me enseñaran a calcular la masa del sol a partir de que pepito tiene 2 naranjas y juanito 2 manzanas....
Bueno, se me ocurrio montar una centralita con sensores de agua distribuidos por puntos clave de la casa. La primera idea fue lo tradicional, usar puertas lógicas, así que ni corto ni perezoso, me puse en ello y diseñe un modelo utilizando puertas NOR en modo biestable R-S, un par de 555s, un puñado de leds y listos.
Esquema con Proteus de la primera idea del diseño.
Creyendolo un simple proyecto, diseñe el circuito, (ahí se empezó a complicar la cosa) y lo tuve que hacer a doble cara, ya que con una cara eran demasiadas conexiones a realizar.
Diseño a doble cara
Pese a todo, lo imprimí sobre PCB de doble cara, ataqué la placa y la barnizé, pero dandome cuenta (un poco tarde, por cierto), de que me estaba complicando la vida demasiado para algo tan pobre.
La placa con algunos de los componentes de ya soldados (ya se que se empieza con los mas pequeños, pero no los tenia a mano).
Fué en este momento cuando decidí optar por un PIC. Pero ¿por que montar un PIC? ya conocia Arduino y sus virtudes, pero nunca lo había tenido entre las manos, así que ni corto ni perezoso, opte por hacer el proyecto con Arduino, a pesar de no conocer nada practicamente sobre el.
Pues hasta aqui el como llegé al montaje de este (ahora ya complejo) proyecto, a partir de ahora, me centrare en lo que a todos nos interesa: Arduino y sus módulos.
La idea principal es utilizar unos sensores repartidos por la vivienda y conectados a Arduino mediante entradas analogicas. Los sensores, a pesar de ser muy comunes y baratos, opte por hacerlos yo, por varias cuestiones, entre ellas, que podia decidir que resistencia otorgarles (mas adelante lo expicaré).
Los sensores en forma de E, recien estañados, tienen trabajo por delanta aún.
Estos sensores van con esa cara al aire (una vez terminados, claro), con una malla de nylon para evitar falsos, y por su parte posterior, una resistencia de 47k y un encapsulado de plastico, esto hace que sea posible transmitir la información solo con 2 hilos (masa y señal, por consiguiente esta resistencia estaría en pull down). Por otro lado en la placa ponemos una pull up de 51k (en mi caso) y tengo variable para aburrirme:
VALOR | ESTADO |
---|---|
-100 | cortocircuito |
100-300 | sensor mojado |
450-550 | sensor seco y conectado |
+900 | sensor desconectado |
En la pantalla de inicio
Con sensor mojado
¿Desconectar el sensor?
Sensor seco por si mismo, pero notificando que hubo un fallo
Los valores intermedios, los tendrria que mirar muy bien, o darlos por falsos, lo que daria como consecuencia un fallo del sensor.
Aparte de los sensores mencionados, utilizo también:
- DHT11
- DS1307
- LCD (16x02 en esta versión, pero será 20x04 en su versión definitiva).
- Matriz de teclado 4x4 (3x2 en su version definitiva).
El LCD he optado por conectarlo mediante I2C, principalmente para ahorrar E/S. Cabe destacar que en este moento no tiene E/S disponibles el Arduino, pero en el momento que el teclado cambie a 3x2, le quedarán 3 E/S libres, que perfectamente se pueden utilizar para conectar un registro de desplazamiento, como un 595 y ampliarlas a 8.
El objetivo del proyecto es:
- Presentar fecha, hora, temperatura y humedad por LCD
- Monitorizar el estado de los sensores
- En caso de sensor en corto, mojado, desconectado involuntariamente o fallo desconocido alertar redundantemente, mediante una sirena sonora y alarma visual, y siempre activar la electrovalvula.
- el sistema será autosuficiente, no necesitará de ningún componente extra para realizar sus funciones, incluida la puesta en hora/fecha
- Se podrá mostrar tanto por LCD, como por puerto serial los datos mas relevantes, tales como fecha y hora, estado actual, mínimo y máximo de los sensores, hora de la última alarma, número de alarmas, etc
- debe de contar con los menús y submenús para realizar todas estas tareas
- un montón de cosas que se me quedan en el tintero
- cosas que ya estan implementadas, pero que no he mencionado...
Como podreis ver en el código, lo primero que llama la atención es que eseté configurado solo para leer un sensor, esto es así por que es de la única forma que lo puedo tener en la protoboard, me es imposible conectarle todos los sensores. Si quiero ver que hace con todos los sensores, lo simulo en Proteus.
El código está extremadamente comentado (quizá en exceso), pero será muy dificil perderse por el.
Un último detalle, el código esta integramente (el 100%) escrito por mi, no hay ni una sola linea copiada de internet, ni de ningún otro sitio. Espero que quien pueda ayudar, me ayude, y quien no, que aprenda.
Principal problema: Sketch uses 19.406 bytes ...... Global variables use 1.440 bytes ... A este ritmo, me termino de escribir el código y la mitad de las variables en la po**a en la mano.
El código lo pongo en post posteriores, ya que el máximo de caracteres permitidos por post es de tan solo 9000.
///////////////////////////////////////////////////////////////////////////////////////////////
EDITO: Dejo el archivo .ino aqui, (gracias a surbyte), no sabia que se podia adjuntar.
alarma.ino (33.5 KB)