Proyecto riego automatico con pic?

Hola.

Recien me estoy iniciando en esto de la programacion de PIC'S. Es por eso que acudo a ustedes para que me ayuden con sus consejos y experiencia!

Lo que pasa es que nos dejaron crear un "proyecto" con pic, he estado pensando en un "Control de Riego Automatico" pero la verdad no he encontrado mucho en la red!

Tendra alguien de ustedes un poco de información que me pueda proporcionar?

O algun tipo de proyecto que me recomienden, que ya haya sido creado o probado por alguien antes?

una de las condiciones del proyecto es:

Que sea "INNOVADOR"

se puede decir que tenga una funcion mas o que este mas moderno o algo por el estilo!

Bueno pues espero me puedan ayudar!

Muchas gracias!

Saludos!
 
Hola:

Quizás esta te guste.

Osmo-1: Sistema Automático de Reposición
de Agua Basado en Microcontrolador.


Introducción.

Uno de los problemas habituales de los acuarios es la evaporación de agua. Las causas de esta evaporación son bien simples, pero sus consecuencias no lo son tanto. El agua evaporada, prácticamente no arrastra otros iones, con lo que, al reducirse la cantidad de agua y mantenerse la cantidad de otros elementos, la concentración de éstos últimos aumenta, variando las condiciones del acuario. Naturalmente, la forma de compensar esta evaporación y restablecer la concentración de elementos químicos es tan simple como añadir la misma cantidad de agua pura que se ha evaporado.

La forma ideal de hacerlo sería añadir con mucha frecuencia cantidades muy pequeñas de agua, para mantener lo más estable posible la concentración de iones en el agua. Sin embargo, si la reposición de agua se hace manualmente, es muy engorroso hacerlo así. Habitualmente el acuariófilo consigue agua casi pura mediante un filtro de ósmosis inversa con el que va llenando un depósito, y cada cierto tiempo trasvasa agua de este depósito al acuario, pero normalmente lo hace en cantidades relativamente grandes, cada día o cada dos o tres días, algo muy alejado de lo ideal.

Además, si el acuariófilo se ausenta por unos días, la cantidad de agua evaporada puede ser importante, llegando a subir de forma peligrosa la concentración de sales y otros iones.

La solución inmediata es automatizar el sistema de reposición de agua. El método clásico para automatizar el llenado del depósito, es utilizar unos interruptores de nivel máximo y mínimo y un sistema de relés para manejar una electroválvula que deje pasar o no agua hacia los filtros osmóticos, y de éstos al depósito. La automatización del trasvase de agua desde el depósito al acuario utiliza un método similar para activar una bomba que trasiegue agua limpia del depósito al acuario.

La solución presentada en este proyecto, en cambio, se basa en el empleo de un microcontrolador que, junto con algunos componentes electrónicos más, maneja todo el sistema. Puede parecer injustificada esta solución, pero en el apartado siguiente veremos que las ventajas son importantes, y el coste prácticamente es el mismo.

Microcontrolador en vez de control a relés.

La primera idea que surge para mantener el nivel en un depósito, sería usar un interruptor de nivel que active o desactive el dispositivo que permite el llenado del depósito, normalmente una bomba o una electroválvula. Este método tiene sin embargo dos inconvenientes claros. En primer lugar, los interruptores de nivel no suelen soportar intensidades altas, con lo que habitualmente no pueden manejar directamente bombas o electroválvulas. Bien, podemos solucionarlo haciendo que el interruptor de nivel maneje un relé, y sea éste el que maneje la bomba o la electroválvula. En segundo lugar, con este método, una diferencia pequeña en el nivel de agua del depósito hará que el interruptor se cierre o se abra, y como resultado, el relé, y por tanto el dispositivo que maneja, estará continuamente activándose y desactivándose. Y eso es lo peor que le puede pasar, tanto a un relé como a una bomba o un filtro osmótico. Los tres dispositivos reducen drásticamente su vida útil si se utilizan así, con arranques y paradas continuas.

Para evitar estos problemas, el sistema típico para controlar automáticamente el llenado de un depósito, utiliza el relé no sólo para activar otro dispositivo, sino también como elemento biestable, y dos interruptores de nivel, uno que fija el nivel máximo de agua y otro que fija el mínimo. En un estado, que llamaremos estado activo, el relé pone en marcha el dispositivo que llena el depósito (electroválvula o bomba), mientras que en el otro estado, o estado inactivo, simplemente no hace nada. La condición para que el relé bascule del estado inactivo al estado activo es que ninguno de los interruptores de nivel esté sumergido, y la condición para que bascule del estado activo al inactivo es que los dos interruptores estén sumergidos. El relé utilizado en este caso debe poder activar dos dispositivos independientes, es decir, debe ser de dos circuitos. Uno se utiliza para activar la electroválvula o la bomba, y el otro para construir el sistema biestable.

Así, si tenemos una electroválvula que corta o deja pasar agua hacia el depósito, éste se irá vaciando conforme se extraiga agua, hasta llegar al interruptor de nivel mínimo. En ese momento el relé basculará y activará la electroválvula, de forma que el depósito se irá llenando hasta que el agua llegue al interruptor de nivel máximo, momento en el que el relé basculará a su estado inactivo y desactivará la electroválvula, dejando de llenar.

Pero este sistema tiene un gran inconveniente. La corriente necesaria para activar un relé, aún no siendo alta, es importante. El interruptor de nivel, puede soportarla, pero en cada conexión, debido a los rebotes, se producen varios arcos voltaicos que van deteriorando los contactos, y, con el tiempo, puede terminar por fallar. Lo mismo ocurre con los relés. En este caso el desgaste es mayor, porque la potencia de los dispositivos a activar es mayor. Y lo que es peor, normalmente cuando falla un relé, su contacto queda abierto, y por tanto no activa el dispositivo, pero en ocasiones ocurre lo contrario: los contactos quedan soldados por calentamiento, y el dispositivo queda permanentemente activado. Este tipo de fallos, puede provocar el desbordamiento del depósito. Una solución sería utilizar relés de estado sólido (electrónicos), cuya fiabilidad es total, pero son muy caros, especialmente los de dos circuitos, así que no es una buena solución.

Un problema añadido, en nuestro caso, es que si se corta el suministro de agua y el depósito no se llena, llegará un momento en que la bomba que traspasa agua del depósito al acuario trabajará en vacío, lo que no es nada conveniente.

La solución que yo propongo es sustituir los relés y un interruptor de nivel, por un circuito electrónico comandado por un microcontrolador. Este método, eleva al máximo la fiabilidad de los interruptores de nivel, ya que por ellos circulará una corriente pequeñísima (del orden de micro amperios), elimina los relés, con sus problemas de fiabilidad, y permite establecer métodos de seguridad añadidos, haciendo casi imposible que un fallo provoque un desbordamiento o que la bomba de trasiego trabaje en vacío. Si se comparan los materiales necesarios en cada caso, se puede ver que el coste de una u otra forma es similar, ya que el coste del circuito de control es aproximadamente el mismo que el de los relés y el interruptor de nivel que nos ahorramos. Si bien es cierto que mi sistema requiere de fabricar un pequeño circuito, y por tanto lleva algo más de tiempo, creo que sus ventajas lo justifican plenamente, y en cualquier caso, es una alternativa válida.

Principio de funcionamiento.

La figura 1 muestra el esquema general de montaje y conexionado, y servirá para entender cómo funciona este sistema en su conjunto. En el esquema, las líneas azules representan conducciones de agua, las verdes cables eléctricos de baja tensión, y las rojas, cables eléctricos con tensión de red, que deben incorporar fundas con el adecuado nivel de aislamiento.

esquema.jpg


Lo primero que salta a la vista es que todas las conexiones eléctricas están centralizadas en el circuito de control Osmo-1. Él se encargará de leer el estado de los distintos interruptores de nivel y activar la electroválvula o la bomba de trasiego cuando sea necesario. Aunque no se ha incluido en el esquema, es conveniente conectar el sistema a la red de suministro de agua a través de una llave de paso manual, para facilitar labores de mantenimiento y poder aislar el sistema de la red de agua en caso necesario. Por otro lado, el depósito debe estar más bajo que el acuario, o al menos, más bajo que la salida de agua hacia el acuario, para evitar que una vez parada la bomba, siga fluyendo agua por vasos comunicantes. Además, si la bomba no la incluye, es conveniente añadir una válvula de retención a su salida, para evitar que al pararse ésta, el agua contenida en el tubo vuelva al depósito.

El sistema de llenado del depósito es bastante simple. Cuando el controlador detecta que ninguno de los dos sensores del depósito están sumergidos, activa la electroválvula. El agua entonces empieza a fluir hacia el filtro de osmosis, y de éste al depósito. De la misma forma, cuando el controlador detecta que ambos sensores están sumergidos, desconecta la electroválvula.

Pero aquí aparece una mejora respecto a un sistema “tonto”. Si en un tiempo prefijado (programable) los dos sensores no están sumergidos, el controlador interpreta que hay un problema. Puede que haya fallado la electroválvula, que los filtros de osmosis estén atorados o que no haya suministro de agua, con lo que el depósito, lógicamente no se llenaría. Pero puede ser también que haya fallado un sensor de nivel, y el depósito en realidad esté lleno, con lo que, si sigue activada la electroválvula, se desbordaría. Como precaución, cuando ocurre esto, el controlador desconecta tanto la electroválvula como la bomba, enciende el LED correspondiente al depósito en color rojo, y queda bloqueado. La única forma de desbloquear el sistema es apagar el controlador y volver a encenderlo, lo que presupone la intervención del usuario. Lógicamente, el usuario, antes de volver a dejar el sistema funcionando de forma autónoma, debe averiguar el origen del problema y subsanarlo.

Para poder aprovechar esta medida de seguridad añadida, el sensor de nivel máximo no debe estar excesivamente cerca del borde superior del depósito, sino a una distancia tal, que permita seguir llenando un rato después de que el agua rebase dicho sensor. Hay que tener en cuenta, además, que el tiempo de llenado del depósito puede variar por distintas causas, como la presión y temperatura del agua de la red, o el desgaste de los filtros de osmosis, por lo que una ubicación aproximada del sensor de máximo podría ser el punto medio entre el borde del depósito y el sensor de mínimo. Esto obliga a usar un depósito mayor (más alto) de lo necesario, pero añade un margen de seguridad importante.

La sección dedicada al llenado del acuario no funciona exactamente igual. En este caso se utiliza sólo un sensor de nivel. Cuando el controlador detecta que este sensor no está sumergido, pone en marcha la bomba de trasiego durante un tiempo prefijado (programable). Se ha hecho así por dos motivos. En primer lugar, para ahorrarnos un sensor de nivel (su precio suele rondar los 12 euros, así que sólo esto sería suficiente). En segundo lugar, este tipo de sensores no son muy precisos, y sin embargo, no nos interesa que el nivel del acuario pueda variar mucho (téngase en cuenta que, por ejemplo, en un acuario de 50cm x 150cm, una diferencia de nivel de sólo 1cm equivale a 7.5 litros de agua). Por otro lado, el caudal de agua proporcionado por la bomba es muy estable, y una vez fijado el tiempo de trasiego adecuado, este sistema será perfectamente fiable.

También aquí obtenemos ventajas respecto al control por relés. En primer lugar, el controlador nunca activará la bomba de trasiego mientras se está llenando el depósito. De esta forma, y teniendo la precaución de ubicar el sensor de nivel mínimo del depósito por encima de la admisión de agua de la bomba, se elimina la posibilidad de que la bomba trabaje en vacío. En segundo lugar, la forma en que el controlador chequea el estado del sensor de nivel del acuario (sólo considera válido el estado de un sensor si éste se mantiene invariable durante 4 segundos), impide que movimientos del agua puntuales sean tenidos en cuenta, y por otro lado, la decisión sobre la puesta en marcha o la parada de la bomba, sólo se hace cada minuto, evitando que funcione o se pare por periodos más cortos, para incrementar su vida útil. Por último, si transcurrido el tiempo fijado de trasiego el sensor de nivel no está sumergido, el controlador interpreta que hay un problema (fallo del sensor o bomba de trasiego averiada), así que activa el LED del acuario en color rojo, desactiva tanto la bomba como la electroválvula y queda bloqueado.

Una última ventaja del sistema a microcontrolador respecto al de relés es que se pueden usar interruptores de nivel normalmente abiertos o normalmente cerrados indistintamente. Si bien muchos de estos sensores de nivel son configurables para funcionar de uno u otro modo, el poder usarlos como queramos nos permitirá establecer una configuración óptima de cara a la seguridad. Fijémonos por ejemplo en el sensor de nivel máximo del depósito. Si lo podemos usar de forma que sumergido esté abierto, en caso de rotura del cable, el controlador interpretará que ya ha llegado a sumergirse, y por tanto, que el depósito está lleno, con lo que desactivará la electroválvula. El sistema malfuncionará, porque el depósito no se llenará hasta donde debe, pero limitamos aún más el riesgo de desbordamiento.

El circuito.

En la figura 2 se muestra el esquema del circuito. Como se ve, es un circuito relativamente simple, basado en un microcontrolador PIC16F84 a 4 MHz. Como oscilador puede usarse un resonador cerámico o un cristal de cuarzo. En caso de usar un resonador que incluya los condensadores de masa (se distingue porque tiene tres patillas) no es necesario montar los condensadores C1 y C2.

El puerto A del PIC se utiliza para controlar dos LEDs bicolor y los drivers de potencia que activarán tanto la bomba como la electroválvula. El puerto B estará configurado como entrada con las resistencias de pull-up activadas, de forma que RB0 a RB3 se utilizan para leer SW1 (puede montarse un dip-switch de 4 bits o bien un codificador rotativo de 16 posiciones, más cómodo), y RB4 a RB6 se utilizan para leer el estado de los tres interruptores de nivel.

sch.jpg


Empecemos por la fuente de alimentación. Se ha utilizado un transformador con salida simétrica de 12V + 12V, y un rectificador de media onda para obtener una tensión positiva referida a uno de los extremos del transformador, que es la masa del circuito. Así conseguimos que en el otro extremo del transformador haya una tensión alterna de 24V respecto a masa (necesaria para excitar la electroválvula). La tensión positiva obtenida es filtrada por C5, mientras que U3, C6 y C7 se encargan de regularla y fijarla en 5V. La inclusión de R12 incrementa el consumo del circuito en unos 30mA, aparentemente sin necesidad, pero su función es asegurar que al apagar el equipo, los condensadores de la fuente se descarguen con cierta rapidez, algo necesario durante el proceso de configuración (como veremos más adelante). Sólo queda decir que se ha previsto la placa de circuito impreso para poder utilizar indistintamente un transformador de estructura abierta de 12V + 12V de 600mA (14W) o uno encapsulado de 2 x 12V de 500mA (12W). El fusible F1 será de aproximadamente la potencia de la bomba en vatios, dividido por 130, en amperios y nunca menor que 1A. Por ejemplo, para una bomba de 200W, podríamos ponerlo de 1.5A.

Los interruptores de nivel se conectan entre las entradas RB4 a RB6 y masa. Cuando uno de estos interruptores está cerrado, la entrada correspondiente queda conectada a mas. Cuando está abierto, la entrada correspondiente queda conectada a VDD a través de una resistencia de pull-up interna incluida en el PIC16F84. Del mismo modo ocurre con las entradas RB0 a RB3, utilizadas para leer SW1. Cuando uno de los switches (o el bit correspondiente si se usó un codificador rotativo) se cierra, el microcontrolador lo leerá como un 0, y cuando se abre, como un 1. El programa contenido en el PIC se encargará de invertir estos datos, de forma que un switch cerrado (ON) equivalga a un 1 y un switch abierto equivalga a un 0. Esto es necesario para permitir el uso de un codificador rotativo (recomendado) en lugar del dip-switch.

El control de los LEDs bicolor puede despistar un poco, porque éstos no tienen ningún terminal conectado a masa ni a VDD. En realidad es bastante simple. Los LEDs utilizados son del tipo bicolor formados internamente por dos LEDs, uno rojo y otro verde, conectados en antiparalelo, es decir, que cuando la corriente circula en un sentido se enciende el rojo, y cuando circula en el otro sentido se enciende el verde. En nuestro circuito, tenemos un terminal de ambos diodos conectado a RA0, y el otro terminal a RA1 y RA2 respectivamente, a través de las resistencias limitadoras R2 y R3. De esta forma, cuando en la salida RA0 haya 0V, sólo se podrán encender los LEDs en color rojo, y cuando en la salida RA0 haya +5V, sólo se podrán encender los LEDs en color verde. Cada LED se encenderá (con el color determinado por RA0) si el estado de las salidas RA1 y RA2 respectivamente es distinto que el de RA0. Esta forma de control limita las combinaciones posibles que se pueden mostrar, ya que no se pueden encender a la vez un LED rojo y otro verde (al menos de forma estática), pero reduce las salidas necesarias a sólo tres, y permite dar las indicaciones necesarias en este circuito concreto. D101 dará indicaciones relativas al depósito y su electroválvula de llenado, mientras que D102 dará las indicaciones relativas al acuario y la bomba de trasiego.

El driver para la electroválvula se basa en un triac controlado por un transistor. La tensión de salida es de 24V alterna, lo que permite utilizar electroválvulas para riego, que son baratas y fáciles de localizar (mejor en almacenes de material agrícola que de jardinería). El triac utilizado puede ser cualquier BT139 o TIC226, sin importar su tensión máxima, y se puede montar sin disipador, ya que la potencia que va a disipar es muy pequeña. C3 y R8 tienen por objeto proteger en lo posible al triac de corrientes reactivas, provocadas por la inductancia de la electroválvula.

El driver para la bomba también utiliza un triac, en este caso controlado por un optotriac, para aislarlo del resto del circuito, ya que la tensión que manejará es de 220V. Se puede utilizar un BT139-500 (o superior) o un TIC226-M (o superior), y está pensado para manejar bombas de potencia menor que 300W, por lo que se puede montar sin disipador. Para bombas mayores, hasta 1500W, se necesitaría un disipador adecuado, aunque esto obligaría a rediseñar el circuito impreso, para darle cabida. Igual que en el otro driver, se ha añadido una red de protección contra reactiva formada por C4 y R11. Es importante que C4 sea de 630V o, como mínimo, de 400V.

Hardware.

El diseño final de la placa de circuito impreso aparece en la figura 3. Como se puede ver, todos los componentes del circuito, incluidos el transformador y el porta-fusibles, van montados en la placa, salvo los LEDs, que se montarán en una pequeña plaquita o simplemente soldados entre sí, y se conectarán al circuito mediante un cable de tres hilos que irá a parar al conector CON1. Las dimensiones de la placa se han fijado para que se pueda montar en una caja estanca para conexiones marca IDE de la serie Light, modelo EV-161, pero con pequeños cambios será fácil adaptarla a cualquier caja estanca de 160cm x 120cm o mayor.

En mi página, en la sección “Ficheros” está disponible el archivo OSMO1.ZIP que contiene información detallada para la construcción del controlador, incluidos el fotolito, la serigrafía, el firmware para el PIC16F84 en formato HEX y ASM, etc.

compuesto.jpg


Un detalle importante a tener en cuenta es que en la placa hay elementos a tensión de red, por lo que la manipulación debe hacerse con el equipo desconectado. En caso de manipularlo encendido, deben tomarse las máximas precauciones, asegurándose de no hacer contacto eléctrico con los elementos peligrosos (terminales para conexión a la red y la bomba, fusible, U2, R10, R11, C4 y Q3). Si se utiliza un destornillador para manipular SW1 con el equipo encendido, debe ser de plástico, o al menos con la pala aislada, para evitar accidentes. En cualquier caso, si no es estrictamente necesario mantenerlo encendido, es mejor desconectar el equipo de la red.

Para el microcontrolador debe montarse un zócalo, en el que se insertará el micro grabado, sólo después de soldar el resto de elementos. U2 en cambio debe ir soldado sin zócalo. Para SW1 sólo se montará una de las dos opciones, es decir, o bien un codificador rotativo de 4 bits (16 posiciones) o un dip-switch de 4 bits. Igualmente, X1 puede ser indistintamente un cristal de cuarzo o un resonador cerámico de 4 MHz. En caso de usar un resonador con los condensadores de masa incluidos, no es necesario montar C1 y C2.

La figura 4 muestra el circuito que alberga los LEDs. Como se ve, por su simplicidad, se puede montar en un trocito de placa pretaladrada. El cable de tres hilos debe tener una longitud mínima de unos 10cm y terminar en un conector hembra Molex de tipo KK. Esta placa irá fijada a la tapa de la caja de forma que los LEDs sean visibles a través de unos orificios practicados en ella. Para fijarla, yo usé silicona térmica, en cantidad suficiente para sellar el conjunto, de forma que se mantenga la estanqueidad de la caja.

lcompuesto.jpg


En la figura 5 se muestra la placa terminada. La posición de algunos componentes no coincide exactamente con el esquema de la figura 3, debido a que la placa de la foto era un prototipo sobre el que se hicieron pequeños cambios para el diseño final. Como puede verse, yo utilicé clemas o fichas de tipo enchufable, lo que facilita el conexionado. La serigrafía se hizo planchando sobre la placa una hoja impresa con láser del fichero SERI.TIF (incluido en el archivo OSMO1.ZIP). Los resultados no son absolutamente perfectos, pero son válidos, y el método es muy rápido y simple.

placa.jpg


El siguiente paso es fijar la placa en la caja. Para ello usé unos tornillos M3 aprovechando los tocones para fijación de elementos de la caja (figura 6). Como se ve, las cuatro esquinas de la placa han sido recortadas para dejar accesibles los puntos de fijación de la caja a la pared.

caja.jpg


En la figura 7 se puede apreciar la plaquita de los LEDs fijada a la tapa del OSMO-1. La imagen en detalle muestra cómo se ha aplicado silicona térmica suficiente, no sólo para asegurar la correcta fijación, sino para sellar la unión con la tapa, para mantener la estanqueidad de la caja.

tapa.jpg


Para terminar con el controlador, sólo queda fijar la caja en su sitio y conectar el cable de los LEDs en CON1 (figura 8). La conexión de los distintos elementos se hará siguiendo el esquema de la figura 1. A modo orientativo, se ha incluido en la figura 9 una foto de la electroválvula con los adaptadores necesarios para acoplarla por un lado a la red de agua y por el otro al micro tubo que va hasta el filtro de osmosis. Téngase en cuenta que las electroválvulas tienen una boca de entrada y otra de salida, normalmente indicadas mediante una flecha que marca el sentido en el que debe circular el agua, y no se pueden invertir.

con1.jpg


valv_aco.jpg


El tipo de interruptores de nivel utilizados (figura 10) es distinto para el acuario y el depósito. En ambos casos funcionan mediante un flotador que oculta en su interior un imán. Según la posición del flotador, el imán se acerca o se aleja de un interruptor magnético (o relé reed) que va embutido en la parte fija del dispositivo, haciendo que cierre o abra su contacto.

Para el depósito, normalmente un cubo grande o una garrafa de plástico (con la boca suficientemente ancha para poder introducir la bomba de trasiego), es conveniente utilizar interruptores horizontales (figura 10, izquierda). Este tipo de sensores funcionarán como sumergido = abierto o sumergido = cerrado, según la postura en que se monten. En nuestro caso, es recomendable instalar todos los sensores de forma que sumergidos estén abiertos, como se explicó antes. Cada sensor se instala en un agujero de diámetro apropiado en el lateral del depósito, con la junta de goma hacia dentro del depósito y la tuerca bien apretada, para mantener la estanqueidad. Si las paredes del depósito son poco rígidas o demasiado curvadas, es conveniente pegar por el interior un refuerzo de placa de PVC, o bien montar varias arandelas de goma en lugar de una, para conseguir una mejor adaptación. El sensor de nivel mínimo debe montarse lo más cerca posible del fondo, pero a suficiente altura para que en el momento de la conmutación, la boca de admisión de la bomba esté completamente sumergida. El sensor de nivel máximo puede montarse aproximadamente a mitad de camino entre el sensor de nivel mínimo y el borde superior del depósito. En cualquier caso, la cantidad de agua contenida entre uno y otro sensor, debería ser mayor que la cantidad de agua que se trasegará al acuario en cada ocasión.

Para el acuario, por la dificultad que supone taladrar sus paredes, se utilizará un interruptor de nivel de montaje vertical (figura 10, derecha), fijado a una escuadra de material plástico (una placa en forma de L), sujeta contra una pared del acuario mediante una pinza o un pequeño gato, de forma que sea posible modificar su posición. La altura a la que se fijará la L debe ser tal que la conmutación del interruptor de nivel se produzca en el nivel mínimo de agua que admitamos para el acuario.

interr_nivel.jpg


Firmware.

Antes de insertar el PIC16F84 en su zócalo, es necesario grabar el firmware en él. Para conocer lo que es el firmware y cómo grabarlo en el PIC, remito a los interesados al proyecto TELEF1, que se encuentra en la sección “Montajes” de mi página. En cuanto a qué programador usar, cualquiera que admita el 16F84 sirve, aunque yo recomiendo el Pipo2 o el PP2, ambos disponibles en la misma sección “Montajes” de mi página, bajo el epígrafe “Una de Programadores”. El firmware para este circuito se encuentra entre los ficheros incluidos en el archivo OSMO1.ZIP, tanto el fichero en formato HEX (OSMO1.HEX) como el código fuente comentado (OSMO1.ASM).

Sería excesivamente largo explicar cómo funciona el programa en su totalidad. Por el contrario, explicaré cómo actúa el programa, y cómo utilizarlo. Digamos que el programa permite que el OSMO-1 haga todo lo que se ha explicado en las secciones anteriores cuando está funcionando en modo normal, más una serie de utilidades que permiten ajustar su configuración a las necesidades de cada instalación, así como chequear los sensores de nivel o activar la bomba y la electroválvula manualmente.

Como veremos a continuación, la forma de modificar la configuración del OSMO-1 y de definir su funcionamiento, está muy relacionada con el valor configurado en SW1. La tabla 1 muestra la equivalencia entre la posición de SW1 (sea un codificador rotativo o un dip-switch) y el valor decimal que representa. En las explicaciones sucesivas, me referiré siempre al valor decimal. Cada cual que interprete ese valor con arreglo al tipo de componente usado para SW1.

VER TABLA 1

Empecemos por el modo de funcionamiento normal. Habitualmente, si se enciende con SW1 distinto de 0, el OSMO-1 entra en el modo normal de funcionamiento. En este modo, el valor fijado en SW1 decide el tiempo que estará funcionando la bomba de trasiego cuando haya que pasar agua del depósito al acuario (más adelante veremos cómo calcular exactamente este tiempo). En modo normal, si todo va bien, los dos LEDs permanecerán siempre en color verde, ya sea fijo o intermitente. Un LED verde intermitente indicará que el dispositivo correspondiente está activado, es decir, cuando la electroválvula esté activada, llenando el depósito, el LED D101, o LED del depósito, permanecerá verde intermitente, y cuando la bomba esté activada, trasegando agua del depósito al acuario, el LED D102, o LED del acuario, será el que permanezca verde intermitente.

En cambio, si el OSMO-1 detecta algún problema, desconectará la electroválvula y la bomba, y encenderá un LED en color rojo. Según qué LED esté encendido, el origen del problema estará en el depósito o en el acuario. De esta forma, de un simple vistazo, sabremos si hay algún problema, y su localización aproximada. Cuando esto ocurra, el OSMO-1 quedará bloqueado, es decir, no volverá a su funcionamiento normal, aunque desaparezca la causa que originó la alarma, hasta que el usuario lo resetee apagándolo y encendiéndolo de nuevo.

El segundo modo de funcionamiento es el que llamaremos manual. Su utilidad es verificar el funcionamiento de los sensores de nivel, la bomba y la electroválvula. Para entrar en este modo, el procedimiento es el siguiente:

1º. Apagar el OSMO-1 durante al menos 10 segundos, poner el valor 0 en SW1, y encender de nuevo. Cuando os LEDs se enciendan en color verde, apagar de nuevo el equipo.

2º. Esperar al menos 10 segundos, poner en SW1 cualquier valor de 0 a 5 y encender de nuevo.

A partir de aquí estamos en modo manual. En este modo, la posición de SW1 determinará el dispositivo que queremos probar según la tabla 2. El valor de SW1 se puede cambiar sin apagar el equipo, para probar los distintos dispositivos. Si se apaga el equipo, habrá que dar de nuevo los pasos 1º y 2º explicados antes, para volver a entrar a modo manual. Para volver a modo normal, hay que apagar el equipo durante al menos 10 segundos, poner SW1 en una posición distinta de 0, y volver a encender.

VER TABLA 2

Una utilidad clara de este modo de funcionamiento, es ajustar la altura del sensor de nivel del acuario. Una vez en modo manual, y teniendo el acuario con el nivel de agua que consideremos como mínimo admisible, colocaremos el sensor de forma que esté sumergido. El LED del acuario nos dará una indicación, correspondiente al estado del sensor cuando está sumergido. Ahora vamos subiendo el sensor poco a poco, hasta que el LED cambie, indicando que el sensor ha conmutado. En ese punto es donde deberemos fijar el sensor.

El tercer modo, que llamaremos de configuración, permite modificar la configuración del equipo, mediante la introducción de tres parámetros. Antes de hablar sobre cómo introducir esos tres parámetros, pasaré a explicar su significado.

TIEMPO1 es un valor de 1 a 16 que expresa un número de minutos. En modo normal, el tiempo que permanecerá andando la bomba en cada ocasión que haya que rellenar el acuario, será el resultado de multiplicar TIEMPO1 por el valor que tuviera SW1 al encender el OSMO-1. Por ejemplo, si hemos introducido en TIEMPO1 el valor 10, y encendemos el equipo en modo normal con SW1 marcando 3, cuando se active la bomba de trasiego, lo hará durante 30 minutos. Así, podremos fijar tiempos de trasiego entre 1 minuto (con TIEMPO1 = 1 y SW1 = 1), y 4 horas (con TIEMPO1 = 16 y SW1 = 15).

Para calcular el valor adecuado de TIEMPO1 para nuestro acuario, lo primero que necesitamos saber es el tiempo que tarda la bomba en trasegar del depósito al acuario la cantidad de agua que queremos. A continuación calculamos a qué diferencia de nivel en el acuario corresponde esa cantidad de agua (debido a la poca precisión de los interruptores de nivel, no es conveniente calcular desniveles menores que 5mm). Marcamos el nivel actual y el nivel al que debería llegar el agua después de trasegar la cantidad fijada (se puede marcar con un rotulador, o con dos trocitos de cinta aislante, por ejemplo). Ahora entramos en modo manual, y activamos la bomba, cronometrando el tiempo que tarda el nivel en subir de una a otra marca. Por fin, dividimos el tiempo cronometrado (en minutos) por 7. El valor adecuado para TIEMPO1 será el entero entre 1 y 16 más aproximado al resultado obtenido. Ahora dividimos el tiempo cronometrado (en minutos) entre el valor obtenido para TIEMPO1, y buscamos el entero entre 1 y 15 más aproximado al resultado obtenido. Ese es el valor que debemos poner en SW1 antes de encender en modo normal. Habitualmente el resultado obtenido para SW1 será 7, lo que nos dará un margen grande de ajuste si en el futuro cambian las condiciones (por desgaste de la bomba, pérdidas por rozamiento en los tubos, etc.).

Veámoslo con un ejemplo. Supongamos que nuestro acuario mide 150cm x 50cm de superficie, y queremos que en cada trasiego pasen del depósito al acuario 5 litros de agua, es decir, 5000cm cúbicos. El desnivel correspondiente será 5000 / (150 x 50) = 0.67cm, unos 7mm. Con un rotulador ponemos una marca en el nivel actual, y otra, 7mm más arriba. Entramos en modo manual, activamos la bomba, y cronometramos el tiempo que tarda el nivel en llegar a la marca superior. Supongamos que el tiempo medido es 40 minutos. Dividido por 7, resulta 5.71, y por tanto, el valor entero más aproximado es 6, que será el valor que demos al parámetro de configuración TIEMPO1. Para calcular qué valor deberemos poner en SW1 antes de encender en modo normal, dividimos el tiempo cronometrado entre TIEMPO1, es decir, 40 entre 6, que da como resultado 6.67, y por tanto, el valor entero más aproximado es 7, que es la posición en la que debemos poner SW1 antes de encender el OSMO-1 en modo normal. El tiempo real de trasiego será 42 minutos (6 x 7), que es suficientemente aproximado al cronometrado.

El segundo parámetro de configuración es TIEMPO2, y fija el tiempo que el OSMO-1 considerará como excesivo en el llenado del depósito. Si pasado este tiempo con la electroválvula activada, alguno de los sensores de nivel del depósito sigue marcando que no está sumergido, el controlador desactivará la electroválvula, encenderá el LED del depósito en color rojo, y se bloqueará. TIEMPO2 puede tener valores entre 1 y 16, correspondiendo a cada unidad media hora, con lo que se podrán configurar tiempos entre media hora (TIEMPO2 = 1) y 8 horas (TIEMPO2 = 16).

El cálculo de un valor correcto para TIEMPO2 es bastante simple, y por otro lado, su precisión no es muy importante. Teniendo el nivel de agua en el depósito a la altura del sensor de nivel mínimo, entraremos en modo manual, activaremos la electroválvula, y pondremos en marcha el cronómetro. Cuando el agua llegue al sensor de nivel máximo, anotaremos el tiempo y dejaremos que se siga llenando. Cuando el agua esté a punto de rebosar, apagaremos el OSMO-1 y anotaremos de nuevo el tiempo. La media entre los dos tiempos anotados puede ser un valor correcto. Sólo hay que tomar esa media, en minutos, y dividirla por 30. El entero entre 1 y 16 más próximo al resultado será el valor adecuado para TIEMPO2.

Por ejemplo, si en nuestro depósito el tiempo de llenado, desde el sensor de nivel mínimo hasta el de nivel máximo es 170 minutos, y hasta rebosar tarda otros 150 minutos, nuestros tiempos serán 170 minutos y 320 minutos (170 + 150). La media será 245 minutos, que dividido entre 30 resulta 8.17 y, por tanto, el valor entero más próximo es 8, que es el valor que daremos a TIEMPO2.

El último parámetro de la configuración, al que yo llamaré TIPOSEN, permite definir el tipo de sensores de nivel utilizados, es decir, sumergido = interruptor abierto, o sumergido = interruptor cerrado. Yo recomiendo el primer tipo, por las razones antes explicadas, pero en algunos casos puede que no sea posible utilizarlos así. En cualquier caso, el valor de TIPOSEN en función del tipo de sensores debe fijarse según la tabla 3.

VER TABLA 3

La forma de introducir los tres parámetros de configuración en el OSMO-1 es un poco tediosa y requiere de bastante meticulosidad a la hora de dar los pasos necesarios, pero permite hacerlo sin necesidad de añadir teclas o jumpers adicionales, y sin tener que extraer el microcontrolador de su zócalo. Debido a la importancia de no saltarse ningún paso ni confundir ninguna cifra, recomiendo tener perfectamente claros y anotados los valores correctos para TIEMPO1, TIEMPO2 y TIPOSEN, antes de comenzar con el proceso de configuración.

Los pasos para introducir los parámetros de configuración en el OSMO-1 son los siguientes:

1º. Apagar el OSMO-1, esperar al menos 10 segundos, situar SW1 en posición 0, y encender. Cuando los LEDs estén activados en color verde, apagar de nuevo.

2º. Esperar al menos 10 segundos, situar SW1 en posición 15, y encender. Apagar cuando los LEDs estén activados en color verde.

3º. Esperar al menos 10 segundos, poner en SW1 el valor de TIEMPO1 (si el valor es 16, poner SW1 en la posición 0), encender el OSMO-1, y apagar mientras los LEDs estén activados en color verde. Los LEDs permanecerán en color verde unos 15 segundos, y luego pasarán a color rojo. Si se apaga una vez que los LEDs han cambiado a rojo, el parámetro TIEMPO1 quedará sin modificar, con el valor que tenía antes de entrar al modo de configuración.

4º. Esperar al menos 10 segundos, poner en SW1 el valor de TIEMPO2 (si el valor es 16, poner SW1 en la posición 0), encender el equipo, y apagar mientras los LEDs estén activados en color verde. Igual que antes, para dejar TIEMPO2 sin modificar, habrá que esperar hasta que los LEDs cambien a rojo antes de apagar el OSMO-1.

5º. Esperar al menos 10 segundos, poner en SW1 el valor de TIPOSEN, encender el OSMO-1, y apagar mientras los LEDs estén activados en color verde. Igual que antes, para dejar TIPOSEN sin modificar, habrá que esperar hasta que los LEDs cambien a rojo antes de apagar el equipo.

Por último, sólo queda volver a modo normal. Para ello, habrá que esperar al menos 10 segundos, situar SW1 en la posición calculada para el tiempo de trasiego correcto (distinta de 0), y encender de nuevo.

Fuente:
http://213.97.130.124/osmo1/Osmo1.htm

Un cordial saludo.
 
buenas tardes recien me estoy adentrando al mundo de la programacion del pic y necesito ayuda paraa realizar un programa de pic16f84a en el cual con un sensor de nivel yo active una bomba cuando el sensor detecte que esta nivel bajo y cuando el sensor este en nivel alto q apague esta primera bomba y encienda la segunda, de preferencia si me pudiera ayudar que el programa este hecho en mplab de antemano gracias
 
Atrás
Arriba