Documentos de Académico
Documentos de Profesional
Documentos de Cultura
VITALES DE UN BEBÉ
INDICE:
1 Introducción y Objetivos ....................................................................................... 4
1.1 Introducción................................................................................................... 4
1.2 Antecedentes.................................................................................................. 5
1.3 Objetivo del Proyecto .................................................................................... 8
2 Memoria descriptiva .............................................................................................. 9
2.1 Nociones sobre la Temperatura Corporal...................................................... 9
2.1.1 Definición .............................................................................................. 9
2.1.2 Zonas de Lectura ................................................................................. 10
2.1.3 Valores, Alteraciones y Terminología................................................. 10
2.2 Módulo 1: Equipo Inalámbrico con Sensor de Temperatura....................... 12
2.2.1 Diagrama de Bloques........................................................................... 12
2.3 Medición de la Temperatura Corporal. Sensores. ....................................... 14
2.3.1 Termopares .......................................................................................... 14
2.3.2 RTD’s. ................................................................................................. 18
2.3.3 Termistores .......................................................................................... 22
2.3.4 Acondicionamiento de la Señal. .......................................................... 26
2.3.5 Sensores de Temperatura con Semiconductores. ................................ 27
2.3.6 Elección Final ...................................................................................... 30
2.4 Comunicación Wireless entre Módulos....................................................... 33
2.4.1 ZigBee ................................................................................................. 33
2.4.2 IEEE 802.15.4 ..................................................................................... 35
2.4.2.1 Arquitectura de los Protocolos........................................................ 36
2.4.2.2 Nivel Físico ..................................................................................... 36
2.4.2.3 Nivel Enlace de Datos..................................................................... 37
2.4.3 Especificación Zigbee.......................................................................... 38
2.4.4 Dispositivos que Constituyen una Red Zigbee.................................... 39
2.4.5 Comunicaciones y Descubrimientos de Dispositivos.......................... 40
2.4.6 Modos de Funcionamiento .................................................................. 40
2.4.7 Modelo de Redes Zigbee ..................................................................... 43
2.4.8 Otros Medios de Transmisión de Datos y Elección Final ................... 46
2.5 Módulos Zigbee en el Mercado................................................................... 51
2.5.1 Elección Final ...................................................................................... 52
2.6 El Microcontrolador .................................................................................... 54
2
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
3
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
1 Introducción y Objetivos
1.1 Introducción
Han pasado alrededor de 2.500 años desde que se fundó la primera Escuela de
Medicina Occidental. Muchos han sido los médicos e investigadores que han ido desde la
anestesia a la vacuna, pasando por el endoscopio y los antibióticos. Numerosos han sido
los inventos y descubrimientos que se han producido en el último siglo y medio que han
permitido sentar las bases de la actual ciencia médica.
Para muchos, estos avances han pasado inadvertidos a lo largo de los años debido al
trepidante ritmo tecnológico que le ha dado la tecnología. Hace sólo unos ciento cincuenta
años parecía casi un sueño realizar una operación quirúrgica sin que el paciente sufriera.
Hoy en día, las intervenciones resultan menos traumáticas y los períodos postoperatorios se
han reducido notablemente gracias a la presencia de la tecnología en el ejercicio de la
medicina.
Se han aplicado cada vez más y más tecnologías para lograr las condiciones
óptimas en cualquier intervención quirúrgica. Se están utilizando los avances no sólo para
curar sino también para prevenir enfermedades así como para todo tipo de investigaciones
médicas, las cuales, gracias a la tecnología han realizado importantes descubrimientos. Los
expertos se han ocupado de la incorporación de los avances tecnológicos en la práctica de
la medicina, por lo que se prevé un cambio radical en la ciencia médica del futuro.
4
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
1.2 Antecedentes
La temperatura corporal es una de las constantes vitales que nos indica el estado de
salud de una persona, ya sea en su estado adulto o durante la niñez.
La fiebre (temperatura corporal elevada) es uno de los síntomas que nos indican
enfermedad. Existen en el mercado muchos tipos de termómetros para medir la
temperatura, además de diferentes métodos, cada uno ofrece ventajas y desventajas de
acuerdo a la edad, colaboración y personalidad de la persona o niño a la que se va a medir
la temperatura.
Temperatura táctil.
Es la medición de la temperatura utilizando el tacto tocando a la persona, este
método no ofrece ninguna garantía acerca del nivel exacto de la temperatura, simplemente
es una forma de saber si tiene fiebre para luego usar un termómetro para la medición.
Termómetro de vidrio.
Estos termómetros ya no se encuentran en el mercado, aunque su utilización estuvo
muy extendida hasta su prohibición. Pueden medir la temperara de forma precisa y de fácil
medición, pero requieren mayor tiempo para hacer las mediciones (oral y rectal 3 minutos,
axilar 8 a 10 minutos). Al ser de vidrio pueden romperse con facilidad, por lo que no son
aconsejados debido a que el vidrio roto y su contenido de mercurio (tóxico) son dañinos
para la salud, tienen la punta sólida y son de difícil lectura porque se debe buscar el ángulo
en el cual se puede visualizar la banda de mercurio.
Termómetros digitales
Sirven para medir la fiebre de forma precisa, rápida, segura y fácil de leer y fácil
medición. Precisa porque utilizan sensores de temperatura; rápida porque basta un
minuto para obtener la medida; segura porque cuentan con una punta flexible, donde se
ubica el sensor, lo que les da menor probabilidad a romperse y no contienen mercurio; y
fáciles de leer porque cuentan con una pantalla digital que muestra la temperatura
obtenida de la medición.
5
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Termómetros de oído
Son los más costosos, estos termómetros miden el calor emitido en el tímpano y
el tejido circundante en el interior del conducto auditivo por medio de un infrarrojo, se
obtiene una medición precisa siempre y cuando se haya colocado correctamente dentro
del canal auditivo, de lo contrario, el infrarrojo no podrá medir la temperatura o arrojará
un dato erróneo. El tiempo de la medición es el más rápido, y son fáciles de leer al contar
con una pantalla digital.
Termómetros de chupete
Dispositivo que se coloca en los chupones de los bebés, sus valores también son
poco confiables, al igual que la temperatura táctil y los termómetros de tira plástica sólo
indican si el niño tiene fiebre
6
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Termómetro infrarrojo
Este tipo de termómetros no necesitan del contacto físico para medir la
temperatura. En pocos segundos, a partir de sensores infrarrojos permiten obtener un
valor de la temperatura de la piel sobre la cual están dirigidos. La distancia a la que se
debe encontrar el termómetro varía entre los 0’5 cm. a los 10 cm.
7
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
8
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
2 Memoria descriptiva
2.1.1 Definición
La temperatura es una magnitud que refleja el nivel térmico de un cuerpo, es decir,
su capacidad para ceder energía calorífica. La temperatura depende del movimiento de las
moléculas que componen a la sustancia, si éstas están en mayor o menor movimiento, será
mayor o menor su temperatura respectivamente, es decir, estará más o menos caliente. El
calor es la energía que se pierde o gana en ciertos procesos. Por tanto, los términos de
temperatura y calor, aunque relacionados entre sí, se refieren a conceptos diferentes: la
temperatura es una propiedad de un cuerpo y el calor es un flujo de energía entre dos
cuerpos a diferentes temperaturas.
Para poder hablar de temperatura normal del cuerpo, debemos establecer una
diferencia entre la temperatura de los tejidos profundos del cuerpo y la temperatura
cutánea. Esto justifica establecer una división: temperatura interna, con una temperatura
constante y fuertemente regulada; y temperatura cutánea de los tejidos periféricos, cuya
temperatura puede oscilar dentro de unos límites amplios, dependiendo tanto de la
temperatura del ambiente como del grado de defensa ante la pérdida de calor y de las
actividades particulares. De este modo, el término temperatura corporal no debe emplearse
sin tener en cuenta en qué parte del cuerpo tiene lugar la medición.
9
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
10
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
11
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
sensor Tª
batería uC
Sist. Wireless
- El sensor de temperatura. Debe ser un sensor de pequeño tamaño, que permita dos
modos de funcionamiento, modo normal y modo de bajo consumo. Lo más
integrado posible para que su consumo sea mínimo.
13
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
2.3.1 Termopares
Los termopares son los sensores de temperatura utilizados con mayor frecuencia
porque son sensores precisos, relativamente económicos, que pueden operar en un amplio
rango de temperaturas.
El termopar fue descubierto por Thomas Seebeck en 1831. Él descubrió que una
corriente eléctrica fluía en un circuito cerrado de dos metales distintos cuando una de las
uniones era calentada. La magnitud y dirección de la corriente son función de la diferencia
de temperatura de las uniones y de las propiedades térmicas de los metales usados en el
circuito. A este fenómeno se le conoce como efecto Seebeck.
14
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Figura 10. Los termopares son económicos y pueden operan en un amplio rango de
temperaturas.
Existen diferentes tipos de termopares asignados con letras mayúsculas que indican
su composición de acuerdo al American nacional Standards Institute (ANSI). Los tipos
de termopares más comunes incluyen B, E, K, N, R, S y T.
Las curvas de calibración para los diferentes tipos de termopares son las descritas
en la siguiente tabla:
15
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Medición.
La diferencia de potencial, en un termopar, no puede ser medida directamente
debido a que la unión termopar con el instrumento de medida crea un nuevo circuito
termoeléctrico.
Por ejemplo, si conectamos un voltímetro a un termopar tipo T (cobre-constantan)
para conocer su diferencia de potencial.
16
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
diferencia de potencial de V3 es cero voltios (V3=0=. Sin embargo, U2 que es una unión
de cobre-constantan crea una V2 en oposición a V1, por lo que la lectura resultante del
voltímetro V será proporcional a la diferencia de temperaturas U1 y U2. Es necesario
conocer U2 para determinar V1,
Para este procedimiento de compensación por unión fría, existen dos técnicas:
- compensación por hardware
- compensación por software.
En la compensación por hardware, se inserta una fuente variable de voltaje dentro del
circuito para cancelar los voltajes termoeléctricos parásitos. La fuente variable de voltaje
genera un voltaje de compensación de acuerdo con la temperatura ambiente, para así poder
adicionar el voltaje correcto para cancelar las señales termoeléctricas indeseadas. Cuando
se cancelan estas señales parásitas, la única señal que mide el dispositivo de adquisición de
datos es el voltaje desde la unión del termopar. Con la compensación por hardware, la
temperatura en los terminales del sistema de adquisición de datos es irrelevante ya que los
voltajes parásitos del termopar se han cancelado. La mayor desventaja de la compensación
por hardware es que cada tipo de termopar debe poseer un tipo separado de circuito que
pueda adicionar el voltaje correcto de compensación; este hecho hace que el circuito sea
bastante costoso. La compensación por hardware es generalmente menos exacta que la
compensación por software.
En la compensación por software el cálculo de la tensión de referencia y a su vez el
cálculo de la diferencia de tensiones es realizado por un microprocesador. Este último es
sin duda el procedimiento de medición de termopares más común.
2.3.2 RTD’s.
Las termorresistencias son sensores de temperatura basados en el cambio de
resistividad que sufren las estructuras de los metales con la temperatura, la cual es
aproximadamente lineal para ciertos metales.
Una termo resistencia, o RTD, se fabrica para tener un valor Ro nominal a una
temperatura dad (p.e. 100 ohms a 0ºC). Al medir su resistencia a una temperatura
desconocida y al compararla con Ro, se puede conocer la diferencia de resistencia. Como
la característica de la resistencia en función de la temperatura es también conocida, el
cambio de temperatura desde el punto inicial será conocida.
Los materiales usados como RTDs’s son:
- cobre
- balco (aleación de hierro-níquel)
- tungsteno
- iridio
- Platino.
Debido a su baja resistividad, el oro y la plata no son usados como RTD’s. El
tungsteno posee alta resistividad, pero se le reserva para muy alta temperatura, al ser
muy quebradizo y difícil de maquinar.
18
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
El cobre se usa a veces como RTD. Su baja resistividad hace que el elemento sea
más largo que uno de platino, pero su linealidad y bajo costo lo hacen una alternativa
económica. Su límite de operación es de 120ºC.
Los elementos de níquel o aleaciones de níquel son más no lineales y tienden a
modificar su valor de resistencia con el tiempo.
Esta última permite el poder reemplazar el elemento sensor sin tener que recalibrar
un instrumento. Los valores típicos son de 100, 500 y 1000 ohms.
19
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Las RTD’s se identifican por el metal del que se componen (según la tabla
periódica) y la resistencia que presentan a 0ºC. Ejemplo: Pt100, Pt1000, Ni120, Cu200,
etc.
Según la precisión, se distinguen dos tipos:
- Clase A: ± 0’15 ºC a 0ºC
- Clase B: ± 0’30 ºC a 0ºC
Luego presentan una degradación de la precisión hacia los extremos del rango. Por
ejemplo, según el estándar IEC751, para clase B, se tiene:
20
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
(1)
donde:
R(T) = Resistencia medida.
Ro = Resistencia nominal a 0ºC
Las constantes están definidas por el estándar internacional (DIN EN 60751) para
sensores de platino:
(2)
El coeficiente b es tan pequeño que para la mayoría de las aplicaciones puede
considerarse una relación lineal entre R(T) y T.
Medición.
La medida de una RTD se puede realizar de diferentes métodos. En todos ellos, es
necesaria un circuito de acondicionamiento de la señal.
(3)
21
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
El valor del RTD a la temperatura de calibración del puente será el valor de R3. Se
busca que R1, R2 y R3 tengan coeficientes de variación de resistencia con la temperatura
nulo a la temperatura de trabajo.
2.3.3 Termistores
Los termistores aprovechan la dependencia que presenta la resistencia eléctrica de
cualquier material conductor con la temperatura. En el caso de los termistores, se utilizan
materiales semiconductores de alta sensibilidad, específicamente diseñados para que su
resistencia dependa agudamente de la temperatura del elemento. Existen termistores de
coeficiente positivo PTC (su resistencia aumenta con la temperatura) o negativo NTC (su
resistencia disminuye con la temperatura), siendo este último más típico y de bajo costo.
22
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
(4)
Medición.
Los termistores son dispositivos sensibles, se les debe administrar una corriente de
excitación y luego leer el voltaje a través de los terminales. Si el calor adicional no se
puede disipar, el calentamiento causado por la corriente de excitación puede incrementar la
temperatura del elemento de detección. El auto calentamiento generalmente cambia la
resistencia del termistor, provocando errores en las medidas. Los efectos del auto
calentamiento se pueden disminuir al administrar una baja corriente de excitación.
La manera más fácil de conectar un RTD o termistor a un dispositivo de medida es
con una conexión de 2 cables.
24
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Con este método, los dos cables que alimentan al RTD o termistor con su corriente
de excitación también se usan para medir el voltaje en el sensor. Debido a la baja
resistencia nominal de los RTDs, la precisión de las medidas se puede ver afectada
significativamente por la resistencia del cable. Por ejemplo, los cables con una resistencia
de 1 W conectados a un RTD de platino de 100 W causan un error de medida del 1%.
Un método de conexión de 3 cables o 4 cables puede eliminar los efectos de
resistencia del cable. La conexión coloca las terminales en una trayectoria de alta
impedancia a través del dispositivo de medida, eliminando de manera efectiva los errores
causados por la resistencia del cable. No es necesario usar un método de conexión de 3 o 4
cables para termistores ya que éstos generalmente tienen valores de resistencia nominal
más altos que los RTDs. A continuación se muestra un diagrama de conexión de 4 cables.
Las señales de salida del RTD y del termistor por lo general están en el rango de los
milivoltios, lo cual los hace sensibles al ruido. Los filtros paso bajo son usados
comúnmente en sistemas de adquisición de datos de RTD y termistor para eliminar de
forma efectiva el ruido de alta frecuencia en las medidas. Por ejemplo, los filtros paso bajo
son útiles para eliminar el ruido de línea de potencia de 50 Hz que se presenta comúnmente
en la mayoría de los laboratorios y plantas.
25
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Eliminación de Ruido
Las señales de los sensores generalmente están en el rango de los milivoltios, lo
cual los hace sensibles al ruido. Los filtros paso bajo se utilizan comúnmente en los
sistemas de adquisición de datos de termopares para eliminar de manera efectiva el ruido
de alta frecuencia.
También se puede reducir el ruido amplificando los voltajes de bajo nivel cerca de
la fuente de señal.
Otras fuentes de ruidos son debidas a que por ejemplo los termopares, se suelen
montar o soldar en materiales conductivos, haciéndolos particularmente sensibles al ruido
en modo común y a los lazos de tierra. Un buen aislamiento ayuda a prevenir que ocurran
lazos a tierra y puede mejorar drásticamente el rechazo de ruido en modo común.
(5)
donde:
q=carga del electrón
k=constante de boltman
T=temperatura
Isat=corriente de saturación
27
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
(6)
Pero además de la variación con T, mantiene una fuerte dependencia de Isat con la
temperatura, lo que hace que no sea directamente utilizable debido a la compleja forma de
dependencia con la temperatura. Si se toman N transistores idénticos al primero sobre lo
que se reparte igualitariamente la misma corriente Ic.
(7)
Si se toma la tensión diferencia entre ambos conjuntos, se tendrá una tensión
proporcional a la temperatura absoluta pero sin tener dependencia alguna con Isat.
(8)
28
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Los sensores basados en este sistema pueden dar su salida según la siguiente tabla:
29
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
30
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Acondicionamiento
Tipo de sensor Exactitud Sensibilidad
de señal necesaria
Termopar Amplificación Buena Buena
Filtro
Unión fria
Compensación
32
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Como se verá más adelante, ZigBee puede ser usado para una gran variedad de
aplicaciones, como podemos observar en la Figura 25, pero en este caso su utilización es
para fines de monitorización corporal.
2.4.1 ZigBee
ZigBee es el nombre de la especificación de un conjunto de protocolos de alto nivel
de comunicación inalámbrica. Esta especificación define una solución para
comunicaciones inalámbricas de bajo coste y consumo.
muy pequeña de energía de forma que cada dispositivo individual pueda tener una
autonomía de hasta 5 años antes de necesitar un recambio en su sistema de alimentación.
El medio de transmisión ZigBee trabaja sobre la banda ISM para usos industriales,
científicos y médicos; en concreto, 868MHz en Europa, 915MHz en Estados Unidos y
2.4GHz en todo el mundo. Al ser éste último libre en todo el mundo, las empresas optan
por esta opción a la hora de diseñar. En el rango de frecuencias de 2.4GHz se definen hasta
16 canales, cada uno de ellos con un ancho de banda de 5MHz.
- Nivel de red.
- Nivel de aplicación
- Objetos de dispositivo ZigBee (ZDO, ZigBee Device Objects).
- Objetos de aplicación definidos por el fabricante.
Además de añadir dos capas de alto nivel (nivel de red y de aplicación) a la pila de
protocolos, el principal cambio es la adición de los ZDO ya que son los responsables de
llevar a cabo una serie de cometidos, entre los que se encuentran el mantenimiento de los
roles de los dispositivos, la gestión de peticiones de unión a una red, el descubrimiento de
otros dispositivos y la seguridad.
También hacer referencia a los objetos de aplicación definidos por el fabricante puesto
que permiten la personalización y adaptación, y favorecen la integración total.
Dicha ZigBee Stack será un elemento a tener en cuenta más adelante puesto que los
dispositivos que se usen para implementar nuestro proyecto deberán ser totalmente
compatibles con ZigBee y de este modo poder programar la pila de protocolos.
34
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
El propósito del estándar es definir los niveles de red básicos para dar servicio a un
tipo específico de red inalámbrica de área personal (WPAN) centrada en la habilitación de
comunicación entre dispositivos con bajo coste y velocidad. Se enfatiza el bajo coste de
comunicación con nodos cercanos y sin infraestructura, o con muy poca, para favorecer
aún más el bajo consumo.
36
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
La versión original del estándar (2003) especifica dos niveles físicos basados en
Espectro Ensanchado por Secuencia Directa (DSSS, Direct Sequence Spread Spectrum).
Uno de los dos niveles físicos trabaja en las bandas de 868/915MHz con tasas de
transferencia de entre 20 y 40kbps; el otro nivel trabaja en la banda de 2450MHz con hasta
250kbps. Posteriormente se realizó una revisión en el 2006 incrementando las tasas de
datos máximas de las bandas de 868/915MHz, pasando a transmitir hasta 100 y 250kbps.
En el nivel físico podemos localizar cuatro niveles físicos distintos en base al método
de modulación usado. Tres de estos cuatro niveles conservan el mecanismo DSSS: las
bandas de 868-915MHz que usan modulación en fase binaria o por cuadratura en offset
(OQPSK, Offset Quadrature Phase Shift Keying). En la banda de 2450MHz se usa la
técnica OQPSK.
37
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Por una parte, la entidad de datos crea y gestiona las unidades de datos del nivel de
red a partir del payload del nivel de aplicación y realiza el ruteo en base a la topología de
la red en la que el dispositivo se encuentra. Por otra parte, las funciones de control del
nivel de red controlan la configuración de nuevos dispositivos y el establecimiento de
nuevas redes; puede decidir si un dispositivo colindante pertenece a la red e identifica
nuevos routers y vecinos. El control puede detectar así mismo la presencia de receptores, lo
que posibilita la comunicación directa y la sincronización a nivel MAC.
Nivel de APLICACIÓN
El nivel de aplicación es el más alto definido por la especificación y, por tanto, la
interfaz efectiva entre el nodo ZigBee y sus usuarios. En él se ubican la mayor parte de los
componentes definidos por la especificación: tanto ZDO’s, como sus procedimientos de
control y los objetos de aplicación.
Componentes principales
El ZDO se encarga de la definición del rol de un dispositivo como Coordinador
ZigBee o Dispositivo Final. Además, el ZDO identifica los dispositivos que se encuentran
a un salto en la red (dispositivos vecinos) y los servicios que ofrecen. Tras ello, puede
proceder a establecer enlaces seguros con dispositivos externos y responder peticiones.
38
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
servicios de control asociados. Trabaja como nexo de unión entre el nivel de red y el resto
de componentes del nivel de aplicación. Mantiene actualizadas las tablas de asociaciones
en forma de base de datos, que puede utilizarse para encontrar dispositivos adecuados en
base a los servicios demandados y ofrecidos. Como puente entre dos niveles, encamina los
mensajes a lo largo de la pila de protocolos.
Vistas las funciones realizadas por los distintos tipos de dispositivos que forman una
red ZigBee podemos clasificarlos, según su funcionalidad, en dos tipos de nodo definidos
por el estándar 802.15.4:
39
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
los dispositivos esclavos en todo momento permanecen en modo “dormido” a no ser que
sean activados, de tal forma que solo se “despiertan” por una fracción de segundo para
confirmar que siguen en nuestra red de dispositivos de la que forman parte, es decir, que
siguen “vivos”.
En las redes ZigBee, se pueden usar dos modos de funcionamiento diferentes: con
balizas o sin balizas.
Con balizas
En este modelo de funcionamiento, el camino de transmisión y recepción está
permanentemente controlado por un distribuidor que se encarga de controlar el canal y
dirigir las transmisiones. El distribuidor permite a todos los dispositivos saber cuándo
pueden transmitir.
Para el control del canal se utilizan las balizas, elementos que se usan para poder
sincronizar todos los dispositivos que conforman la red. Los intervalos de las balizas son
asignados por el coordinador de la red (Coordinador ZigBee) y pueden variar desde los
15ms hasta los 4 minutos.
Este modo es más recomendable cuando el coordinador de red trabaja con una
batería. Los dispositivos que conforman la red escuchan a dicho coordinador durante el
balizamiento (envío de mensajes a todos los dispositivos -broadcast-, entre 0.015 y 252
segundos). Un dispositivo que quiere intervenir, lo primero que tendrá que hacer es
registrarse para el coordinador, y es entonces cuando mira si hay mensajes para él. En el
caso de que no haya mensajes, este dispositivo vuelve a “dormir”, y se despierta de
acuerdo a un horario que ha establecido previamente el coordinador. En cuanto el
coordinador termina el balizamiento, todos los dispositivos de la red vuelven a “dormirse”.
Sin balizas
En este tipo cada dispositivo es autónomo, pudiendo iniciar una conversación en la
cual los otros dispositivos pueden interferir. A veces puede ocurrir que el nodo destino
puede no oír la petición o que el dispositivo emisor pretenda transmitir cuando el canal esté
ocupado, ocasionando posibles colisiones. Es por ello que se debe utilizar un mecanismo
de control de acceso al medio. Las redes sin balizas acceden al canal por medio del
CSMA/CA. El CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance) se
basa en la escucha del canal por parte del nodo que pretende transmitir, y de esta forma
detecta si algún otro nodo que compone la red está transmitiendo o tiene intención de ello.
Este sistema se usa típicamente en los sistemas de seguridad, en los cuales sus
dispositivos duermen prácticamente todo el tiempo. Para que se les tenga en cuenta, estos
elementos se “despiertan” de forma regular para anunciar que siguen en la red.
41
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Cuando se produce un evento, como por ejemplo que un sensor detecte algún
movimiento, el sensor “despierta” instantáneamente y transmite a la alarma
correspondiente. Es en ese momento cuando el coordinador de red recibe el mensaje
enviado por el sensor y activa la alarma pertinente. En este caso, el coordinador de red se
alimenta de la red principal durante todo el tiempo.
Los routers suelen estar activos todo el tiempo, por lo que requieren una
alimentación estable en general. Esto permite redes heterogéneas en las que algunos
dispositivos pueden estar transmitiendo todo el tiempo, mientras que otros sólo transmiten
ante la presencia de estímulos externos.
En general, los protocolos ZigBee que no hacen uso de las baliza, minimizan el
tiempo de actividad para evitar el uso de energía. En las redes con balizas, los nodos sólo
necesitan estar despiertos mientras se transmiten las balizas (además de cuando se les
asigna tiempo para transmitir); si no hay balizas, el consumo de cada dispositivo será
distinto ya que encontraremos nodos activos permanentemente y otros que sólo lo están
esporádicamente.
Acceso al medio
El medio físico es un recurso al que se accede utilizando CSMA/CA. Las redes que
no utilizan las balizas hacen uso de una variación del mismo basada en la escucha del
medio, temporizada por un algoritmo de backoff6, salvo en el caso de las confirmaciones
(ACK, Acknowledgement).
42
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Un aspecto a tener muy en cuenta son los tipos de topologías de red que permite el
estándar que soporta ZigBee. Su nivel de red permite tres topologías distintas:
- Topología en estrella.
- Topología en árbol.
- Topología de malla.
Topología estrella
En redes en estrella el coordinador se sitúa en el centro, y toda conexión que se
quiera realizar entre los distintos nodos de la red debe pasar por éste.
Una red en estrella activa tiene un nodo central activo que normalmente tiene los
medios para prevenir problemas. Se utiliza sobre todo para redes locales. La mayoría de las
redes de área local que tienen un router, un switch o un hub7 siguen esta topología.
Las ventajas que nos puede aportar una red en estrella sería la facilidad a la hora de
implementarla, adecuada para redes temporales, el fallo de un nodo periférico no influiría
en el comportamiento del resto de la red y no hay problemas con colisiones de datos ya que
cada estación tiene su propia conexión al coordinador central. En contrapartida, la
utilización de una red en estrella nos limita tanto el número de nodos que pueden estar
conectados a la red, como la longitud del cableado (en caso de ser una conexión cableada).
También se debe tener muy en cuenta que los costes de mantenimientos pueden aumentar a
largo plazo, y que el fallo del nodo central puede echar abajo la red entera.
A causa de todo ello, podemos confirmar que una red en estrella puede ser poco
fiable en el momento de realizar transferencias de información
Topología en árbol
Topología de red en la que los nodos están colocados en forma de árbol. Para este
tipo de topología el coordinador será la raíz del árbol. Desde una vista topológica, la
conexión en árbol es parecida a una serie de redes en estrella interconectadas, salvo en que
43
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Los problemas asociados a este tipo de topología radican en que los datos son
recibidos por todas las estaciones sin importar para quien vayan dirigidos. Por lo tanto es
necesario dotar a la red de un mecanismo que permita identificar al destinatario de los
mensajes. Además, debido a la presencia de un medio de transmisión compartido entre
muchas estaciones, pueden producirse interferencias entre las señales cuando dos o más
estaciones transmiten al mismo tiempo. La solución al primero de estos problemas aparece
con la introducción de un identificador de estación destino. Para darle solución al segundo
problema, hay que mantener una coordinación entre todas las estaciones, y para eso se
utiliza cierta información de control en las tramas que controlan quien transmite en cada
momento (utilización de tramas balizas mencionadas anteriormente).
Topología en malla
La topología más interesante es la topología de malla. Consiste en que al menos
uno de los nodos tendrá más de dos conexiones. Con ello conseguimos que si, en un
momento dado, un nodo del camino falla y se cae, pueda seguir la comunicación entre
todos los demás nodos debido a que se rehacen todos los caminos.
Al igual que en la topología en árbol, las redes en malla permiten el uso de Routers
ZigBee para habilitar la comunicación en el nivel de red. Éstos no son Coordinadores
ZigBee, pero pueden serlo de sus respectivos espacios de operación personal definidos por
802.15.4.
44
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
En la siguiente figura, se puede apreciar las diferentes topologías que puede tener
una red ZigBee.
Árbol de clusters
Vistos los tipos de topologías que podemos manipular, encontramos que nuestro
estándar menciona un tipo de red definido como “árbol de clusters”. Para ello se usan redes
punto a punto.
Las redes punto a punto pueden formar patrones arbitrarios de conexionado, donde
su extensión se ve limitada únicamente por la distancia existente entre cada par de nodos.
Las estructuras árbol de clusters están formadas por el conexionado entre nodos
FFD y RFD. Puesto que se necesita de al menos un nodo FFD para poder conectar
diferentes RFD’s, se aprovecha de ello para generar estructuras donde los nodos RFD’s
simbolizan las hojas de un árbol, y donde la mayoría de los nodos son FFD’s. A partir de
los árboles de clusters podemos generar grandes redes de malla, cuyos nodos sean árboles
de clusters con un coordinador local para cada cluster, junto con un coordinador global.
45
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
- Una red ZigBee puede constar de más de 65000 nodos distribuidos en subredes de
255 nodos, frente a los 8 máximos de una subred (piconet9) Bluetooth.
- Menor consumo eléctrico que el de Bluetooth. Este menor consumo se debe a que
el sistema ZigBee, como ya se ha mencionado anteriormente, se queda la mayor
parte del tiempo dormido, mientras que en una comunicación Bluetooth esto no se
puede dar ya que suelen estar siempre transmitiendo y/o recibiendo.
Éste último caso de utilización de ZigBee, los sensores médicos, nos garantiza que
ZigBee será un medio idóneo para este proyecto que se basa en la transmisión de datos a
partir de medidas capturadas por un sensor de temperatura.
Wireless USB
Wireless USB es un protocolo de comunicación inalámbrica por radio con gran
ancho de banda, que combina la sencillez de uso de USB con la versatilidad de las redes
inalámbricas.
Gracias a su alta tasa de transferencia, Wireless puede usarse para aplicaciones que
requieren un flujo de transferencia elevado. Wireless USB se utiliza en mandos de
videoconsola, impresoras, escáneres, transmisión y visualización de vídeos, etc.
Wi-Fi
Wi-Fi, al igual que el resto de medios que estamos analizando, consiste en un
sistema de envío de datos sobre redes que utiliza ondas en lugar de cables (wireless). Se
basa en el estándar IEEE 802.11, y es por ello que podemos encontrar diversos tipos de
Wi-Fi:
- Los estándares IEEE 802.11 son fácilmente aceptados debido a que usan la banda
frecuencial de 2.4GHz.
- La velocidad de transferencia del medio depende del estándar que se haga uso.
Puede proporcionarnos una velocidad de 11Mbps (IEEE 802.11b) hasta 108Mbps
(IEEE 802.11n), pasando por los 54Mbps del estándar IEEE 802.11g.
47
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
La principal ventaja que nos proporciona Wi-Fi, aparte de las altas velocidades de
transferencia, es la capacidad de suministrar cobertura en un gran rango de distancia (capaz
de alcanzar los 100 metros).
Vistos los principales puntos que nos puede aportar la utilización de Wi-Fi (altas
velocidades de transmisión y gran cobertura), se puede concluir que este tipo de medio
quedaría fuera del tipo de transmisión que se pretende llevar a cabo al necesitar una mayor
fuente de energía para poder proporcionar dichas tasas de velocidades.
Wibree
Wibree resultaría ser una opción a tener en cuenta para su empleo en este proyecto
puesto que sus principales características y sus principios básicos son parejos a los ya
vistos en ZigBee.
Al igual que en ZigBee, Wibree opera a los 2.4GHz (banda ISM) haciendo posible
la comunicación entre dispositivos de pila de botón y dispositivos Bluetooth. Su tasa de
transferencia es superior respecto a ZigBee: 250kbps de ZigBee frente a 1Mbps de Wibree.
48
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
TinyOS
TinyOS es un sistema operativo open source basado en componentes para redes de
sensores inalámbricas. Está diseñado para incorporar nuevas innovaciones rápidamente y
para funcionar bajo las importantes restricciones de memoria que se dan en las redes de
sensores.
49
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Comparativa general
50
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
51
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Analizando las tablas comparativas se puede observar que los productos ZigBee de
MaxStream son la mejor opción frente a otros módulos de la competencia. Cuentan con
unas dimensiones reducidas, una fácil integración, diferentes tipos de antenas según las
necesidades del usuario final, un consumo aceptable, una buena disponibilidad, y la
característica más relevante es la concesión del certificado ZigBee.
Además, cabe destacar que existe bastante información, resultando ser un factor
importante al momento de elegir un ódulo ZigBee, ya que una buena documentación
permitirá que el desarrollo del proyecto avance de forma continuada y fluida en el
transcurso del tiempo.
52
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Para el desarrollo de este proyecto, se ha optado por escoger el modulo Xbee, con
antena chip integrada. De los dos es el que más se ajusta por su bajo consumo y
dimensiones.
Con antena chip integrada, los alcances de las especificaciones se reducen un 70%,
aun así, siguen siendo más que suficientes para el objetivo de este proyecto.
53
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
2.6 El Microcontrolador
2.6.1 Función
El microcontrolador se encargará de gestionar los recursos y los componentes. Se
encargará de temporizar los estados de bajo consumo cuando no se necesite la temperatura
y de despertar a los diferentes módulos cuando se requiera su uso.
2.6.2 Requisitos
El microcontrolador escogido tendrá que comunicarse con el módulo Xbee de
MaxStream y el sensor MCP9804 de Microchip.
Sensor MCP9804.
Tensión de alimentación: desde 2’7 V a 5’5 V
54
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Módulo Xbee.
Para entrar en modo de bajo consumo y salir del modo en bajo consumo se utiliza el
PIN 9.
SLEEP_RQ – PIN 9
55
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Requisitos Microcontrolador
Dispositivo PIN
Sensor MCP9804 1 SDA
I2C
2 SCL
Módulo Xbee 2 DOUT
UART
3 DIN
9 SLEEP_RQ
2.6.3 Alternativas
Aunque existen múltiples fabricantes, los posibles microcontroladores se han
buscado dentro de la gama que el fabricante MICROCHIP posee.
Para esta aplicación, estas versiones son las más idóneas ya que trabajan a partir de
los 2V de tensión de alimentación. El resto de familias necesitan 4’2V como mínimo.
Las características de este microcontrolador son iguales a las del PIC 18F2525,
únicamente cambia la tensión mínima de alimentación.
56
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
57
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
2.7.1 Funciones:
El módulo 2 es el equipo encargado de realizar las funciones de interface con el
usuario. Su principal misión será la de mostrar en todo momento la temperatura corporal
que el módulo 1 está midiendo.
A su vez, permitirá que el usuario disponga de una serie de opciones para ajustarse
a las necesidades de este.
Regulador 5V LCD
AC / DC
Regulador 3'2V uC
Sist. Wireless
- Un circuito de alimentación.
Se encargará de alimentar los diferentes elementos con las tensiones adecuadas.
58
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
- El microcontrolador
Se encargará de gestionar la información recibida por los pulsadores y el módulo de
comunicación Xbee. Enviará la información al módulo LCD para mostrarlo por
pantalla y se podrá configurar la aplicación.
- El módulo LCD
Se encargará de mostrar la información que le envia el microcontrolador, tanto los
menús de configuración, como la temperatura del módulo 1.
- Pulsadores
Mediante unos pulsadores, el usuario podrá configurar el módulo 2.
- Zumbador,
Es el encargado de avisar al usuario cuando alguna alarma se activa. Como por
ejemplo:
- Temperatura alta / baja del usuario.
- Falta batería en el módulo 1.
59
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
En este caso, se ha optado por una conexión con bus de 4 bits. La ventaja frente al
bus de 8 bits es su velocidad de transmisión de datos, sin embargo, al ser la necesidad de
velocidad en la muestra de los datos en nuestra aplicación baja, no es necesario una
conexión de 8 bits. Además, nos permite disponer de 4 pines más del microprocesador
libres.
60
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
El módulo LCF posee una zona de memoria RAM llamada DDRAM (Data Display
Ram) donde se almacenan los caracteres que se van a mostrar en la pantalla.
Tiene una capacidad de 80 bytes, 40 por cada línea, de los cuales sólo 32 se pueden
visualizar a la vez (16 bytes por línea).
Cada uno de los caracteres tiene su representación binaria de 8 bits. Para visualizar un
carácter debe recibir por el bus de datos el código correspondiente.
61
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
62
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
2.7.5 Pulsadores
Se han implementado 3 pulsadores mediante los cuales el usuario puede acceder al
menú de la aplicación y configurarla.
- Pulsador 1 Æ Menu / OK
- Pulsador 2 Æ Sig. +
- Pulsador 3 Æ Prev. –
63
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
VCC
Pulsador
PIN uC
R1
10k
2.7.6 Zumbador
El zumbador utilizado es un zumbador (buzzer) electromecánico. Se activará
mediante un PIN del microcontrolador. Debido a que la intensidad máxima que puede
proporcionar un pin a su salida es de 25 mA, utilizaremos un transistor NPN en la siguiente
configuración como interruptor.
VCC
2
BUZZER
1
PIN uC
R2
Q1
NPN BCE
1k
2.7.7 Alimentación
Los diferentes sistemas que forma el módulo se alimentan principalmente a 2
tensiones diferentes.
El microcontrolador y el módulo Xbee y el zumbador se alimentan a 3,2 V mientras
que el LCD se alimenta a 5 V.
La tensión de alimentación general la obtenemos de la red eléctrica a 230V – 50 Hz
y mediante un transformador la pasamos 9 V de tensión continua.
Mediante 2 reguladores de tensión obtenemos las tensiones deseadas.
64
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
(9)
Para la tensión de 5V, hemos elegido el regulador L7805 que proporciona una
tensión fija a su salida de 5V.
65
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
66
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
67
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
3 MEMORIA DE CÁLCULO
A partir de los elementos reflejados en la memoria descriptiva, se han desarrollado
dos programas para los microcontroladores de los módulos 1 y 2.
El lenguaje utilizado es el CCS, ya que dispone de herramientas y librerias muy
útiles y se trata de un lenguaje muy parecido al C.
El compilador utilizado es el PCWHD versión 4.104 de CCS.
Contador_timer ++
Si contador_timer>tiempo_muestreo muestrea_envia=1
Si
contador_timer=0
No
Cargo Timer1
Fin Interrupción
68
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
El código es el siguiente:
Funcionamiento:
Cada 500 ms se produce una interrupción por el Timer 1 del microcontrolador.
Cuando entra en la interrupción, se incrementa un contador y se compara con el
tiempo de muestreo preestablecido.
Si es mayor, entonces la variable muestrea_envia toma valor 1 y se pone a 0 el
contador. Esta variable, indicará al programa principal que puede muestrear la Tª del
sensor y enviarla al módulo de sobremesa.
Finalmente, se carga el Timer1 con el valor 0x0BDC para que vuelva a generar una
interrupción a los 500 ms.
69
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Si kbhit
Si
dato=getc()
No
dato_recibido=1
Fin Interrupción
El código es el siguiente:
#int_rda //Vector de interrupcion de la recepcion de
datos
void rda_isr(void) //por el usart
{
if (kbhit()) // si entra un dato
{
dato[indi]=getc();
aux[indi]=dato[indi];
indi++;
dato_recibido=1; ;
}
}
Funcionamiento:
Si se genera una interrupción de la UART en primer lugar miro si es debido a la
entrada de un dato (if (kbhit)).
Si se genera por la entrada de un dato, leo ese dato, hago una copia en una variable
auxiliar he indico al programa principal que he recibido un dato (dato_recibido=1).
70
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
71
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Inicio
Configuro Xbee
No
Si "recibo_dato=1"
Si
Envio el dato
Configuro Timer1
Si "muestrea_envia=1"
No
Si
Envio el dato
muestrea_envia=0
Mientras True
73
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Funcionamiento:
En primer lugar inicializo las variables globales.
Configuro el módulo Xbee mediante la acción inicio_Xbee(). Durante su
configuración, y para entrar en modo comando, el módulo Xbee envia el comando +++ al
módulo de sobremesa indicando que está configurando el módulo Xbee, cuando termina la
configuración envia el carácter “z”, cuando éste lo recibe, le envía un valor entero con el
tiempo de muestreo deseado.
En el bucle del while, se espera a recibir este dato. Una vez recibido, se envía el
carácter “z” al módulo de sobremesa para que sepa que se ha recibido correctamente el
valor del tiempo de muestreo, y después se actualiza ese valor.
A continuación, se activa el sensor, se toma el valor de la Tª, se pone al sensor en
bajo consumo y se envía ese valor por el módulo Xbee.
Se configura el Timer1 para que genere una interrupción cada 500 ms y se entra en
un bucle cerrado infinito.
En este bucle, se mira si la variable muestrea_envia toma el valor 1, si es así, se
saca al módulo Xbee de su modo de bajo consumo, se saca al sensor de su modo de bajo
consumo, se muestrea la Tª, se pone al sensor en modo de bajo consumo, se envía el dato y
se vuelve a poner al módulo Xbee en modo de bajo consumo. Una vez enviado,
muestrea_envia vuelve a valer 0.
La variable muestrea_envia toma el valor 1 cuando el número de interrupciones
realizadas por el timer 1 toma un valor superior a valor de tiempo de muestreo. En ese
momento, la interrupción pone muestrea_envia a 1 y vuelve a inicializar el contador de
interrupciones.
Si muestrea_envia está a 0, el microcontrolador entra en modo de bajo consumo.
Únicamente despertará en la interrupción del Timer1. Volverá a analizar el valor de
muestrea_envia, y si es 0 volverá a modo de bajo consumo,sino, enviará la temperatura.
Este ciclo lo realizará infinitamente.
74
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Interrupción Timer1
Contador_timer1++
Si
No
Contador_alarma=0 Contador_alarma=1
Dispositivo_no_conectado=1 Si contador_timer1>180
Si
Suena alarma Desactiva Alarma
Contador_timer1=0 No
Cargo Timer1
Fin Interrupción
El código es el siguiente:
#int_TIMER1 //Vector de interrupción por TIMER1
(temporizador)
void TIMER1_isr(void)
{
contador_TIMER1++;
if ((alarma==1)&&(activar_alarma==1))
{
if (contador_alarma==1)
{
output_high(PIN_C2);
contador_alarma=0;
}
else
{
if (contador_alarma==0)
{
output_low(PIN_C2);
75
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
contador_alarma=1;
}
}
}
if (contador_TIMER1>180) // 60 segundos (500ms*120=60 segundos)
{
disp_no_conectado=1;
contador_TIMER1=0;
}
set_timer1(0x0BDC); //Carga el timer1
}
Funcionamiento:
En el programa principal se carga el valor del Timer1 con el valor 0xBDC, con lo
que conseguimos que se realice una interrupción cada 500 ms.
Una vez dentro de la interrupción, se incrementa un contador. Cuando este contador
es mayor al valor de 180, significa que no se ha recibido ningún mensaje del módulo
inalámbrico durante más de 60 segundos, por lo que se da la señal de alarma de dispositivo
no conectado.
A su vez, si tenemos la alarma de temperatura activada, cada 500 ms cambia el
estado del zumbador, de activo a inactivo y viceversa, consiguiendo así una señal de
alarma intermitente.
76
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Si (comando=1)
Si
No
dato=getc() dato=getc()
aux=dato
recibido=1
Fin Interrupción
El código es el siguiente:
#int_rda //Vector de interrupcion de la recepcion
de datos
void rda_isr() //por el usart
{
if (comando==1)
{
if (kbhit())
{
dato[indice]= getc(); //Se lee el dato recibido
indice++;
}
}
if (comando==0)
{
if (kbhit())
{
dato[indice]=getc();
77
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
aux[indice]=dato[indice];
indice++;
recibido=1;
}
}
}
Funcionamiento:
Cuando se provoca la interrupción de la UART, en primer lugar miro se el módulo
se encuentra en modo comando, esto significa que está configurando el módulo Xbee. Si es
así, y tambien se da la condición de que la interrupción es provocada por una entrada de
datos, entonces guardo el dato entrante en la variable datos.
78
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Inicio
Inicio LCD
Inicio variables
Inicio Xbee
Inicio Timer1
No
Si (recibido=1) Contador_timer1=0
Si
Si (dato[0]=+) ini_Xbee=0
Si
No
envio t_muestreo
sensor_ok=1
ini_Xbee=1
No envio t_muestreo
ini_Xbee=1
No
sensor_ok=1 Si (dato[0]=z)
Si
No
escribe en LCD la Tª
Ejecuta Alerta()
No dispositivo_no_conectado=0
Mientras (True)
El código es el siguiente:
void main()
{
set_tris_c(00111000); //0 = salida, 1 = entrada
(Pin7,6,5,4,3,2,1,0)
int xbee_ok=0;
int sensor_ok=0;
int ini_xbee=0;
inicio_LCD();
inicio_variables();
inicio_Xbee();
inicio_TIMER1();
do
{
// Si presiona el boton Menu (PIN C3) entra en Menu.
if (input(PIN_C3))
{
if (C3==-1)
C3++;
else{
opciones_menu();
}
}
// Si recibo dato del sensor...
if ((recibido==1))
{
contador_TIMER1=0; // El contador de sensor no
conectado vuelve a cero.
index=0;
// Si recibido la '+', indica que el Xbee del módulo
sensor se está configurando
if (dato[0]=='+')
ini_xbee=0;
// Si recibido la 'x', envio t_muestreo e indico que el
Xbee del módulo sensor está configurado
if (dato[0]=='x')
{
if (xbee_ok==1)
{
sensor_ok=0;
printf("%d",t_muestreo);
80
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
ini_xbee=1;
}
else
{
xbee_ok=1;
printf("%d",t_muestreo);
ini_xbee=1;
}
for (index=0;index<8;index++)
{dato[index]='f';}
}
// Si recibido la 'z', el módulo sensor ha recibido el
tiempo de muestreo
if (dato[0]=='z')
{
sensor_ok=1;
for (index=0;index<8;index++)
{dato[index]='f';}
}
//Si del módulo sensor el Xbee y el sensor están
configurados, recibo la temperatura y la muestro por pantalla.
if ((ini_xbee==1)&&(xbee_ok==1)&&(sensor_ok==1))
{
lcd_putc("\f Temp=");
escribe_dato_lcd();
T_real=((aux[0]-48)*10)+(aux[1]-48)+((aux[3]-
48)*0.1)+((aux[4]-48)*0.01);
alerta();
}
index=0;
T_real=0;
delay_us(15);
recibido=0;
indice=0;
}
if (disp_no_conectado==1)
{
lcd_putc("\fSENSOR NO CONECT\n");
lcd_putc("o BAJA BATERIA\n");
disp_no_conectado=0;
81
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
}
}while (TRUE);
}
Funcionamiento:
En primer lugar, inicio variables, el módulo LCD, el módulo Xbee y el timer 1. Este
último lo configuro para que realice una interrupción cada 500 ms.
Una vez configurado el timer 1 el programa entra en un bucle infinito. Dentro de este
bucle realiza secuencialmente varias acciones:
Si se presiona el botón de menú, entonces entra en la opción menú.
Si se ha recibido un dato, lo compara con varios caracteres:
1- Si es un “+”, significa que el módulo inalámbrico está configurando su módulo
Xbee.
2- Si es una “x” indica que el módulo inalámbrico ha terminado de configurar su
módulo Xbee, en ese momento se envia el valor del tiempo de muestreo que se desea
realizar de la Tª.
3- Si recibe una “z” indica que el módulo inalámbrico ha recibido ese dato
correctamente.
4- Si el módulo inalambrico ha configurado su módulo Xbee y tiene el tiempo de
muestreo, se escribe el dato del sensor por pantalla y se ejecuta la función alerta. Esta
compara la temperatura con un máximo y un mínimo y da una señal de alarma.
82
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Aunque existen en el mercado las pilas tipo botón, de menor tamaño, he considerado
que al ser un prototipo susceptible de mejoras y al que se le podrían añadir nuevos
componentes, la batería a escoger debía estar sobredimensionada.
Características de la pila:
Tensión: 3’6 V
Capacidad: 2600 mA/h
(uA)
Dispositivos Modo Normal Modo bajo consumo
PIC 18LF2525 11 2,50
MCP9804 200 0,10
Xbee 45000 10
Suponiendo que el usuario desea una muestra de temperatura cada minuto, y que
adquirir esa muestra en el peor de los casos conllevará que los componentes funcionen en
modo normal durante menos de un segundo.
Siendo:
Tmn = tiempo (s) funcionamiento en modo normal
Imn = consumo en modo normal
Tbc = tiempo (s) funcionamiento en modo bajo consumo
Ibc = consumo en modo bajo consumo
83
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
84
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
ºC
Sensor Termómetro farmacia error
36,18 36,2 0,02
36,00 36 0,00
36,05 36,1 0,05
36,25 36,2 -0,05
36,34 36,2 -0,14
85
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
4 PLANOS
Nº PLANO Descripción
Plano nº 1 Esquema Módulo 1: Módulo inalámbrico
Plano nº 2 Esquema Módulo 2: Módulo de sobremesa
Plano nº 3 Disposición elementos Módulo 1: Módulo Inalámbrico
Plano nº 4 Disposición de elementos Módulo 2: Módulo de sobremesa
Plano nº 5 Fotografía Módulo 1
Plano nº 6 Fotografía Módulo 2
86
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
V1 + 3V
V1 + 3V U7
V1 + 3V 1 8
SDA SDA Vdd
U6 SCL 2 7
3 SCL A0 6
2 11 4 Alert A1 5
V1 + 3V 3 RA0/AN0 RC0/T1OSO/T1CKI 12 R10 GND A2
4 RA1/AN1 RC1/T1OSI/CCP2 13 R9
RA2/AN2/VREF- RC2/CCP1 10k MCP9804
SWITCH 5 14 SCL 10k
6 RA3/AN3/VREF+ RC3/SCK/SCL 15
RA4/T0CKI RC4/SDI/SDA SDA
7 16
D3 RA5/SS/AN4 RC5/SDO 17
RC6/TX/CK TX
BAT54/SOT 21 18 RX
22 RB0/INT RC7/RX/DT
23 RB1 10
24 RB2 OSC2/CLKOUT
+3 '6V 25 RB3/PGM
V1 26 RB4 V1 + 3V
27 RB5
28 RB6/PGC
RB7/PGD
9 U5
OSC1/CLKIN 1
1 2 Vcc
MCLR/VPP/THV RX Dout
SW5 TX 3
R11 20 Din
V1 + 3V VDD 19 8
10k GND
GND
C6PIC18LF2525
1nF
9
V1 + 3V 10 SLEEP_RQ
GND
XBee
Nº Plano: Plano 1
Título:
Esquema Módulo 1: Módulo inalámbrico
Escala Proyecto: Versión
Monitorización wireless de las constantes
--:-- vitales de un bebé 0
Fecha: 01/06/2011 Hoja 1/1
87
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
V2 U2 LM317/TO220 V2 U3 7805
+9V DC SWITCH 1 D2
1 3 2 1 3
VIN VOUT V1 + 3'2V VIN VOUT V3 +5V
R1 BAT48 R8 1
ADJ
2
330 C1 330 C2 C3 C4
BNC 0.1uF 1uF 1uF 10uF
D1
LED
R2
10k V1 + 3'2V
LS1
2
R12
Q1
NPN BCE BUZZER
10k
J2 LCD_PIN OUT U1
2 11
3 RA0/AN0 RC0/T1OSO/T1CKI 12
4 RA1/AN1 RC1/T1OSI/CCP2 13
RA2/AN2/VREF- RC2/CCP1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
5 14
6 RA3/AN3/VREF+ RC3/SCK/SCL 15
7 RA4/T0CKI RC4/SDI/SDA 16
RA5/SS/AN4 RC5/SDO 17
21 RC6/TX/CK 18 SW1 SW2 SW3
22 RB0/INT RC7/RX/DT R3 R4 R5
23 RB1 10
RB2 OSC2/CLKOUT 10k 10k 10k
24
25 RB3/PGM
V3 +5V RB4
26
27 RB5
R7 28 RB6/PGC
RB7/PGD V1 + 3'2V V1 + 3'2V V1 + 3'2V
10k 9
OSC1/CLKIN RX TX
1
SW4 MCLR/VPP/THV V1 + 3'2V
GND
GND
R6 20
VDD
10k C5 XBee
U4
19
8
1nF PIC18LF2525
1
2 Vcc
RX Dout
V1 + 3'2V TX 3
Din
V1 + 3'2V
9
10 SLEEP_RQ
GND
Nº Plano: Plano 2
Título:
Esquema Módulo 2: Módulo de sobremesa
Escala Proyecto: Versión
Monitorización wireless de las constantes
--:-- vitales de un bebé 0
Fecha: 01/06/2011 Hoja 1/1
88
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Pila 3'6V
Switch
SW5
R11 D3
Port B
C8
Port A
PIC 18LF2525
R10 R9 Sensor
C6
Port C
UART
Xbee
Nº Plano: Plano 3
Título:
Disposición elementos Módulo 1: Módulo Inalámbrico
Escala Proyecto: Versión
Monitorización wireless de las constantes
--:-- vitales de un bebé 0
Fecha: 01/06/2011 Hoja 1/1
89
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
+9 Vdc
C2
R1 D1
+3'2V
C1 Switch1 D2 +3'2V UART
+9V
R8 U2
R6
SW4 R2
Port B
PortB LCD
U1 PIC 18LF2525
PortA
Xbee
R5
SW1
R4
SW2
UART
SW3
C5
R3
Port C
R7
C3
R12 Q1 C4
U3
Buzzer
Nº Plano: Plano 4
Título:
Disposición de elementos Módulo 2: Módulo de sobremesa
Escala Proyecto: Versión
Monitorización wireless de las constantes
--:-- vitales de un bebé 0
Fecha: 01/06/2011 Hoja 1/1
90
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Nº Plano: Plano 5
Título:
Fotografía Módulo 1
Escala Proyecto: Versión
Monitorización wireless de las constantes
--:-- vitales de un bebé 0
Fecha: 01/06/2011 Hoja 1/1
91
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Nº Plano: Plano 6
Título:
Fotografía Módulo 2
Escala Proyecto: Versión
Monitorización wireless de las constantes
--:-- vitales de un bebé 0
Fecha: 01/06/2011 Hoja 1/1
92
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
5 PRESUPUESTO
5.1 Mediciones
Las mediciones son el conjunto de todos los conceptos necesarios para la ejecución del
proyecto, agrupando por separado todas aquellas unidades que sean objeto del mismo
precio.
PRECIOS DESCOMPUESTOS
ITEM UNIDAD DESCRIPCIÓN CANTIDAD Prec. Unitario TOTAL
1 ud Suministro y montaje de OMNICELL - ER14505S - BATERÍA, LITIO, AA, 3'6V, 1 3,64 3,64
2400mAh
(TRES EUROS Y SESENTA Y CUATRO CÉNTIMOS)
(DIECISIETE EUROS)
14 ud Suministro y montaje de LUMBERG - NES/J 135 - MACHO, BAJA TENSIÓN, 1 1,4 1,4
1.35mm.
(UN EURO Y CUARENTA CÉNTIMOS)
94
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
PRECIOS DESCOMPUESTOS
ITEM UNIDAD DESCRIPCIÓN CANTIDAD Prec. Unitario TOTAL
22 ud Suministro y montaje de Interruptor MSP 121C N/A 650mA Negro 1 2,19 2,19
(DOS EUROS CON DIECINUEVE CÉNTIMOS)
95
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
PRECIOS DESCOMPUESTOS
ITEM UNIDAD DESCRIPCIÓN CANTIDAD Prec. Unitario TOTAL
1 ud Suministro y montaje de OMNICELL - ER14505S - BATERÍA, LITIO, AA, 3'6V, 1 3,64 3,64
2400mAh
Material:
ud OMNICELL - ER14505S - BATERÍA, LITIO, AA, 3'6V, 2400mAh 1 3,64 3,64
Mano de obra:
hr Horas trabajadas 0 12 0
Total 3,64
Total 1,53
Total 6,47
Total 1,58
Total 2,02
Total 0,89
Total 0,27
Total 4
96
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
PRECIOS DESCOMPUESTOS
ITEM UNIDAD DESCRIPCIÓN CANTIDAD Prec. Unitario TOTAL
Total 4,15
Total 1,55
Material:
ud módulo Xbee de MaxStream 1mW con chip antena. 1 16,4 16,4
Mano de obra:
hr Horas trabajadas 0,05 12 0,6
Total 17
Total 2,7
Total 1,79
14 ud Suministro y montaje de LUMBERG - NES/J 135 - MACHO, BAJA TENSIÓN, 1 1,4 1,4
1.35mm.
Material:
ud LUMBERG - NES/J 135 - MACHO, BAJA TENSIÓN, 1.35mm. 1 0,8 0,8
Mano de obra:
hr Horas trabajadas 0,05 12 0,6
Total 1,4
Total 0,75
Total 0,75
Total 0,75
97
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
PRECIOS DESCOMPUESTOS
ITEM UNIDAD DESCRIPCIÓN CANTIDAD Prec. Unitario TOTAL
Total 0,75
Total 0,71
Total 0,27
Total 0,61
22 ud Suministro y montaje de Interruptor MSP 121C N/A 650mA Negro 3 2,19 6,57
Material:
ud Interruptor MSP 121C N/A 650mA Negro 1 1,95 1,95
Mano de obra:
hr Horas trabajadas 0,02 12 0,24
Total 2,19
Total 0,49
Total 1,55
Total 1,27
Total 7,33
Total 16
Total 4,6 98
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
5.4 Presupuesto
El presupuesto es el siguiente:
ITEM UNIDAD DESCRIPCIÓN CANTIDAD PRECIO UNITARIO PRECIO TOTAL
99
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
Considero que una producción en masa podría significar una reducción del
presupuesto en un 53%, alcanzando un total de unos 59 euros los dos módulos.
100
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
6 CONCLUSIONES
El objetivo principal de este proyecto ha sido realizar un sistema de monitorización de
la temperatura para bebes wireless. Este tipo de equipos no existen en el mercado actual a
nivel doméstico, aunque si se pueden encontrar aplicaciones específicas a nivel
hospitalario.
Como objetivos secundarios se pretendía conseguir que los equipos diseñados tuviesen
un coste, consumo de energía y tamaño mínimo.
El proyecto ha presentado dos fases bien diferenciadas. Una primera etapa en la que se
ha tenido que decidir la estructura de los módulos, se ha definido el funcionamiento de
ambos y se han escogido los componentes adecuados. Y una segunda etapa en la que se ha
realizado la implementación en una versión de prototipo de los módulos y se ha
comprobado su funcionamiento.
101
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
La muerte súbita causa múltiples muertes en los bebés así como en los deportistas de
élite. Los módulos multisensor podrían avisar al personal médico cuando alguna de las
constantes vitales comenzasen a fallar, anticipándose el personal médico a la muerte súbita.
A nivel personal he decidido realizar este proyecto ya que considero que una de las
vías hacia una mejor atención sanitaria tanto a nivel hospitalario como doméstico, se
realiza a través de la prevención y la vigilancia estrecha de las constantes vitales de los
bebés y pacientes.
Por este motivo he pretendido desarrollar una herramienta que facilite a los padres la
vigilancia de sus bebés cuando estos se encuentren enfermos.
102
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
7 ANEXOS
#include <18F2525.h>
#device adc=10//La resolución del módulo A/D es de 8 bits.
// SIN RELOJ EXTERNO
#fuses INTRC_IO,PUT,BROWNOUT,NOWDT,NOPROTECT,NOLVP,NOMCLR,NOLVP
#use delay(clock=4000000)
#use RS232(BAUD=9600,XMIT=PIN_C6,RCV=PIN_C7)
#use i2c(master,sda=PIN_C4,scl=PIN_C3,FORCE_HW)
// LIBRERIAS
#include <stdlib.h>
// DECLARO FUNCIONES
void inicio_Xbee();
void inicio_TIMER1();
void muestrea();
void envia();
void convierte_a_T();
// DECLARO VARIABLES
int contador_TIMER1;
int muestrea_envia;
int indice;
int Upper_data;
int Low_data;
float T;
int dato_recibido;
char dato[8];
char aux[8];
int tiempo_de_muestreo;
int indi;
// DECLARO REGISTROS
#byte OSCCON=0xFD3 //Registro configuración modo sleep()
#bit IDLE=OSCCON.7
#bit SCS1=OSCCON.1
#bit SCS2=OSCCON.0
// DECLARO INTERRUPCIONES
103
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
//FUNCION PRINCIPAL
void main()
{
dato_recibido=0;
indice=0;
indi=0;
inicio_Xbee();
while (dato_recibido==0)
{}
printf("z"); // señal para el coordinador de fin de
configuracion
delay_ms(1000);
tiempo_de_muestreo=((aux[0]-48)*10)+(aux[1]-48);
delay_ms(1000);
muestrea();
104
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
envia();
inicio_TIMER1();
do
{
if (muestrea_envia==1)
{
output_low(PIN_C5); // PIN_C5 está conectado al SLEEP_RQ del
XBee, si C5=0, lo despierta
delay_ms(20); // El Xbee tarda 13'2 ms en despertarse,
espero 20 ms
muestrea();
envia();
output_high(PIN_C5); // Si C5=1->SLEEP_RQ=1, Xbee entra en modo
sleep (<10 uA de consumo)
muestrea_envia=0;
}
else
{
SCS1=1;
SCS2=0;
IDLE=1;
sleep(); // Duermo el microcontrolador pero dejo
funcionando el TIMER1, cuando provoque interrupción despierta.
}
}while (TRUE);
}
//FUNCIONES
void convierte_a_T()
{
//T = Temperatura ambiente ( ºC)
T=0;
if (bit_test(Low_data,0))
{T=T+0.0625;}
if (bit_test(Low_data,1))
{T=T+0.125;}
if (bit_test(Low_data,2))
{T=T+0.25;}
if (bit_test(Low_data,3))
{T=T+0.5;}
105
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
if (bit_test(Low_data,4))
{T=T+1;}
if (bit_test(Low_data,5))
{T=T+2;}
if (bit_test(Low_data,6))
{T=T+4;}
if (bit_test(Low_data,7))
{T=T+8;}
if (bit_test(Upper_data,0))
{T=T+16;}
if (bit_test(Upper_data,1))
{T=T+32;}
if (bit_test(Upper_data,2))
{T=T+64;}
if (bit_test(Upper_data,3))
{T=T+128;}
}
void envia()
{
printf("%2.2f",T);
printf("f");
}
void muestrea()
{
// Dirección sensor - lectura : 0x3F
// Dirección sesnor - escritura: 0x3E
// Config register - 0x01
i2c_start(); // Inicio comunicación
i2c_write(0x3E); // Dirección escritura
i2c_write(0x01); // Dirección Conig register
i2c_write(0x00); // Sensor en modo continuo
i2c_write(0x00);
i2c_stop();
delay_ms(5); // Fin trama
// Resolution register - 0x08
i2c_start(); // Inicio comunicación
i2c_write(0x3E); // Dirección escritura
106
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
void inicio_TIMER1()
{
contador_TIMER1=0;
muestrea_envia=0;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //Setup timer: Reloj interno,
preescaler= 8
enable_interrupts(INT_TIMER1); //Habilito interrupción
particular del TIMER1
enable_interrupts(GLOBAL); //Habilito interrupciones
globales
// Desbordamiento_TIMER1=(4/frecuencia_oscilador)*Preescaler*(65536-TMR1)
// Provocamos un desbordamiento del TIMER1 cada 500 ms.
107
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
108
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
// LIBRERIAS
#include "lcd_mod.c"
#include <stdlib.h>
#include <internal_eeprom.c>
// Valores predeterminados
float const Tmax_default_valor=38.00; // valor predeterminado como
máxima temperatura para alarma
float const Tmin_default_valor=35.50; // valor predeterminado como
minima temperatura para alarma
int const Sample_default_valor=60; // valor mediante el cual se
configura el tiempo de muestreo 60*500ms=30s
int const Tmax_default_adress=0x0A; // dirección de EEPROM donde se
guarda la Tª maxima elegida por el usuario
int const Tmin_default_adress=0x14; // dirección de EEPROM donde se
guarda la Tª minima elegida por el usuario
int const Sample_default_adress=0x1E; // dirección de EEPROM donde
se guarda el tiempo de muestreo de la Tª
long const pulsacion=300; // tiempo en ms que espera para
evitar rebotes en los pulsadores
int const primer_adress=0x28; // direccion donde guardo si el
programa se ejecuta por primera vez
// DECLARO FUNCIONES
109
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
void inicio_LCD();
void inicio_Xbee();
void inicio_variables();
void escribe_dato_LCD();
void opciones_menu();
void t_config();
void inicio_TIMER1();
void alerta();
void activar_al();
void termometro();
// DECLARO VARIABLES
char dato[8];
char aux[8];
int fin_mensaje;
int fin;
int respuesta;
int indice;
int index;
int comando;
int temperatura;
int recibido;
int menu;
float T_max;
float T_min;
float T_real;
int alarma;
int aceptar_opcion;
int salir;
int temp_maxima;
long C3;
int contador_TIMER1;
int disp_no_conectado;
int comienza;
int contador_alarma;
int activar_alarma;
int t_muestreo;
int ini_xbee;
// DECLARO INTERRUPCIONES
110
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
111
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
}
if (comando==0)
{
if (kbhit())
{
dato[indice]=getc();
aux[indice]=dato[indice];
indice++;
recibido=1;
}
}
}
//PROGRAMA PRINCIPAL
void main()
{
set_tris_c(00111000); //0 = salida, 1 = entrada (Pin7,6,5,4,3,2,1,0)
int xbee_ok=0;
int sensor_ok=0;
int ini_xbee=0;
inicio_LCD();
inicio_variables();
inicio_Xbee();
inicio_TIMER1();
do
{
// Si presiona el boton Menu (PIN C3) entra en Menu.
if (input(PIN_C3))
{
if (C3==-1)
C3++;
else{
opciones_menu();
}
}
// Si recibo dato del sensor...
if ((recibido==1))
{
contador_TIMER1=0; // El contador de sensor no conectado
vuelve a cero.
112
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
index=0;
// Si recibido la '+', indica que el Xbee del módulo sensor
se está configurando
if (dato[0]=='+')
ini_xbee=0;
// Si recibido la 'x', envio t_muestreo e indico que el Xbee
del módulo sensor está configurado
if (dato[0]=='x')
{
if (xbee_ok==1)
{
sensor_ok=0;
printf("%d",t_muestreo);
ini_xbee=1;
}
else
{
xbee_ok=1;
printf("%d",t_muestreo);
ini_xbee=1;
}
for (index=0;index<8;index++)
{dato[index]='f';}
}
// Si recibido la 'z', el módulo sensor ha recibido el tiempo
de muestreo
if (dato[0]=='z')
{
sensor_ok=1;
for (index=0;index<8;index++)
{dato[index]='f';}
}
//Si del módulo sensor el Xbee y el sensor están
configurados, recibo la temperatura y la muestro por pantalla.
if ((ini_xbee==1)&&(xbee_ok==1)&&(sensor_ok==1))
{
lcd_putc("\f Temp=");
escribe_dato_lcd();
T_real=((aux[0]-48)*10)+(aux[1]-48)+((aux[3]-
48)*0.1)+((aux[4]-48)*0.01);
alerta();
113
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
}
index=0;
T_real=0;
delay_us(15);
recibido=0;
indice=0;
}
if (disp_no_conectado==1)
{
lcd_putc("\fSENSOR NO CONECT\n");
lcd_putc("o BAJA BATERIA\n");
disp_no_conectado=0;
}
}while (TRUE);
}
// FUNCIONES
void alerta()
{
if (T_real<T_min)
{
alarma=1;
lcd_putc("\n TEMP.BAJA!");
}
else
{
if (T_real>t_max)
{
alarma=1;
lcd_putc("\n TEMP.ALTA!");
}
else
{
alarma=0;
lcd_putc("\n TEMP.OK");
}
}
}
114
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
void inicio_TIMER1()
{
contador_TIMER1=0;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //Setup timer: Reloj interno,
preescaler= 8
enable_interrupts(INT_TIMER1); //Habilito interrupción
particular del TIMER1
enable_interrupts(GLOBAL); //Habilito interrupciones
globales
// Desbordamiento_TIMER1=(4/frecuencia_oscilador)*Preescaler*(65536-TMR1)
// Provocamos un desbordamiento del TIMER1 cada 500 ms.
set_timer1(0x0BDC);//Carga del TMR1 con el valor 3036, 0x0BDC en
hexadecimal
}
void inicio_LCD()
{
delay_ms(1000);
lcd_init();
lcd_putc("\fXBee Coordinador\n");
delay_ms(2000);
}
void inicio_Xbee()
{
lcd_putc("\fSetup: uC-->XBee\n");
delay_ms(1000);
enable_interrupts(int_rda);
enable_interrupts(global);
comando=1;
//Entro en modo comando
printf("+++");
delay_ms(1500);
printf (lcd_putc,"\f%d)+++\n ",comando);
indice=0;
escribe_dato_LCD();
//La dirección del módulo es AAAA
printf("ATMYAAAA\r");
delay_ms(1500);
printf (lcd_putc,"\fATMYAAAA\n");
115
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
indice=0;
escribe_dato_LCD();
// La dirección del módulo de destino es 0xBBBB
printf("ATDLBBBB\r");
delay_ms(1500);
printf (lcd_putc,"\fATDLBBBB\n");
indice=0;
escribe_dato_LCD();
// La PAN ID es 0x3332
printf("ATID3332\r");
delay_ms(1500);
printf (lcd_putc,"\fATID3332\n");
indice=0;
escribe_dato_LCD();
// Comunicación entre el HOST y el MODEM es 9600 baudios
printf("ATBD3\r");
delay_ms(1500);
printf (lcd_putc,"\fATBD3\n");
indice=0;
escribe_dato_LCD();
// Se elige el canal 0x0C, canal 12.
printf("ATCHC\r");
delay_ms(1500);
printf (lcd_putc,"\fATCHC\n");
indice=0;
escribe_dato_LCD();
// Graba todos los parámetros en memoria
printf("ATWR\r");
delay_ms(1000);
printf (lcd_putc,"\fATWR\n");
indice=0;
escribe_dato_LCD();
// Sale del modo comando
printf("ATCN\r\f");
delay_ms(1000);
printf (lcd_putc,"\fATCN\n");
indice=0;
escribe_dato_LCD();
delay_ms(1000);
comando=0;
116
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
lcd_putc("\f.esperando dato.\n");
}
void escribe_dato_LCD()
{
index=0;
for (index=0;index<8;index++)
{
if (dato[index]!='f')
{
printf (lcd_putc,"%c",dato[index]);
dato[index]='f';
}
}
}
void inicio_variables()
{
activar_alarma=0;
contador_alarma=0;
aceptar_opcion=0;
C3=-1;
menu=0;
fin=0;
recibido=0;
temperatura=0;
fin_mensaje=0;
comando=1;
index=0;
indice=0;
respuesta=0;
// Inicializo las temperaturas máxima y mínima de alarma. Un byte
de la eeprom viene de fábrica con valor entero -1. Leo una posición de
memoria a la que llamo
// "primer", si vale -1 es que se ejecuta por primera vez el
programa y cargo las temperaturas iniciales, si es diferente de -1, cargo
las que tenga guardada la eeprom.
int primer;
primer=read_eeprom(primer_adress);
if (primer==-1)
{
117
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
write_float_eeprom(Tmax_default_adress,Tmax_default_valor);
write_float_eeprom(Tmin_default_adress,Tmin_default_valor);
write_eeprom(Sample_default_adress,Sample_default_valor);
T_max=read_float_eeprom(Tmax_default_adress);
T_min=read_float_eeprom(Tmin_default_adress);
t_muestreo=read_eeprom(Sample_default_adress);
write_eeprom(primer_adress,5);
}
else
{
T_max=read_float_eeprom(Tmax_default_adress);
T_min=read_float_eeprom(Tmin_default_adress);
t_muestreo=read_eeprom(Sample_default_adress);
}
alarma=0;
disp_no_conectado=0;
for (index=0;index<8;index++)
{ dato[index]='f';
}
index=0;
comienza=0;
}
void opciones_menu()
{
lcd_putc("\fConfiguracion: \n");
long C4, C5;
long opcion, sig, prev;
int aceptar;
C3=-1;
C4=-1;
C5=-1;
opcion=100;
sig=10;
prev=10;
aceptar=0;
menu=1;
do
{
if (input (PIN_C3))
118
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
{
if (C3==-1)
C3++;
else
aceptar=1;
}
if (input (PIN_C4))
{
if (C4==-1)
C4++;
else
opcion=opcion+sig;
}
if (input (PIN_C5))
{
if (C5==-1)
C5++;
else
opcion=opcion-prev;
}
switch (opcion){
case 100:
lcd_gotoxy(1,2);
lcd_putc("1/4-> Alarma ");
delay_ms(pulsacion);
if (aceptar==0){
prev=-40;
sig=10;}
else{
opcion=101;
aceptar=0;}
break;
case 101:
lcd_gotoxy(1,2);
lcd_putc("1/4->T. Max: ");
delay_ms(pulsacion);
prev=-3;
sig=1;
if (aceptar==1){
temp_maxima=1;
119
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
t_config();
aceptar=0;}
break;
case 102:
lcd_gotoxy(1,2);
lcd_putc("2/4->T. Min: ");
delay_ms(pulsacion);
prev=1;
sig=1;
if (aceptar==1){
temp_maxima=0;
t_config();
aceptar=0;}
break;
case 103:
lcd_gotoxy(1,2);
lcd_putc("3/4->Act Alarma ");
delay_ms(pulsacion);
if (aceptar==0){
prev=1;
sig=1;}
else {
activar_al();
aceptar=0;}
break;
case 104:
lcd_gotoxy(1,2);
lcd_putc("4/4-> Salir ");
delay_ms(pulsacion);
if (aceptar==0){
prev=1;
sig=-3;}
else {
opcion=100;
aceptar=0;}
break;
case 120:
lcd_gotoxy(1,2);
lcd_putc("2/4->Termometro ");
delay_ms(pulsacion);
120
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
if (aceptar==0){
prev=10;
sig=10;}
else {
termometro();
aceptar=0;}
break;
case 130:
lcd_gotoxy(1,2);
lcd_putc("3/4->Save conf. ");
delay_ms(pulsacion);
if (aceptar==0){
prev=10;
sig=10;}
else{
write_float_eeprom(Tmax_default_adress,T_max);
delay_ms(2);
write_float_eeprom(Tmin_default_adress,T_min);
delay_ms(2);
write_eeprom(Sample_default_adress,t_muestreo);
delay_ms(2);
lcd_gotoxy(1,2);
lcd_putc("2/3-> SALVADO! ");
delay_ms(2000);
lcd_gotoxy(1,2);
int segundo;
segundo=(t_muestreo/10)*5;
printf (lcd_putc,"%f,%f,%ds ",T_max,T_min,segundo);
delay_ms(2000);
opcion=120;
aceptar=0;
}
break;
case 140:
lcd_gotoxy(1,2);
lcd_putc("4/4-> Salir ");
delay_ms(pulsacion);
if (aceptar==0){
prev=10;
sig=-40;}
121
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
else{
menu=0;
aceptar=0;
}
break;
default:
break;}
}while (menu==1);
lcd_gotoxy(1,2);
lcd_putc("Fin Menu ");
delay_ms(3000);
lcd_putc("\f.esperando dato.\n");
C3=0;
}
void activar_al()
{
long C4, C5;
C3=-1;
C4=-1;
C5=-1;
salir=1;
do {
if (input (PIN_C3))
{
if (C3==-1)
C3++;
else{
salir=0;
delay_ms(pulsacion);}
}
if (input (PIN_C4))
{
if (C4==-1)
C4++;
else{
if (activar_alarma==0)
{
activar_alarma=1;
}
122
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
else
{
activar_alarma=0;
output_low(PIN_C2);
}
delay_ms(pulsacion);}
}
if (input (PIN_C5))
{
if (C5==-1)
C5++;
else{
if (activar_alarma==0)
{
activar_alarma=1;
}
else
{
activar_alarma=0;
output_low(PIN_C2);
}
delay_ms(pulsacion);}
}
if (activar_alarma==0)
{
lcd_gotoxy(1,2);
lcd_putc("Alarma = NO ");
}
else
{
lcd_gotoxy(1,2);
lcd_putc("Alarma = SI ");
}
}while (salir);
123
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
void t_config()
{
long C4, C5;
C3=-1;
C4=-1;
C5=-1;
if (temp_maxima) // Configuro la variable de la temperatura máxima.
{
salir=1;
do {
if (input (PIN_C3))
{
if (C3==-1)
C3++;
else{
salir=0;
delay_ms(pulsacion);}
}
if (input (PIN_C4))
{
if (C4==-1)
C4++;
else{
T_max=T_max+0.1;
delay_ms(200);}
}
if (input (PIN_C5))
{
if (C5==-1)
C5++;
else{
T_max=T_max-0.1;
delay_ms(pulsacion);}
}
lcd_gotoxy(1,2);
printf (lcd_putc,"T.Max Al.=%f",T_max);
}while (salir);
}
124
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
void termometro()
{
long C4, C5;
int segundos;
C3=-1;
C4=-1;
125
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
C5=-1;
salir=1;
do {
if (input (PIN_C3))
{
if (C3==-1)
C3++;
else{
salir=0;
delay_ms(pulsacion);}
}
if (input (PIN_C4))
{
if (C4==-1)
C4++;
else{
t_muestreo=t_muestreo+10;
delay_ms(200);
if (t_muestreo>120)
t_muestreo=10;
}
}
if (input (PIN_C5))
{
if (C5==-1)
C5++;
else{
t_muestreo=t_muestreo-10;
delay_ms(pulsacion);
if (t_muestreo<10)
t_muestreo=120;
}
}
segundos=(t_muestreo/10)*5;
lcd_gotoxy(1,2);
printf (lcd_putc,"T. temp(s)= %d ",segundos);
}while (salir);
}
126
Monitorización Wireless Constantes Vitalesde un bebé Automática y Electrónica Industrial
7.3 Ficheros
En el cd adjunto al proyecto se encuentran todos los ficheros de programación así
como las hojas de características técnicas de los equipos empleados.
127