Professional Documents
Culture Documents
Con este montaje pretendemos automatizar todos los elementos instalados en el acuario a modo de acuario domótico. Conseguiremos ahorrarnos algo
de trabajo en el mantenimiento del tanque y además tendremos un "vecino virtual" que nos lo cuide en vacaciones.
El conjunto consta principalmente de una serie de módulos que monitorizan los diferentes parámetros del acuario (temperatura, Ph, etc...) y de
un módulo de control que es el encargado de tomar las decisiones oportunas para el mantenimiento de las condiciones óptimas. Además tenemos
un módulo de configuración e información que, como su nombre indica, permite tanto variar las condiciones del tanque como obtener información
actualizada de éste.
En la figura anterior podemos ver como se interconectan los diferentes módulos con el controlador principal y la conexión desde el exterior con un
navegador WEB o con una conexión serie RS232. Aunque en un primer momento se consideró diseñar los diferentes módulos de forma separada
(con su propio microcontrolador), la capacidad del PIC16F874A nos da la posibilidad de controlarlo todo con un solo microcontrolador. Los
módulos desarrollados son los siguientes:
Módulo de control: Es el módulo principal del sistema, recoge la información suministrada por los sensores y medidores y actúa en
consecuencia. También se encarga de realizar las tareas periódicas del acuario como encender y apagar las luces y dar de comer a los peces.
Módulo de configuración e información WEB (acuaweb) y RS232: Se trata de un módulo puramente software que permite la visualización
de datos a través de una interfaz web o a través de un puerto serie. Además podemos configurar los parámetros del acuario (temperatura,
iluminacion, comidas, etc...) y realizar actuaciones puntuales con alguno de ellos.
Módulo de temperatura: Consiste en una serie de sensores de temperatura encapsulados para poder sumergirlos y de unos actuadores para
controlar los diferentes calefactores.
Módulo medidor de Ph: Mide el Ph del agua con un sensor estandar y convierte la señal para que el módulo de control la pueda procesar.
También tiene actuadores para activar los controladores de Ph.
Módulo medidor de nivel: Informa al módulo de control del nivel de agua existente en el acuario.
Módulo actuador de luces: Se encarga de alimentar los tubos de iluminación.
Módulo actuador de alimentación: Será el que introduzca comida en el agua cuando el módulo de control lo considere necesario.
Módulo generador de oleaje: Este módulo se encargará de activar las bombas generadoras de olas en el orden correcto.
Módulo de control
El módulo de control es el encargado de obtener datos de todos los sensores del sistema y de manejar los actuadores que
mantienen el acuario en su estado óptimo.
Para comunicarnos con el PIC16F874A utilizaremos el puerto serie USART integrado en él. Como los niveles del
microcontrolador son TTL (0 y 5V para el "0" y el "1" respectivamente) utilizaremos un adaptador de señal para convertirlos a
niveles RS232 (12 para el "0" y -12V para el "1"). El adaptador elegido es el MAX233A de dallas/maxim. Este integrado es
capaz de manejar dos canales de comunicación y no necesita ningún componente externo.
El DS18S20 es un termómetro digital de 9 bits que se conecta a través de un bus 1-wire. Tiene una precisión de ±0.5°C
en el rango de -10°C a +85°C y cada uno de ellos dispone de un identificador único de 64 bits, lo que permite que
puedan coexistir varios sensores en un único bus 1-wire. El bus 1-wire puede ser de hasta 100 metros de largo por lo
que la colocación de los sensores respecto del módulo no debería ser un problema.
El DS18S20 es un integrado con forma de transistor, tiene tres pines de los cuales dos sirven de alimentación
(GND y Vdd) y el otro (DQ) es el que se conecta al bus. Este sensor puede funcionar también sin alimentación, con lo
que se conoce como alimentación parásita. En este modo de funcionamiento la alimentación la saca directamente de la
linea DQ por lo que solo se necesitan dos cables (DQ y GND).
Para proteger el sensor del agua lo montaremos dentro de una ampolla de vidrio o plástico rellena de silicona. Es importate que no entre humedad en
el sensor para que no haya posibilidad de cortocircuito o de que se oxiden los pines.
El bus 1-wire es capaz de manejar varios dispositivos conectados a él por lo que con un bus es suficiente, este bus lo manejaremos por el pin RA4.
Por el conector 1-wire concectaremos los sensores de temperatura DS18S20 y podemos colocar tantos como queramos repartidos por el acuario, en
nuestro caso pondremos uno en el recipiente del sifón y otro en el filtro biológico.
Para controlar la temperatura utilizaremos dos calefactores típicos de acuario conectados a T1 que se activarán cuando la temperatura del acuario baje
del nivel preestablecido. Estos calefactores disponen de un termostato que los enciende y apaga cuando es necesario, pero como el control de
temperatura lo realizaremos nosotros, configuraremos los calefactores a una temperatura un poco mayor de la que necesitemos para que en caso de
mal funcionamiento del controlador no suba la temperatura excesivamente. El hecho de usar dos calefactores nos asegura que la temperatura del
tanque sea la óptima aún en el caso de que uno de ellos deje de funcionar.
Habitualmente nunca necesitamos enfriar el agua ya que la temperatura ambiente suele ser menor que la necesaria para el acuario, si necesitaramos
manejar un enfriador lo conectaríamos a la borna marcada como T2 que se acciona cuando la temperatura supera el nivel configurado. Debemos tener
en cuenta que cuantos mas calefactores/enfriadores conectemos al relé más potencia necesita soportar por lo que tendremos que instalar uno
adecuado a nuestras necesidades o conectar varios en paralelo.
Módulo controlador de pH
Este módulo se encargará de obtener el pH del agua y de manejar los actuadores de control. El montaje está basado (mas
bien copiado) en el medidor de pH para acuarios de José Manuel García, en su página podrás encontrar una explicación
detallada del circuito y otras muchas cosas interesantes.
A grandes rasgos diremos que la salida del circuito nos da una tension de 0 a 999mV que corresponden a un pH de entre 0 y
9.99. Esta salida la conectaremos directamente a uno de los conversores A/D del PIC16F874A. En un principio únicamente
usaremos un sensor y en caso de necesitar otro más tendremos que duplicar el circuito anterior.
Usaremos una sonda de pH estándar que suministra una tensión inversamente proporcional al pH del agua. Esta sonda proporciona 0V con pH neutro
(ph 7) y varía aproximadamente 60mV por grado de pH. En la siguiente imagen tenemos una gráfica con el comportamiento de una sonda de este
tipo.
Los sensores de pH se conectan al PIC16F874A por las entradas análogicas de los pines RA1, RA2 y RA3. Colocaremos uno en el recipiente del sifón
y ahorraremos espacio en el acuario. Con uno es suficiente porque el pH cambia muy lentamente y la circulación de agua es lo suficientemente rápida
para que sea uniforme en todo el sistema. Además son bastante caros (alrededor de 60 euros).
Al igual que en el caso de la temperatura, tenemos dos conectores para el control del pH: PH1 y PH2. PH1 se activa cuando el nivel de pH del
acuario baja del nivel configurado y PH2 cuando se eleva por encima del nivel máximo.
Necesitaremos controlar el nivel de agua en varios puntos del sistema: en el acuario, en el filtro, en el depósito de agua osmotizada y en el depósito
de cambio de agua. En el caso del acuario es necesario saber si el agua baja de determinado nivel para añadirle más, en el filtro biológico es
necesario para asegurarnos de que la bomba no trabaja en vacío. Los otros dos sensores se encargan de controlar que no se acabe el agua del depósito
de llenado y de que no se llene el depósito de desagüe.
Disponemos de dos actuadores para controlar el nivel de agua, uno para introducir agua en el acuario y otro para sacarla. Con esto podemos mantener
constante el nivel de agua del acuario simplemente añadiendo un poco cuando baje el nivel. Además podremos hacer los cambios periódicos de agua
automáticamente siempre que dispongamos de un desagüe y de un depósito de agua osmotizada.
Módulo de alimentación
Para automatizar la alimentación de los peces hemos previsto varios actuadores con el fin de poder accionar diferentes alimentadores automáticos.
Este módulo consiste en uno o varios depósitos de comida colocados encima del acuario con un dispensador que proporciona la dosis adecuada. Los
conectores C1 y C2accionan los dispensadores.
Módulo de oleaje
Este módulo es el encargado de simular oleaje en el acuario. El oleaje se consigue activando unas bombas distribuidas por el acuario de forma
ordenada.
Montaremos cinco placas diferentes: dos de alimentación (una para el controlador y otra para la sonda de pH), otra con el circuito acondicionador de
señal para la sonda de pH, la placa con el PIC16F874A y por último la placa de relés. La placa con el LCD y las seis teclas es opcional si tenemos
conectado un ordenador al controlador.
Lo primero que haremos será el circuito que proporcionará la alimentación necesaria para el resto de placas.
Suministra +5V por el conector cuatro para alimentar elPIC16F874A, los dos ULN2801A, el MAX233A, los
relés y el LCD. Además podremos conectar por el conector correspondiente una batería recargable (1.5V x 4 =
6V) que nos proporcionará la tensión de alimentación en caso de fallo de suministro eléctrico. Esta placa la
tendremos que alimentar con 18V AC. A continuación tenemos el listado de componentes de esta placa:
Fuente de alimentación
Componente Descripción Valor
U1 Puente rectificador
U2 Estabilizador de tensión +12V LM7812
R1 Resistencia limitadora para la batería recargable 33Ω
R2 Resistencia de carga para el led indicador de alimentación 560Ω
C1 Condensador estabilizador del regulador 0.33µF
C2 Condensador estabilizador del regulador 0.1µF
D1 Diodo rectificador 1N4007
D2 Diodo led indicador de alimentación Rojo de 5mm
D3 Diodo zener 5.1V 1W
Para alimentar el acondicionador de señal de la sonda de pH necesitamos tres voltajes: dos de +5V y uno de -5V Es
importante que la alimentación del circuito acondicionador esté separada de la de alimentación de componentes
para evitar interferencias. José Manuel García explica todo esto en su página del medidor de pH para acuarios. El
potenciómetro P1 nos servirá para ajustar la tensión de salida a +5V exactos (la placa es exactamente igual a la de
José Manuel y podríamos eliminar la placa de alimentación anterior ya que ésta también proporciona los +5V
necesarios para elimentar los elementos). Los componentes necesarios los tenemos en la tabla siguiente:
Con el LM336 podremos ajustar la tensión de referencia del conversor A/D. Deberemos ajustar el potenciómetro P3 para que la tensión entre el
pin RA3 y masa (sin tener conectado el PIC16F874A) sea de 2.56V. Con esto y el conversor A/D configurado en 8 bits nos dará un cambio cada
10mV.
Para poder accionar los actuadores usaremos dos integrados ULN2801A. Constan de ocho drivers de 0.5A cada uno y los usaremos para suministrar
la corriente necesaria a los relés ya que el PIC16F874A no es capaz de suministrar tanta corriente por los pines de salida. En cada uno de los drivers
conectaremos un relé que será el que realmente active y desactive los actuadores. Los relés los tendremos en una placa diferente ya que necesitamos
tener 220V en el circuito para activar los elementos de control.
En las siguiente tabla tenemos los componentes necesarios para la construcción tanto de la placa de control como de la placa del terminal:
Módulo de control
Componente Descripción Valor
U1 Microcontrolador PIC16F874A
U2 Acondicionador de señal MAX233A
U3 Generador de tensión de referencia ajustable LM336
U4,U5 Drivers para los actuadores ULN2801A
R1 Resistencia de carga para el reset hardware. 10kΩ
R2 Resistencia de carga para el regulador. 2K5
R3 Resistencia de pull-up para el bus 1-Wire. 4K7
R4-R21 Resistencias de carga para los leds indicadores de actividad 560Ω
C1,C2 Condensadores estabilizadores del reloj 15-33pF
D1,D2 Diodos de señal 1N4148
D3-D6 Diodos led indicadores de actuación en iluminación Rojos de 3mm
D7,D8 Diodos led indicadores de actuación en temperatura Rojos de 3mm
D9,D10 Diodos led indicadores de actuación en pH Rojos de 3mm
D11,D12 Diodos led indicadores de actuación en Nivel Rojos de 3mm
D13-D16 Diodos led indicadores de actividad de las bombas de oleaje. Rojos de 3mm
D17,D18 Diodos led indicadores de actuación en alimentación Rojos de 3mm
D19,D20 Diodos led indicadores de comunicación serie (Tx,Rx) Rojos de 3mm
D21-D26 Diodos de señal 1N4007
XT1 Cristal 4Mhz
P1 Potenciómetro multivuelta para ajustar la tension de referencia 10KΩ
P2 Control de contraste del LCD 10KΩ
P3 Control de iluminación del LCD 10Ω
LCD LCD de 2x16 HD44780U
SW1 Pulsador de reset hardware
SW2-SW7 Teclado del terminal
El circuito acondicionador de señal lo tendremos montado en una placa diferente para poder aislarlo de
cualquier interferencia tal y como explica José Manuel García en su página. Los componentes necesarios
para esta placa los tenemos a continuación:
Para controlar la iluminación del acuario disponemos de cuatro controles para luces,
éstos los configuraremos con el menú iluminacion. Una vez tengamos seleccionado el
submenú de control de luces podremos variar las horas de encendido y apagado de las
cuatro luces moviéndonos arriba y abajo para seleccionar L1, L2, L3 o L4. Una vez
seleccionada la luz que queremos configurar pulsaremos la tecla DERECHA hasta
posicionarnos en el valor a modificar. Con las teclas ARRIBA y ABAJO modificaremos
este valor y saldremos pulsando IZQUIERDA hasta salir a la seleccion de luz.
La primera hora del menú es la hora de encendido y la segunda la de apagado. En la pantalla de la derecha tenemos que la luz número uno se
enciende a las 8:30 y se apaga a las 22:00, la luz dos se enciende a las 8:40 (un poco más tarde que la primera) y se apaga a las 21:50 (un poco antes
que la anterior) y la luz tres se enciende por la noche de 21:00 a 9:00 simulando la luna. La luz cuatro aparece debajo de la luz tres en el menú y para
que no haga nada debe estar configurada como hora de encendido las 00:00 y hora de apagado las 00:00.
Una vez lo tengamos todo configurado tendremos que volver a la pantalla inicial en la que tenemos la hora, la
temperatura y el pH. Como hemos visto anteriormente, las dos lineas de abajo están libres y las usaremos para mostrar
información de todas las acciones que va tomando el controlador. A la izquierda vemos que el controlador encendió la
luz dos a las 08:40 (la linea de activacion del oleaje a las 08:00 y de la luz uno a las 08:30 desaparecen) y que activó el
cebador uno a las 09:00. Conforme pase el tiempo el controlador irá poniendo en la linea de abajo la última acción que
se ha realizado.
Todas las ordenes comienzan con STX (0x02) y acaban con ETX (0x03). Las órdenes aceptadas son las de la tabla siguiente:
Comando Respuesta Descripción
Reboot STX 0x00 ETX STX 0x00 Reinicia el módulo.
ETX
Status STX 0x01 ETX STX estado Indica el estado del controlador (ver tabla de estados).
ETX
SetTime STX 0x02 STX estado Programa el módulo con la hora indicada.
HHMMSS ETX ETX
GetTime STX 0x03 ETX STX Pregunta al módulo la hora actual.
HHMMSS
ETX
GetTemperatureAll STX 0x10 ETX STX S1 S2 Pregunta al módulo las lecturas de temperatura de todos los
S3 ... ETX sensores que tiene conectados.
GetTemperature STX 0x11 n STX Sn ETX Pregunta al módulo la lectura de temperatura del sensor n.
ETX
ResetTemperatureAll STX 0x12 ETX STX OK Inicializa todos los sensores de temperatura.
ETX
ResetTemperature STX 0x13 n STX OK Inicializa el sensor n.
ETX ETX
SetTemperatureAllPeriod STX 0x14 STX estado Programa el módulo para tomar las temperaturas de todos
periodo ETX ETX lo sensores con el periodo especificado.
SetTemperaturePeriod STX 0x15 n STX estado Programa el módulo para tomar las temperaturas del
periodo ETX ETX sensor ncon el periodo especificado.
SetMaxTemperature STX 0x16 max STX estado Programa el límite superior de temperatura para el acuario
ETX ETX (en °C).
SetMinTemperature STX 0x17 min STX estado Programa el límite inferior de temperatura para el acuario
ETX ETX (en °C).
GetPhAll STX 0x20 ETX STX S1 S2 Pregunta al módulo las lecturas de pH de todos los sensores
S3 ... ETX que tiene conectados.
GetPh STX 0x21 n STX Sn ETX Pregunta al módulo la lectura de pH del sensor n.
ETX
ResetPhAll STX 0x22 ETX STX OK Inicializa todos los sensores de pH.
ETX
ResetPh STX 0x23 n STX OK Inicializa el sensor n.
ETX ETX
SetPhAllPeriod STX 0x24 STX estado Programa el módulo para tomar el pH de todos lo sensores
periodo ETX ETX con el periodo especificado.
SetPhPeriod STX 0x25 n STX estado Programa el módulo para tomar el pH del sensor ncon el
periodo ETX ETX periodo especificado.
SetMaxPh STX 0x26 max STX estado Programa el límite superior de pH para el acuario.
ETX ETX
SetMinPh STX 0x27 min STX estado Programa el límite inferior de pH para el acuario.
ETX ETX
GetWaterLevelAll STX 0x30 ETX STX S1 S2 Pregunta al módulo las lecturas de nivel de agua de todos
S3 ... ETX los sensores que tiene conectados.
GetWaterLevel STX 0x31 n STX Sn ETX Pregunta al módulo la lectura de nivel de agua del sensor n.
ETX
ResetWaterLevelAll STX 0x32 ETX STX OK Inicializa todos los sensores de nivel.
ETX
ResetWaterLevel STX 0x33 n STX OK Inicializa el sensor n.
ETX ETX
SetWaterLevelAllPeriod STX 0x34 STX estado Programa el módulo para tomar el nivel de agua de todos lo
periodo ETX ETX sensores con el periodo especificado.
SetWaterLevelPeriod STX 0x35 n STX estado Programa el módulo para tomar el nivel de agua del
periodo ETX ETX sensor n con el periodo especificado.
GetLightAll STX 0x40 ETX STX S1 S2 Pregunta al módulo el estado de todas las luces que tiene
S3 ... ETX conectadas.
GetLight STX 0x41 n STX Sn ETX Pregunta al módulo el estado de la luz n.
ETX
SetLightAllOn STX 0x42 brillo STX estado Enciende todas las luces con el nivel de brillo especificado.
ETX ETX
SetLightAllOff STX 0x43 ETX STX estado Apaga todas la luces.
ETX
SetLightOn STX 0x44 brillo STX estado Enciende la luz n con el nivel de brillo especificado.
n ETX ETX
SetLightOff STX 0x45 n STX estado Apaga la luz n.
ETX ETX
SetLightTimeAllOn STX 0x42 hora STX estado Programa el módulo para encender todas las luces a la hora
ETX ETX indicada.
SetLightTimeAllOff STX 0x43 hora STX estado Programa el módulo para apagar todas las luces a la hora
ETX ETX indicada.
SetLightTimeOn STX 0x44 n STX estado Programa el módulo para encender la luz n a la hora
hora ETX ETX indicada.
SetLightTimeOff STX 0x45 n STX estado Programa el módulo para apagar la luz n a la hora indicada.
hora ETX ETX
SetFeedingAll STX 0x50 m STX estado Programa la hora de cebado m de los peces de todos los
hora ETX ETX módulos.
SetFeeding STX 0x51 m n STX estado Programa la hora de cebado m de los peces en el módulo n.
hora ETX ETX
GetWavesAll STX 0x40 ETX STX S1 S2 Pregunta al módulo el estado de las bombas generadoras de
S3 ... ETX olas.
GetWaves STX 0x41 n STX Sn ETX Pregunta al módulo el estado de la bomba n.
ETX
SetWavesAllOn STX 0x42 ETX STX estado Conecta todas las bombas.
ETX
SetWavesAllOff STX 0x43 ETX STX estado Desconecta todas las bombas.
ETX
SetWavesOn STX 0x44 n STX estado Conecta la bomba n.
ETX ETX
SetWavesOff STX 0x45 n STX estado Desconecta la bomba n.
ETX ETX
SetWavesPeriodAll STX 0x42 STX estado Programa el módulo para conectar todas las bombas con el
periodo ETX ETX periodo indicado (en segundos).
SetWavesPeriod STX 0x44 n STX estado Programa el periodo de conexión de la bomba n.
periodo ETX ETX
Estado Descripción
0x00 Correcto
0x01 Error
0x11 Temperatura por encima del nivel establecido
0x12 Temperatura por debajo del nivel establecido
0x21 pH por encima del nivel establecido
0x22 pH por debajo del nivel establecido
Podemos ver en la tabla que los relés, el LCD y el sensor de pH se llevan aproximadamente el 70% del presupuesto total por lo que podemos limitar
el número de relés a los que realmente necesitemos. El LCD lo pondremos únicamente si no vamos a usar un ordenador para configurar el
controlador.
Modificaciones y mejoras
Estas son algunas de las posibles mejoras a efectuar en el controlador:
Luces: Control de las luces con PWM para simular el amanecer y el ocaso. Esto se puede hacer con el microcontrolador o con circuitería
externa. En este último caso no sería posible configurar los tiempos de encendido y apagado progresivo desde el terminal o desde el ordenador.
Terminal de control: Posibilidad de conectar un LCD de 2x16 en lugar de uno de 4x20 ya que normalmente sólo necesitamos la hora y los
datos de temperatura y pH.
Comunicaciones: Conexión con el exterior por red. Desarrollar un mini servidor de páginas web que permita todo el manejo del controlador a
través de él.
Sensores: Añadir sensores de carbonatos (KH), dureza (GH), amoniaco, nitratos y nitritos (¿conductividad?).