Está en la página 1de 178

IMPLEMENTACIÓN DE UN MÓDULO BASADO EN TECNOLOGÍA RFID

PARA LA EMULACIÓN DEL SUMINISTRO DE MEDICAMENTOS,


RECONOCIMIENTO Y RESPECTIVA REACCIÓN, EN UN MANIQUÍ DE
ENTRENAMIENTO MÉDICO.

LOREANA ARRIGHI QUINTERO

DANIEL EDUARDO FONSECA HIDALGO

UNIVERSIDAD NACIONAL DE COLOMBIA

FACULTAD DE INGENIERÍA

DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

BOGOTÁ

2009
IMPLEMENTACIÓN DE UN MÓDULO BASADO EN TECNOLOGÍA RFID
PARA LA EMULACIÓN DEL SUMINISTRO DE MEDICAMENTOS,
RECONOCIMIENTO Y RESPECTIVA REACCIÓN, EN UN MANIQUÍ DE
ENTRENAMIENTO MÉDICO.

LOREANA ARRIGHI QUINTERO

DANIEL EDUARDO FONSECA HIDALGO

TRABAJO DE GRADO

DIRECTOR: JHON JAIRO RAMIREZ ECHEVERRY

UNIVERSIDAD NACIONAL DE COLOMBIA

FACULTAD DE INGENIERÍA

DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

BOGOTÁ

2009

 
A nuestros padres, hermanos, familiares y amigos…

 
AGRADECIMIENTOS

Los autores expresan sus agradecimientos a:

El ingeniero Jhon Jairo Ramírez, por su apoyo y por darnos ánimo para
realizar este proyecto que esperamos contribuya a un mejor entrenamiento
de médicos en nuestra universidad.

El doctor Luis Carlos Méndez Córdoba, por brindarnos su ayuda e interés en


el trabajo interdisciplinario y por hacernos reflexionar acerca de las grandes
cosas que podemos hacer como ingenieros electrónicos.

Al grupo de comunicaciones, CMUN, en cabeza del ingeniero John Jairo


Ramírez y el ingeniero Julián Herrera, por ser un espacio de investigación y
de asesoría para muchos estudiantes que buscan aplicar todo su potencial
investigativo en grandes proyectos.

Ahora, después de cinco años debemos mencionar a nuestras familias, en


especial a: Marysol, Betty, Felipe Alberto, Eduardo, Ale, Caro y Felipe
Andrés. Muchas gracias por: comprendernos, asesorarnos, preocuparse por
nosotros, darnos ánimo, y estar presentes en ésta nueva etapa.

A nuestros amigos, los queremos mucho.

 
CONTENIDO

Pág.

INTRODUCCIÓN 20

1. MARCO TEÓRICO 22

1.1 QUE ES RFID? 22

1.2 RFID EN COLOMBIA 23

1.2.1 Tipos de Tarjetas de RFID 25

1.2.1.1 Lectores de RFID 27

1.3 PROYECTO POSGRADO UNAL 28

2. DESCRIPCIÓN DEL PROYECTO 29

2.1 RESUMEN GRÁFICO Y ELEMENTOS UTILIZADOS 29

2.2 DESCRIPCIÓN ELEMENTOS RFID UTILIZADOS 30

 
2.2.1 HF Mifare Plug and Play 31

2.2.2 Tarjeta (Microchip) 33

2.2.3 Pruebas iníciales de Programación de los elementos de RFID 36

2.3 DESCRIPCIÓN MÓDULOS DE TRANSMISIÓN INALÁMBRICA 43

2.4 DESCRIPCIÓN DEL SENSOR 46

3. MEDICAMENTOS Y DOSIS SELECCIONADAS 49

4. BLOQUES DE FUNCIONAMIENTO DEL MÓDULO A IMPLEMENTAR


58

4.1 BLOQUE 1: PROGRAMADOR DE MEDICAMENTOS. 59

4.1.1 Descripción de la programación en LabView. 62

4.1.2 Programación de los microcontroladores (MICRO 1 y MICRO 2) 73

4.2. BLOQUE 2: APLICADOR 83

4.2.1 Programación del microcontrolador 84

4.3 BLOQUE 3: IDENTIFICADOR (MANIQUÍ) 93

 
4.3.1 Reacciones 96

4.3.1.1 Frecuencia cardiaca 96

4.3.1.2 Temperatura corporal 99

4.3.1.3 Rubicundez 103

4.3.2 Programación microcontrolador (Control lector) 104

4.3.3 Programación microcontrolador (Reacciones) 112

5. HARDWARE IMPLEMENTADO 118

5.1 BLOQUE 1: PROGRAMADOR DE MEDICAMENTOS 118

5.2 BLOQUE 2: APLICADOR (JERINGA) 124

5.3 BLOQUE 3: IDENTIFICADOR (MANIQUÍ) 126

6. RESULTADOS 131

6.1 BLOQUE 1: PROGRAMADOR DE MEDICAMENTOS 131

6.2 BLOQUE 2: APLICADOR (JERINGA) 137

6.3 BLOQUE 3: IDENTIFICADOR (MANIQUÍ) 139

 
6.4 COSTO TOTAL DEL MÓDULO REALIZADO 141

7. CONCLUSIONES 143

8. RECOMENDACIONES 145

BIBLIOGRAFÍA 146

 
LISTA DE TABLAS

Pág.

Tabla 1. Propiedades del módulo Plug and Play 32

Tabla 2. Medicinas seleccionadas inicialmente 50

Tabla 3. Signos vitales de un neonato sano 53

Tabla4. Tabla de medicamentos seleccionados y su dosis. 55

Tabla 5. Parámetros para almacenar la información en el TAG 64

Tabla 6.Algoritmo de ingreso al TAG 64

Tabla 7. Codificación peso 68

Tabla 8. Decodificación datos obtenidos segunda estación 70

Tabla 9. Configuraciones posibles UCSZ en ATmega8 79

Tabla 10. Configuraciones posibles UPM en ATmega8 79

Tabla 11. Configuraciones posibles UMSEL en ATmega8 79


 
Tabla 12. Ejemplos de los valores UBRR en las frecuencias de oscilación
más comúnmente usadas. 81

Tabla 13. Configuraciones de los bits MUX. 86

Tabla 14. Configuración valores REFS. 87

Tabla 15. Configuraciones ADPS en el ATmega8. 88

Tabla 16. Configuraciones ADTS en el ATmega8. 90

Tabla 17. Tabla de medicamentos 94

Tabla18. Pines LCD 16x2. 100

Tabla 19. Comandos LCD 16 x2. 101

Tabla 20. Instrucciones varias LCD 16x2. 103

Tabla 21. Codificación ASCII. 105

Tabla 22. Decodificación microcontrolador que controla Lector de RFID. 108

Tabla 23. Tabla estados futuros con base en estado actual. 110

Tabla 24. Costo del módulo implementado 142

 
LISTA DE FIGURAS

Pág.

Figura 1. Bloques Básicos de un sistema RFID. Fuente LARAN RFID 22

Figura 2. Esquema del proyecto propuesto 29

Figura 3. OEM reader y Módulo HF Mifare Plug and Play 32

Figura 4. Estructura interna de la tarjeta de RFID utilizada 33

Figura 5. Organización de la memoria EEPROM del chip MF1ISC50. 34

Figura 6. Diagrama de flujo acceso al TAG 36

Figura 7. Configuración del protocolo serial 37

Figura 8. Acceso a los sectores y bloques del TAG 37

Figura 9. Diagrama de Bloques configuración del puerto 40

Figura 10. Panel Frontal, control de variables. 40

Figura 11. Estructura para enviar dato al módulo. (Escritura del puerto) 41

Figura 12. Estructura para leer dato al módulo. (Lectura del puerto) 42

 
Figura 13. Lectura del Puerto 42

Figura 14. Frecuencias comerciales asignadas 43

Figura 15. Modulación ASK. 44

Figura 16. Transmisor TLP434 45

Figura 17. Receptor RLP434 45

Figura18. Diagrama funcional UGN3503 47

Figura19. Montaje jeringa 48

Figura20. Diagrama de Bloques del modulo a implementar 58

Figura 21. Interfaz Gráfica implementada en LabView® para el Programador


de medicamentos 61

Figura 22. Estructura “Case” utilizada para el envío de cadena de caracteres


correspondiente al tipo de medicamento. 65

Figura 23. Estructura “Case” utilizada para el envío de cadena de caracteres


correspondiente a la cantidad de medicamento. 66

Figura 24. Estructura “Case” utilizada para el envío de cadena de caracteres


correspondiente al peso del neonato. 68

 
Figura 25. Concatenación de las cadenas que forman la instrucción final que
se envía al módulo lector de RFID para escribir la información en la tarjeta de
RFID. 69

Figura 26. Elementos que permiten realizar la lectura de la Tarjeta DAQ. 70

Figura 27. Proceso de envío de la instrucción al puerto RS232. 71

Figura 28. Proceso para reconocer el estado futuro del neonato de acuerdo a
la medicina programada. 72

Figura 29. Formato de trama (ATMEL ATmega8 datasheet) 74

Figura 30. Registros del USART en ATmega8 76

Figura 31. Registro UDR en ATmega8 80

Figura 32. Diagrama de flujo del proceso realizado en MICRO 1 y MICRO 2


82

Figura 33. Efecto bit ADLAR sobre conversión 86

Figura 34. Jeringa a escala y valores enviados al bloque 1 teniendo como


referencia voltaje de salida del sensor. 91

Figura 35. Diagrama de flujo de MICRO 3. 93

Figura 36. Circuito preliminar 97

 
Figura 37. LM555 como oscilador monoestable. 97

Figura 38. Circuito implementado que simula sonido del corazón 99

Figura 39. Configuración típica del MAX 232. 104

Figura 40. Diagrama de flujo microcontrolador Control de Lector De RFID.


107

Figura 41. Interfaz que indica estado de salud del neonato. 117

Figura 42. Diagrama de flujo microcontrolador REACCIONES 117

Figura 43. Dimensiones y conectores del módulo lector de RFID. 120

Figura 44. Circuito Impreso del circuito que alimenta y comunica al módulo de
RFID con el computador. 121

Figura 45. Circuito en 3D del circuito que alimenta y comunica al módulo de


RFID con el computador. 122

Figura 46. Layout del circuito que receptor de la información proveniente del
aplicador o del maniquí. 123

Figura 47. Circuito en 3D del receptor de la información proveniente del


aplicador o del maniquí. 123

Figura 48. Tarjeta de adquisición de datos utilizada (De National


Instruments). 124

 
Figura 49. Esquemático del circuito implementado en el aplicador (Jeringa)
125

Figura 50. PCB del circuito del aplicador 125

Figura 51. Circuito del aplicador en 3D 126

Figura 52. Esquemático del circuito controlador del módulo lector de RFID en
el maniquí. 127

Figura 53. PCB del circuito controlador del módulo lector de RFID en el
maniquí. 128

Figura 54. PCB del circuito controlador del módulo lector de RFID en el
maniquí. 128

Figura 55. Esquemático del circuito de las reacciones. 129

Figura 56.PCB del circuito de las reacciones. 130

Figura 57. Esquemático del circuito de las reacciones. 130

Figura 58. Interfaz del programador de medicamentos en LabView ® 133

Figura 59. Caja del programador de RFID 134

Figura 60. Contenido de la caja del programador de medicamentos 134

Figura 61. Programación del TAG 135

Figura 62. Caja de adquisición de datos. 136

 
Figura 63. Bloque 1: PROGRAMADOR DE MEDICAMENTOS. 136

Figura 64. Bloque aplicador 137

Figura 65. Escala de la jeringa. 138

Figura 66. ATmega 8 en la jeringa. 138

Figura 67. Modo de administración de los medicamentos. 139

Figura 68. Pantalla de cristal líquido que indica la temperatura y la frecuencia


cardiaca. 140

Figura 69. Rubicundez en el recién nacido. 141

 
LISTA DE ANEXOS

Anexo A. Programa microcontrolador MICRO 1

Anexo B. Programa microcontrolador MICRO 2

Anexo C. Programa microcontrolador MICRO 3

Anexo D. Programa microcontrolador Control Lector

Anexo E. Programa microcontrolador Reacciones

Anexo F. Datasheet ATmega16

Anexo G. Datasheet ATmega8

Anexo H. Datasheet LM555

Anexo I. Datasheet CD4007

Anexo J. Datasheet módulos RF

 
RESUMEN

En la Universidad Nacional de Colombia, los estudiantes de medicina que


hacen parte del equipo de atención neonatal pasan por un proceso de
enseñanza que debe enfrentarse de la misma manera que ocurre en la
realidad, siendo los equipos de simulación una herramienta primordial para
acercarlos a este ambiente durante la realización de sus prácticas previas al
contacto directo con los pacientes de los hospitales. Los maniquís de
entrenamiento médico hacen parte de los modelos utilizados actualmente
para esta tarea, sin embargo, tienen funciones limitadas en cuanto a la
emulación de algunos procedimientos como las reacciones físicas frente al
suministro de medicamentos. Este proyecto presenta una solución adaptada
a dicha limitante mediante la implementación de un módulo basado en
tecnología RFID en el que será la jeringa el objeto portador de la información
del tipo de medicina y dosis que se programará en una etiqueta electrónica
(TAG). Así pues, los procedimientos principales que un estudiante debe
realizar para utilizar el módulo están relacionados con la selección y
aplicación de dicho medicamento en el maniquí de entrenamiento.
Entendiendo por selección el proceso por medio del cual se carga la
inyección (se programa el TAG), y por aplicación, el proceso por medio del
cual se acerca la jeringa al maniquí y se simula que se está inyectando el
medicamento, momento en el cual gracias a que el simulador físico contará
con un lector de RFID, se podrá realizar el reconocimiento y posteriormente
evidenciar la respectiva reacción.

 
INTRODUCCIÓN

El entrenamiento de estudiantes de áreas de la salud en suministro de


medicamentos es de vital importancia ya que si no se realiza de manera
apropiada por parte de los practicantes, puede llevar a desenlaces fatales
1
. Dentro de los errores adversos más frecuentes se encuentra la
2
utilización de droga o dosis equivocada , y esto puede ser prevenido por
medio de un adiestramiento adecuado con el uso de simuladores. Por otro
lado, estas herramientas de entrenamiento son primordiales para
incrementar la autoconfianza en los alumnos y para que los docentes
tengan la oportunidad de evaluar a los estudiantes antes de que éstos se
enfrenten a situaciones críticas en los hospitales.

El proyecto descrito en este documento hace parte de un trabajo


interdisciplinario que actualmente se lleva a cabo en la Universidad
Nacional de Colombia entre las Facultades de Ingeniería y Medicina de la
Universidad Nacional de Colombia, el cual tiene como objetivo desarrollar
un sistema de simulación interactivo compuesto de software, modelo
virtual y prototipo físico de un paciente para entrenamiento de estudiantes
de atención neonatal. La implementación del módulo propuesto en este
proyecto, que corresponde a una parte del prototipo físico ya mencionado,
podrá contar con las funciones de reconocimiento y reacción del maniquí
frente a los medicamentos que le sean suministrados basado en el
comportamiento real de un recién nacido que se encuentre expuesto a los
mismos procedimientos.
                                                            
1
Noticia titulada: Gobierno pide a la Fiscalía que investigue la muerte de una niña por presunto error médico, enero
31 de 2008. Fuente: http://www.caracol.com.co/nota.aspx?id=542017
2
Orlando Gracia, M.D; Vicepresidente de OLSEP (Organización para la seguridad del paciente) para Latinoamérica
en su presentación: http://www.planwebexpress.com/sitios/114/doc-154.pdf

 
Para hacer esto posible, se está utilizando un sistema basado en
tecnología de RFID en el que la información referente al tipo y cantidad de
medicamento a suministrar serán los datos identificados por el maniquí de
entrenamiento, una vez que éste realiza el proceso de reconocimiento de
dicha información tendrá algunas señales que representen la reacción o
efecto que dicho medicamento tiene en su estado de salud.

 
1. MARCO TEÓRICO

1.1 QUE ES RFID?

RFID, es una tecnología de comunicación inalámbrica que se utiliza para


identificar objetos, personas o dispositivos que posean una etiqueta que
contenga información única o específica que identifica al ente que lo porta.
En general, un sistema de RFID (Identificación por radiofrecuencia) como el
que se muestra en la figura 1, se compone de los siguientes elementos. Un
controlador que puede ser un computador o una estación de trabajo, que
cuenta con programas de software desarrollados de manera específica en
donde se concentran los datos capturados de la(s) etiqueta(s) para luego
procesarlos de una forma conveniente para la aplicación.

Figura 1. Bloques Básicos de un sistema RFID. Fuente LARAN RFID

Un interrogador (Lector/escritor o programador) que está compuesto de una


antena, un módulo de RF y uno de control electrónico; es el elemento que
básicamente, se comunica con la etiqueta (TAG) y captura o programa la
 
información que éste contenga, generalmente se integran en el sistema a
través de un ordenador o CPU por medio de las distintos estándares de
comunicación (RS232, RS485, protocolos Ethernet, etc.). Finalmente, la
tarjeta electrónica (TAG) es el componente que permite la identificación del
objeto o dispositivo que lo porte, estas etiquetas se componen de un chip
semiconductor, una antena (encapsulada en un paquete para formar
etiquetas fáciles de usar), y en ocasiones de una batería (esta condición
depende de si el TAG es activo, pasivo o semi-pasivo) y su función básica es
la de guardar la información y enviarla al interrogador.

La comunicación es posible ya que los lectores de RFID emiten un campo


electromagnético a través de su antena y cuando un TAG de RFID pasa a
través de este campo, es excitado y transmite la información almacenada de
regreso al lector. La transmisión y recepción de señales es inalámbrica y
ocurre simultáneamente, esto hace que la lectura de los datos sea inmediata.
Los TAG’s pueden guardar varios tipos de información sobre el objeto en el
que se encuentran, entre ellos: número serial, estampillas de tiempo,
instrucciones de configuración, entre otras. Una vez el lector ha recibido ésta
información del TAG, se envía directamente al controlador.

1.2 RFID EN COLOMBIA

El sistema de almacenamiento y de recuperación de datos remoto gracias a


la identificación por radiofrecuencia se comenzó a conocer masivamente en
®
Colombia gracias a la compañía Angelcom S.A que a partir del año 2000
obtiene la concesión de la explotación comercial de las actividades de
recaudo dentro del Sistema TransMilenio, lo cual comprende todos los

 
equipos, infraestructura y procesos que permiten realizar las actividades de
recaudo con la venta de pasajes del sistema3.

En el año 2001 TransMilenio inicia sus operaciones y cada pasajero del


sistema se hace acreedor de una tarjeta inteligente sin contacto (Mifare),
denominada Tarjeta Capital, que se entrega en la taquilla al pagar el pasaje.
Estas tarjetas permiten el ingreso al sistema y dentro de la información
almacenada se encuentra su ID (Identification Number) y el número de
tiquetes que restan en la tarjeta. Actualmente en Colombia, la tecnología
Mifare es difundida por empresas como:

• ATI
• DSS ELECTRONICS COLOMBIA
• Integración Comercial Efectiva
• SMARTCHIP S.A.
• W&R Soluciones Integrales
• Iprelenso LTDA.

Siendo esta última reconocida pues ha representado a PHILIPS


SEMICONDUCTORS en Colombia desde hace más de 20 años, ofreciendo
una amplia gama de productos innovadores de alta calidad4. La compañía
PHILIPS es la principal fabricante de los TAGS con tecnología Mifare. La
familia de transponders Mifare consisten de varios circuitos integrados que
en general trabajan a una frecuencia de 13.56MHz, todos de acuerdo al
estándar internacional ISO 14443, estándar que está relacionado con las
tarjetas de identificación electrónicas, en especial las tarjetas inteligentes,

                                                            
3
http://www.angelcom.com.co/textos/text4.txt
4
http://www.iprelenso.com.co/alianzas_estra.html

 
gestionado conjuntamente por la Organización Internacional de
Normalización (ISO) y Comisión Electrotécnica Internacional (IEC).

Este estándar define una tarjeta de proximidad utilizada para identificación y


pagos que por lo general utiliza el estándar tarjeta de crédito definida por ISO
7816 - ID 1 (aunque otros formatos son posibles).

1.2.1 Tipos de Tarjetas de RFID Mifare es la tecnología de tarjetas


inteligentes sin contacto (TISC) más ampliamente instalada en el mundo con
aproximadamente 250 millones de TISC y 1.5 millones de módulos lectores
vendidos. La distancia típica de lectura es de 10 cm (unas 4 pulgadas). La
distancia de lectura depende de la potencia del módulo lector, existiendo
lectores de mayor y menor alcance. La tecnología es económica y rápida,
razón por la cual es la más usada a nivel mundial. Las tarjetas o Tags Mifare
se pueden dividir en cuatro grandes grupos:

• Mifare Classic: Son fundamentalmente de los dispositivos de


almacenamiento de memoria. Existen tarjetas de 1KB y de 4KB. La
Mifare Standard de 1KB ofrece unos 768 bytes de almacenamiento de
datos, dividida en 16 sectores. La Mifare Standard de 4k ofrece 3 KB
dividido en 64 sectores.

• Mifare Ultralight: Es semejante a la classic, pero sólo tiene 512 bits


de memoria (es decir 64 octetos), sin seguridad. Esta tarjeta es muy
barata así que se utiliza a menudo de forma desechable.

 
• Mifare T = CL: Bajo esta denominación se encuadran las tarjetas
Mifare ProX y SmartMX. Son tarjetas microprocesadas que incorporan
un sistema operativo de tarjeta (Card Operating System - COS) y
aplicaciones desarrolladas específicamente para ser ejecutadas en la
tarjeta. Estas tarjetas son capaces de ejecutar operaciones complejas
de forma rápida y segura, igual que las tarjetas con contactos ISO
7816.

• Mifare DESFire: Esta tarjeta es una versión especial de Philips


SmartMX. Se vende con un software de propósito general incorporado
(el sistema operativo DESFire), que ofrece más o menos las mismas
funciones que Mifare Standard (4kB de almacenamiento de datos
dividido en 16 bloques), pero con una mayor flexibilidad, una mayor
seguridad (triple DES), y con mayor rapidez (protocolo T=CL).

Empresas como Angelcom S.A® comercializan las tarjetas Mifare Classic ya


que, además de cumplir con los requisitos básicos para el funcionamiento del
sistema de transporte masivo TransMilenio, también presentan un
mecanismo de seguridad, pues poseen claves especificas para acceder a su
memoria y a sus datos. En el mercado, el precio de las tarjetas de 1K es de
aproximadamente US$0.845 es decir 2100 pesos aproximadamente. Tal y
cómo se indicó anteriormente, la tarjeta Mifare Ultralight es de menor costo,
aproximadamente US$ 0.70 (1750 pesos). Las tarjetas Mifare ProX y Mifare
Desfire tienen un costo de aproximadamente 5000 pesos debido a sus otras
características descritas anteriormente. Las tarjetas pueden conseguirse con
algunos de los distribuidores mencionados anteriormente en Colombia.

                                                            
5
www.SmartCardWorld.com

 
1.2.1.1 Lectores de RFID Iprelenso también se encarga de comercializar los
módulos lectores encargados de identificar estos TAGs. Los módulos Plug
and Play comerciales generalmente constan de una antena, una interfaz de
comunicación con el ordenador (RS232, RS485, RS422, USB, entre otras),
leds indicadores y el componente principal que es un dispositivo compacto
diseñado (microcontrolador) que se encarga de procesar la información
captada por la antena. Generalmente las empresas que realizan este tipo de
módulos son muy reservados con el código de programación de estos
microcontroladores, por ello, el lector se vende como un dispositivo Plug and
Play que quiere decir que el usuario puede acceder al mismo por medio del
ordenador sin tener que configurar (mediante jumpers o software específico
(no controladores) proporcionado por el fabricante) ni proporcionar
parámetros a sus controladores.

Para que sea posible, el sistema operativo con el que funciona el ordenador
debe tener soporte para dicho dispositivo. El comerciante está encargado de
brindar la información acerca del protocolo requerido para acceder al
dispositivo y las respectivas instrucciones que deben ser enviadas hacia el
mismo para configurar el modulo de acuerdo a la aplicación que sepa
realizada.

Los lectores pueden trabajar a diferentes frecuencias entre ellas: 125kHz,


13.56MHz, 868MHz, 2.4GHz UHFy 5.8GHz, sin embargo, la elección de la
frecuencia más adecuada para la aplicación depende de los TAGs, pues es
indispensable que tanto el transponder como el lector funcionen en un mismo
rango.

 
1.3 PROYECTO POSGRADO UNAL

Actualmente en la Universidad Nacional de Colombia se lleva a cabo un


proyecto entre las Facultades de Ingeniería y Medicina que tiene como
objetivo desarrollar un sistema de simulación interactivo compuesto de
software, modelo virtual y prototipo físico de un paciente para
entrenamiento de estudiantes de atención neonatal. La implementación
del módulo propuesto en este proyecto, que corresponde a una parte del
prototipo físico ya mencionado, podrá contar con las funciones de
reconocimiento y reacción del maniquí frente a los medicamentos que le
sean suministrados basado en el comportamiento real de un recién nacido
que se encuentre expuesto a los mismos procedimientos.

 
2. DESCRIPCIÓN DEL PROYECTO

2.1 RESUMEN GRÁFICO Y ELEMENTOS UTILIZADOS

Para propósitos del proyecto, el maniquí de entrenamiento debe identificar el


medicamento (tipo y cantidad) que el estudiante le suministra para que se
puedan evidenciar los efectos que tienen en el comportamiento del mismo,
de acuerdo a esa identificación será posible evaluar no sólo si el estudiante
seleccionó el medicamento adecuado, sino también si la dosis suministrada
es nociva o no para la salud del neonato.

Figura 2. Esquema del proyecto propuesto

En la figura 2 se presenta un resumen gráfico de la propuesta a la que hace


referencia este documento. Se puede observar que debido a que el maniquí
identifica el medicamento, será la jeringa el objeto portador de la información
 
de interés que se programa en una etiqueta electrónica (TAG). Así pues, los
procedimientos principales que un estudiante debe realizar para utilizar el
módulo están relacionados con la selección y aplicación del medicamento en
el maniquí de entrenamiento. Por selección, entiéndase el proceso por medio
del cual el estudiante carga en la inyección (programa en el TAG) los datos
referentes al tipo y dosis de medicina, y por aplicación, el proceso por medio
del cual el estudiante acerca la jeringa al maniquí y simula que está
inyectando el medicamento, momento en el cual gracias a que el simulador
físico contará con un lector de RFID, se podrá evidenciar la reacción.

2.2 DESCRIPCIÓN ELEMENTOS RFID UTILIZADOS

La universidad cuenta con dos módulos lectores HF Mifare Easy compact


Plug&Play RS-232 que en el mercado cuestan US$180 c/u, es decir 450.000
pesos aproximadamente. Los módulos fueron comprados en Iprelenso LTDA,
mencionada anteriormente dentro de los distribuidores oficiales de la
tecnología Mifare en el país. Con estos lectores, el TAG o etiqueta debe
estar localizada a 6cm máximo para que el lector pueda identificarlo. Esta
distancia es suficiente pues en el momento de la identificación, el TAG se
encontrará en la jeringa que a su vez será “inyectada” en el maniquí neonato.
Tal y cómo se indicó en la introducción de este documento, la elección del
módulo se basa principalmente en su costo pues los dos módulos con los
que cuenta la universidad son suficientes para cumplir nuestros objetivos. De
tal forma que el módulo a utilizar será el HF Mifare Easy compact Plug&Play
RS-232. Así mismo, es importante indicar que la universidad también cuenta
con un TAG Mifare MF1ISC50 que también será utilizada. Estos dos
componentes se describirán a continuación.

 
2.2.1 HF Mifare Plug and Play El módulo Plug and Play está compuesto por
el transciever HF Mifare OEM de ACG (Figura 3) que es el módulo
encargado de leer y escribir los tags con los que es compatible, gracias a su
compacto diseño puede ser integrado fácilmente en módulos lectores
portables o estacionarios.

El rango de lectura típico de este módulo es de hasta 90mm dependiendo de


la antena y del TAG. Es compatible con antenas impresas en PCB, y a su
vez, dicha antena puede ser adaptada en un amplio rango para poder
cumplir con los requerimientos de la distancia de lectura, el consumo de
potencia y los costos de manufactura de la misma.

Además, este módulo posee una interfaz serial-TTL que puede ser
conectada directamente a un microprocesador y al mismo tiempo ser
fácilmente convertida a la interfaz RS232 de algún dispositivo, gracias al
diseño sofisticado del receptor, este módulo garantiza que es muy estable
frente a ruido electromagnético y variaciones de la antena.

Básicamente el módulo Plug and Play (Figura 3), integra el módulo Mifare
OEM con una antena PCB en la parte posterior, y al mismo tiempo integra la
interfaz RS232 para que el transciever pueda ser conectado de manera
directa a un computador.

 
Figura 3. OEM reader y Módulo HF Mifare Plug and Play

En la siguiente tabla se resumen las propiedades del módulo Plug and Play.

Tabla 1. Propiedades del módulo Plug and Play


Frecuencia de Operación 13.56 MHz
Baud Rate 9600/56700 (Opcional)
Interfaz RS232/422
Voltaje de alimentación 5 VDC
Corriente 80 mA
Temperatura de operación de -40°C a +85°C
Distancia de Operación Máx. 50mm hasta 90mm

El módulo empleado, maneja dos tipos de protocolos, que pueden ser


configurados en la memoria EEPROM con que cuenta el módulo lector, estos
protocolos son el ASCII y el BINARIO.

El protocolo ASCII se usa para aplicaciones de manejo fácil, los comandos


pueden ser ejecutados usando un programa tipo terminal, como por ejemplo

 
hyperterminal. Bajo este protocolo los datos son transmitidos en ASCII
hexadecimal, por defecto, los dispositivos trabajan bajo este protocolo una
vez son fabricados. Por su parte, el protocolo binario se utiliza en
aplicaciones de tipo industrial con sincronización y con chequeo de trama.
También se incluye un byte de direccionamiento para redes tipo esclavo-
maestro o multidrop. Para la aplicación a implementar se ha decidido utilizar
el protocolo ASCII pues se va a realizar una programación y una
comunicación directa entre un solo TAG y un solo lector.

2.2.2 Tarjeta (Microchip) El TAG con el que se va a realizar la identificación


es una tarjeta inteligente que cuenta con el chip Mifare MF1ISC50
desarrollado por NXP Semiconductors para operar de acuerdo a la ISO/IEC
14443 tipo A. Este chip es utilizado ampliamente en aplicaciones de tiquetes
de servicio público, ya que en muchas ciudades han adoptado a Mifare como
la solución de tiquetes electrónicos en dichas aplicaciones. En la siguiente
figura se observa la estructura interna de una de estas tarjetas.

Figura 4. Estructura interna de la tarjeta de RFID utilizada.

Dentro de las propiedades más generales de este tipo de TAGs podemos


mencionar que cuentan con una función de anticolisión que les permite
operar con varias tarjetas dentro del mismo campo, este algoritmo de
anticolisión selecciona cada tarjeta de manera individual y asegura que la
 
operación de transacción con una tarjeta seleccionada se realice de manera
correcta sin corrupción de datos debida a la interferencia de otras tarjetas
que operen dentro de su mismo campo. EL chip cuenta con una memoria
EEPROM de 8192Kbit organizada en 16 sectores con 4 bloques de 16 Bytes
cada uno, en la siguiente figura se ilustra la manera en que se organiza dicha
memoria.

Figura 5. Organización de la memoria EEPROM del chip MF1ISC50.

El bloque del fabricante contiene la información del circuito integrado, en sí,


el número serial del TAG. Este sector es de solo lectura. Como se puede
observar, cada sector cuenta con 3 bloques para almacenar datos, estos
bloques pueden ser configurados de acuerdo a los bits de acceso de la
siguiente como bloques de lectura/escritura para aplicaciones de control de
acceso o como bloques de valor para aplicaciones de pago electrónico en los
que pueden emplearse comandos de incremento o decremento de dicho
valor. Como idea inicial, se pensó utilizar valores en los bloques, teniendo en
cuenta que puede llegar a ser más fácil para emular la cantidad de un tipo de
medicina a ser suministrada.

 
También es posible observar que cada sector contiene un bloque
denominado como Sector Trailer, estos bloques contienen las claves
secretas A y B para poder acceder a la memoria y las condiciones de acceso
de los cuatro bloques de cada sector. Esta información es muy importante
teniendo en cuenta que antes de llevar a cabo cualquier operación con la
memoria, es necesario que la tarjeta sea seleccionada y se realice una
autenticación con las claves secretas A y B descritas así como las
condiciones de acceso de cada bloque, a continuación se presenta el
diagrama de flujo de acceso a la memoria, que será tenido en cuenta para la
programación del TAG una vez se establezca el proceso de comunicación
que permita una eficaz emulación de programación de la jeringa.

 
Figura 6. Diagrama de flujo acceso al TAG.

2.2.3 Pruebas iníciales de Programación de los elementos de RFID Para


programar el TAG existen una sería de instrucciones que hacen posible
acceder a los sectores del mismo y así programar la respectiva información,
como fue mencionado previamente, el TAG cuenta con una memoria
EEPROM de 1024 X 8 bit, organizada en 16 sectores con 4 bloques de 16
bytes cada uno. En la Figura 8 se presentan los resultados obtenidos
durante una sesión de comunicación establecida con el lector y la
programación del TAG a través de Hyperterminal. Para establecer dicha
comunicación es necesario configurar el puerto serial de la siguiente manera:

 
Figura 7. Configuración del protocolo serial

Como se observa, una vez configurada la comunicación y encendido el


dispositivo, por defecto se realiza una lectura continua del número de serie
del TAG, una vez se envía el comando de versión (‘v’) se obtiene como
respuesta que el módulo corresponde a la versión Mifare 1.0.

Figura 8. Acceso a los sectores y bloques del TAG

 
A continuación, se realiza el proceso especificado por el algoritmo de acceso
expuesto anteriormente, en primer lugar se realiza la selección de la tarjeta,
como se observa en la figura 8, una vez enviado el comando de selección
(‘s’) se obtiene como respuesta el número serial de la tarjeta seleccionada
(44CD92CD), luego, para continuar con el proceso de autentificación se
envía la instrucción de Log In al sector 1 en este caso, de la siguiente
manera:

‘l’ 01 AA FFFFFFFFFFFF

Donde ‘l’ corresponde al comando de Log In, el primer byte (01) corresponde
al sector al cual se desea acceder, comprendiendo entonces un rango entre
00h – 3Fh. El siguiente byte (AA) corresponde al tipo de clave con el que se
desea acceder al sector, esta llave puede ser la A o la B dependiendo de la
operación a realizar, en general la clave A se usa para poder realizar
operaciones de lectura/escritura, mientras que la clave B se usa para
operaciones de solo lectura, finalmente los últimos 6 bytes corresponden a la
clave en sí, para el caso de nuestra tarjeta, tiene definida la clave A como
FFFFFFFFFFFF.

En la figura 8, también se observa que cuando la operación de


autentificación se realiza con éxito se recibe una ‘L’ como respuesta que
significa que efectivamente se ha logrado acceder al sector especificado.
Ahora bien, es posible observar las distintas operaciones que pueden ser
realizarse con los bloques de datos, con la instrucción ´rv´ (Read Value) es
posible leer el valor de un bloque de datos determinado, para el caso
específico se puede notar que al leer los bloques 4, 5 y 6 cada uno tiene los
valores de 0, 1 y 3 respectivamente.

 
Una vez se realiza la operación de incremento (para el bloque 4) y
decremento (para el bloque 6) se observa que efectivamente sus valores
pueden ser modificados de manera sencilla una vez que se ha tenido acceso
a dichos sectores del TAG. Como se observa en la figura el lector responde
con los nuevos valores de cada bloque, para el 4, pasa de 0 a 1 pues se le
envió la instrucción +0400000001 donde el ´+´corresponde al comando de
incremento, el siguiente byte (04) corresponde al bloque al cual se desea
aplicar dicha instrucción y los siguientes 4 bytes (00000001) corresponden a
la cantidad a ser aumentada, en caso contrario la instrucción solo se modifica
con el comando inicial, que para disminuir el valor es ´-´; en el caso del
ejemplo vemos que se envía la instrucción al bloque 6 de la siguiente manera
-0600000002, y una vez leído el nuevo valor vemos como pasó de 3 a 1.

La figura anteriormente comentada solo es una muestra de la prueba que se


realizó con el módulo lector para verificar su correcto funcionamiento y la
posibilidad de acceso al TAG y respectiva programación.

Sin embargo, para efectos prácticos se ha decidido realizar la programación


en el software LABVIEW con el fin de aprovechar su entorno de
programación e interacción con el usuario que puede resultar muy práctico
para el uso de personas como los estudiantes practicantes que van a realizar
en sí la programación de las jeringas (que portan el TAG).

Para poder establecer la comunicación a través de LABVIEW, se hizo uso de


los módulos de comunicación serial con que el software cuenta. En primer
lugar, es necesario configurar el puerto de la misma manera que se hace con

 
Hyperterminal, para ello utilizamos el módulo Visa configure serial Port,
que según el programa, sirve para inicializar el puerto serial de una fuente
especificada a una configuración deseada, a cada una de las variables que
pueden ser modificadas se le crea un control desde el que es posible realizar
la configuración.
En las figuras 9 y 10 se ilustra el diagrama de bloques de la programación y
el panel frontal desde donde se puede controlar la configuración del puerto.

Figura 9. Diagrama de Bloques configuración del puerto

Figura 10. Panel Frontal, control de variables.

 
Una vez configurado el puerto, se emplean los módulos Visa Write y Visa
Read para poder enviar y recibir datos a través del puerto serial
respectivamente, en la figura 11 se muestra el diagrama de bloques utilizado
para enviar una instrucción al módulo, inicialmente se están enviando los
caracteres por separado, sin embargo esta función será optimizada para que
el proceso sea realizado de una mejor manera.

Figura 11. Estructura para enviar dato al módulo. (Escritura del puerto)

El tiempo de espera, fue incorporado en la estructura debido a que se


observó que el envió de datos se realizaba de forma muy rápida y entonces
el módulo lector no respondía adecuadamente. En la figura 13 se ilustra la
estructura para realizar la lectura del puerto, como se observa en esta figura
y en la de escritura (Figura 11), los módulos del software necesitan tener
definido el nombre del dispositivo al cual van conectados, es decir, el nombre
del puerto al que se conecta el módulo en el computador y la entrada de
error para evitar lecturas o escrituras erróneas.

 
Figura 12. Estructura para leer dato al módulo. (Lectura del puerto)

Una vez, se ejecutó el programa con la siguiente secuencia de


instrucciones:
s Æ Selección de tarjeta
v Æ versión
s Æ Nueva selección de tarjeta para autentificar el acceso.
l01AAFFFFFFFFFFFFÆ Autentificación al sector 01 con la clave A
Se obtuvieron los resultados observados en la figura 13.

Figura 13. Lectura del Puerto

Como se puede observar, el funcionamiento es el esperado, cuando se envía


el primer comando de selección se espera recibir el número serial de la

 
tarjeta seleccionada, esto ocurre en las dos ocasiones en que este comando
es enviado, también una vez se envía el comando de versión se observa que
efectivamente en el puerto se lee dicha información (Mifare 1.0), y finalmente,
cuando se envía la instrucción de autentificación se recibe una ´L´ que
significa que el acceso al sector 01del TAG se realizó de manera exitosa.

2.3 DESCRIPCIÓN MÓDULOS DE TRANSMISIÓN INALÁMBRICA.

El fin de establecer una comunicación inalámbrica entre el los


microcontroladores que se encuentran en la jeringa y el ordenador, se
utilizaron los módulos híbridos de RF con modulación ASK RLP434 y
TLP434. La frecuencia de operación de estos módulos es de 433.92MHz que
se encuentra dentro de la banda UHF (Ultra High Frequency) y que
actualmente en Colombia no tiene asignado ningún uso comercial.6 Véase
figura 14.

Figura 14. Frecuencias comerciales asignadas

ASK (Amplitudes-shift keying), es una modulación de amplitud donde la señal


moduladora (datos) es digital. Los dos valores binarios se representan con
dos amplitudes diferentes y es usual que una de las dos amplitudes sea cero;

                                                            
6
Ministerio de comunicaciones, documento “Banda de 450MHz”, para Comunicaciones Digitales Fijas y Móviles en
Áreas Rurales en el Foro de “Tecnologías Alternativas”

 
es decir uno de los dígitos binarios se representa mediante la presencia de la
portadora a amplitud constante, y el otro dígito se representa mediante la
ausencia de la señal portadora. En otras palabras, cuando se envia un ‘1’
logico, se emite una señal, mientras que cuando se envia un ‘0’ logico no se
envia ninguna señal. Este efecto se puede ver con mayor claridad en la
figura 15.

Figura 15. Modulación ASK.

La tranmisión mediante modulación ASK es muy susceptible a interferencias.


El receptor interpreta la intensidad de la señal como información por lo que el
ruido eléctrico que es sumado a la señal transmitida, produce errores en la
recpeción de los comandos. Sin embargo este tipo de modulación tiene sus
ventajas como la simplicidad y el costo.

El módulo transmisor TLP434 tiene un tamaño de 13.3x10.3mm y tiene 4


pines, dos de alimentación, en otro de ellos de debe ingresar la información
binaria con niveles TTL/CMOS y en otro pin se debe colocar la antena que,
según lahoja de especificaciones del fabricante, debe medir entre 15 cm y 20
cm, sin embargo, de forma más precisa se ha podido calcular que la antena

 
debe medir L=λ/4=c/f*4=17.28 cm. En algunos foros en internet se comenta
que cuando la distancia de operación no es mayor a los 4 m, se puede
utilizar el modulo TLP434 sin ninguna antena aunque si se coloca un cable
de la longitud recomendada, se pueden obtener transmisiones inalambricas
de hasta 100 m. La distribución de pines se muestra en la figura 16.

Figura 16. Transmisor TLP434

El RLP434(A), es el módulo receptor, tiene 8 pines, y el tamaño de


11.5x43.42mm, es un poco más grande que el emisor, pero sigue siendo un
tamaño pequeño que puede caber sin ningún problema en cualquier circuito
que se desee realizar.

El RLP434 tiene una pequeña bobina, para distinguir bien los pines, esa
bobina debe estar al frente, dicha bobina se representa con el círculo negro
el siguiente gráfico, en donde ademas se puede ver la distribución de pines
del receptor.

Figura 17. Receptor RLP434

 
La salida de los datos se encuentra en el pin número 2 y guardan el orden de
trama que se especificó en el microcontrolador que procesa los datos del
sensor. Por ello, al llegar los datos al receptor RLP434, los datos pasan a un
nuevo microcontrolador que se encarga de convertir la trama digital en
unaseñal que pueda ser procesada por la tarjeta de adquisición de datos.

2.4 DESCRIPCIÓN DEL SENSOR

El sensor a seleccionar será implantado en la jeringa para poder medir la


cantidad de medicamento a ser inyectado, utilizando el sensor como un
dispositivo que mida la proximidad del émbolo al pivote de la jeringa, esta
información será capturada y procesada por un microcontrolador que la
enviará de manera inalámbrica por medio de los módulos descritos
previamente. Inicialmente se propuso trabajar con un sensor óptico cuya
referencia es EE-SY124, sin embargo, al caracterizar el sensor se observó
que con distancias mayores a los 2 cm se tiene una resolución muy alta, lo
que quiere decir que para que cambie significativamente el voltaje de salida
del sensor se requiere un cambio en la distancia superior a los 5 mm
(0.00002V/mm) aproximadamente, lo cual no es aceptable para la resolución
que demanda la aplicación.

De esta forma, fue necesario escoger otro sensor que pueda producir una
señal relacionada con la cantidad de medicina que se está midiendo. Se
encontró que el sensor de efecto hall UGN3503 es bastante económico y
cumple con los requisitos de la aplicación.

 
El UGN3503, disponible en varias cápsulas de tipo transistor, puede detectar
con precisión pequeños cambios en la densidad de un flujo magnético,
incluso aquellos demasiado débiles como para actuar sobre interruptores de
efecto Hall. Tiene sólo tres conexiones, que son la alimentación (4,5 a 6 V),
el común o tierra, y la salida. Si no hay campo magnético aplicado, la tensión
en la salida es de la mitad del voltaje de alimentación. Así mismo, presenta
una buena repetitividad cuando la frecuencia de medida es menos a 23kHz.
Esta última característica no afecta el propósito de nuestro proyecto. Se debe
tener en cuenta cuando el sensor será utilizado en aplicaciones donde se
requiere medir la intensidad de un campo magnético que se encuentra
cambiando muy frecuentemente, por ejemplo, un piñón girando a gran
velocidad.

La resolución de este sensor depende del imán que se está utilizando. Está
claro que entre más magnetizado esté el material a detectar, se obtendrá
mayor resolución en la medida. Lo importante es que se en la práctica se ha
comprobado que con imanes regulares, se puede detectar una distancia
superior a los 3 cm. El diagrama funcional del UGN3503 se encuentra en la
figura 18.

Figura18.7 Diagrama funcional UGN3503

                                                            
7
http://www.datasheetcatalog.com/datasheets_pdf/U/G/N/3/UGN3503.shtml

 
Dentro de las especificaciones se puede encontrar que con un imán de 900
G se puede obtener una resolución de 1.3mV/G, lo que quiere decir que el
rango de voltaje con un imán de estas características sería de 1.17V.

En las pruebas realizadas en el laboratorio el voltaje varía desde los 2.5V


hasta los 3.4V (o desde los 1.6V hasta los 2.5V, esto depende del polo del
imán que es utilizado durante la medición), lo que quiere decir que la
intensidad del campo electromagnético del imán es inferior a los 900 G.
Como se puede observar, el rango de variación es bastante amplio y
además, este sensor posee una mejor resolución que el sensor escogido
inicialmente pues por cada milímetro el voltaje cambia en 0.01V
aproximadamente.

El sensor será colocado en el embolo, de tal forma que cuando se esté


succionando la medicina, el sensor se alejará del imán y la intensidad del
campo magnético disminuirá, lo que se traduce en un cambio del voltaje que
representará a su vez la dosis de medicina que será aplicada al maniquí de
entrenamiento medico. Véase figura 19.

Figura19. Montaje jeringa

 
3. MEDICAMENTOS Y DOSIS SELECCIONADAS

Dentro de los objetivos de la tesis se encuentra el reconocimiento de los


medicamentos y de su dosis por parte del maniquí neonato de entrenamiento
médico, para ello, es necesario saber cuáles son algunos de los fármacos
más utilizados y las cantidades suministradas. Además es necesario obtener
información acerca de las reacciones que se pueden producir una vez se ha
aplicado el medicamento. Por ello, se realizó una investigación preliminar y
se encontró una lista de fármacos que pueden ser utilizados en
Neonatología. A continuación se presenta la lista:

• Cardiovasculares: Adenosina, Digoxina , Dobutamina, Dopamina,


Indometacina , Hidralazina, Milrinona Lactato.
• Sistema respiratorio: Aminofilina , Dexametasona, Salbutamol.
• Sistema nervioso central y periférico: Fenobarbital, Fenitoína,
Fentanila , Midazolam.
• Misceláneos: Adrenalina, Albumina humana al 20%, Atropina,
Bicarbonato de sodio, Furosemida, Gluconato de calcio, Insulina
cristalina, Suero fisiológico al 0.9%, Survanta, Vitamina K, Vecuronio.

Las reacciones que pueden producir las anteriores medicinas son bastante
variadas y diversas, de hecho, muchas de ellas no pueden ser simuladas
electrónicamente. Por ello, fue necesario consultar directamente al
neonatólogo y asesor de la tesis Luis Carlos Méndez Córdoba8 quién
recomendó utilizar otros fármacos que generalmente se hacen necesarios

                                                            
8
Médico, profesor y coordinador Académico de Perinatología de la Universidad Nacional de Colombia, especialista
en neonatología, miembro de la asociación colombiana de neonatología y asesor del proyecto en cuestión.

 
frente a situaciones criticas en los recién nacidos. A continuación se presenta
una tabla con las medicinas recomendadas, los efectos sobre la salud de los
pacientes y las reacciones adversas que se pueden presentar en caso de
una sobredosis.

Tabla 2. Medicinas seleccionadas inicialmente


MEDICINA VÍA USOS REACCIONES ADVERSAS
Convertir a ritmo sinusal de Arritmia Temporal/Piel
ADENOSINA IV RÁPIDA taquicardia roja/Hiperventilación
ORAL O 30 MIN Temblores/Convulsiones/Taqui
AMINOFILINA INFUSIÓN Mejora Respiración cardia/Hipotensión
Revertir Bradicardia y bloqueo Arritmia luego de 2
ATROPINA IV RÁPIDA neuromuscular y secreciones minutos/Midriasis/fiebre
Tratar Hipertensión/insuficiencia Hipotensión/Rash
CAPTOPRIL ORAL cardiaca cutáneo/Fiebre/
INFUSIÓN N IV 10
GLUCONATO DE Arritmias/Bradicardia/Rubicund
- 30 MINS Reanimación cardiorespiratoria
CALCIO ez/
ORAL
Insuficiencia cardiaca/ Bradicardia/arritmia/
DIGOXINA ORAL 25% taquicardia/ Letargia
INFUSIÓN Taquicardia/arritmia/vaso
DOBUTAMINA CONTINUA Hipotensión/ dilatación cutánea
INFUSIÓN
DOPAMINA CONTINUA
Colapso cardiovascular
EPINEFRINA agudo/asfixia severa/aumento Hipertensión/Arritmia/taquicardi
(ADRENALINA) IV RÁPIDA frecuencia cardiaca a/

INDOMETACINA IV min por 30 min

LUDOCAINA IV por 5 min


Sedante de poco Hipotensión/Paro Respiratorio
MIDAZOLAM IV LENTA / ORAL tiempo/Inducción anestesia/ si es muy rápido
IV min 5 min o
MORFINA INFUSIÓN CONT.

NALOXONA IV RÁPIDA ayudar a Resucitar/ ----


Hipoxemia/Taquicardia/cambio
PENCURONIO IV RÁPIDA Relaja músculos s de presión/

 
Tabla 2. (Continuación)
Depresión
Respiratoria/disminuye ritmo
PENTOBARBITAL IV LENTO Sedante de poco tiempo cardiaco
POTASIO
CLORURO ORAL arritmia/bloqueo del corazón/
ORAL, IV MAS DE
PROPANOL 10 MINS tratar taqui-arritmias/hipertensión Bradicardia/bronco espasmo/

SILDENAFIL OROGÁSTRICA

SULFACTANTES INTRATRAQUEAL

TERBUTALINA IV RÁPIDA Aumenta ritmo cardiaco Fiebre


Aumento frecuencia
Induce parálisis de musculatura cardiaca/deterioro mecánica
VECURONIO IV RÁPIDA esquelética/junto anestesia pulmonar
Oxigenación/ventilación/reduce
baro trauma disminuye presión arterial

Cómo se puede observar, las vías de inyección son variadas, así como el
tiempo de aplicación. Este hecho limitó mucho la escogencia de las
medicinas ya que el proyecto inicialmente busca que los fármacos
reconocidos por el simulador físico puedan ser inyectados por medio de una
jeringa, en ese caso, sólo pueden ser utilizados aquellos que se apliquen de
forma intravenosa y rápida. En ese caso, las soluciones que pueden ser
utilizadas se restringen a:

• Adenosina, Adrenalina, Atropina, Naloxona, Pencuronio, Terbutalina y


Vecuronio.

El siguiente paso es saber cuáles reacciones pueden ser simuladas


electrónicamente. Se encontró que el signo vital que cambia con más

 
frecuencia una vez son utilizadas estas medicinas es el ritmo cardiaco. La
Naloxona el Pencuronio y el Vecuronio son utilizados para efectos muy
complejos como la relajación de músculos y la resucitación, por ello, fueron
descartados. De tal forma que las 4 medicinas seleccionadas fueron:
Adenosina, Adrenalina, Atropina y Terbutalina.

También se tuvo en cuenta cuales son los signos vitales más dicientes para
que el equipo de neonatología pueda determinar las condiciones de salud de
un paciente y cuáles son los rangos típicos de un recién nacido saludable.
Los signos vitales son mediciones de las funciones más básicas del cuerpo.
Los cuatro signos vitales principales que los médicos y los profesionales de
salud examinan de forma rutinaria son los siguientes:

• La temperatura del cuerpo.


• El pulso.
• La respiración (la frecuencia respiratoria).
• La presión sanguínea. (La presión de la sangre no se considera un
signo vital, pero se suele medir junto con ellos).

Los signos vitales son muy útiles para detectar o monitorizar problemas de
salud. De los anteriores mencionados, la temperatura del cuerpo y el pulso
pueden ser simulador de forma simple, sin embargo, a respiración y la
presión sanguínea requiere de un sistema más complejo. Los rangos
normales e un recién nacido se encuentran en la tabla a continuación.

 
Tabla 3. Signos vitales de un neonato sano
Rango
Típico Min Max
Temp.bloo
Temperatura de la sangre d 37,2 35,5 38
Pulso Heart Rate 120 95 170
Arterial blood pressure ABP 75 70 120
Pulmonary Artery pressure PAP 8 0 20

Otra reacción adversa en caso de presentarse una sobredosis en la


Adenosina es la rubicundez o el enrojecimiento de la piel. Este efecto
también puede ser simulado en el maniquí. De tal forma que finalmente se
simularan 3 reacciones>

• Pulso cardiaco
• Temperatura corporal
• Rubicundez

Más adelante se explicará detalladamente los elementos electrónicos


utilizados para simular los cambios en los signos vitales y las reacciones en
el neonato una vez la medicina es inyectada. También fue importante
determinar la dosis indicada para cada uno de los fármacos.

Para encontrar estos datos se deben tener en cuenta los siguientes datos:

 
• Concentración de la ampolleta: es la proporción o relación que hay
entre la cantidad de soluto y la cantidad de disolvente, donde el soluto
es la sustancia que se disuelve, el disolvente la sustancia que
disuelve al soluto, y la disolución es el resultado de la mezcla
homogénea de las dos anteriores.9 Se debe especificar cuántos
miligramos de la ampolleta deben suministrarse al neonato de
acuerdo al su peso.

• Diluciones necesarias: La dilución es el proceso por el cual se


disminuye la concentración de una solución por la adición de
solvente. La dilución permite en los electrolitos una mayor disociación
de sus moléculas, debido a las bases teóricas del equilibrio iónico.
Del mismo modo que con la dilución aumenta la disociación, de este
mismo modo, también aumenta la hidrólisis, ya que hay más
moléculas libres que pueden hidrolizarse.10 A los neonatos no se les
inyectan las ampolletas que contienen la medicina pura o
concentración inicial ya que sus sistemas cardiovascular, respiratorio
e inmunológico no lo soportarían.

• Peso del neonato: Un bebe puede tener talla grande o talla pequeña,
en la gráfica 1 se encuentra un gráfico que muestra cuál son los
pesos normales de acuerdo a las edades gestacionales de un
neonato que se considera dentro del rango normal.

                                                            
9
http://es.wikipedia.org/wiki/Concentraci%C3%B3n
10
www.doschivos.com/trabajos/quimica/541.htm

 
G
Gráfica1. Peso
P vs. Ed
dad gestaciional del be
ebe

Un neonato
o de talla pequeña puede
p pesa
ar entre 15
500 y 2700
0 gramos, un
u
b
bebe de ta
alla grande puede pessar entre 30
000 y 4200
0 gramos. Para nuesttro
p
proyecto y según re
ecomendaciones del doctor, el neonato será
s de talla
p
pequeña y podrá pesar 1 Kg, 2 Kg o 3 Kg
g, dependie
endo de la selección
s d
del
p e o del médico.
practicante

A continuación se presenta una tab


bla con lo
os medica
amentos, la
c ción de la ampolla, y las dilucciones depe
concentrac endiendo del
d peso del
d
n
neonato (1 Kg, 2Kg o 3 Kg).

T
Tabla4. Tabla de med
dicamentos selecciona
ados y su do
osis
Am
mpolla Dilución ml por peso
p

m
mg/ml m
mg/Kg 1K
Kg 2Kg
g 3Kg
Adenosin
na 3 1a9 0,05 0,1
17 0,333
33 0,5
Adrenalin
na 1 1a9 0,02 0,2
20 0,4
4 0,6

 
Atropina 1 1a9 0,02 0,20 0,4 0,6

Terbutalina 0,5 1a9 0,05 0,10 0,2 0,3

Para hallar estos valores fue necesario realizar el siguiente procedimiento:


i) Conocer la concentración de la ampolleta
ii) Realizar la dilución correspondiente
iii) Aplicar la cantidad adecuada de acuerdo al peso del neonato

En el caso e la Adenosina por ejemplo, es necesario diluir la medicina en 1 a


9, lo que quiere decir que por cada ml de ampolleta, se deben agregar 9 ml
de solución salina al 0.9%. Por ello, luego de diluir la medicina la
concentración de la ampolla queda en 0,3 mg por ml. Ahora, a un paciente
de 1 Kg se le deben inyectar 0,05 mg de medicamento lo que equivale a:

0,3 → 1ml
0,05 → x
0,05
x= = 0,17ml
0,3

0,17 ml del fármaco diluido.

El mismo proceso se realiza para los otros medicamentos. En caso de que el


bebe pese 2 Kg, pues solo basta con multiplicar 0,17 ml por dos y si pesa 3
Kg pues se debe multiplicar por tres. En el caso de la Adenosina
específicamente, se tuvo en cuenta sólo una cifra significativa, por ende,
para 1 Kg la dosis indicada es de 0,2 ml, para 2 Kg, la dosis indicada es de
0,4 ml y para 3 Kg la dosis indicada es de 0,6 ml.

 
Las dosis varían desde los 0,1 ml hasta los 0,6 ml. Ahora ya se conocen los
medicamentos y las dosis apropiadas, a continuación se presentaran el
funcionamiento del módulo y el tratamiento de ésta información para lograr el
objetivo planteado.

 
4. BLOQUES DE FUNCIONAMIENTO DEL MÓDULO A
IMPLEMENTAR

El funcionamiento del módulo a implementar se ha dividido en tres grandes


bloques de acuerdo a los elementos principales que serán utilizados, el
computador programador (interrogador de RFID) de medicamentos, la jeringa
portadora del tag y el maniquí de entrenamiento que estará equipado con
otro interrogador de RFID que se encargará de permitir realizar la lectura e
identificación del medicamento programado en el tag de la jeringa. Como se
puede observar en la figura 20 la comunicación entre los bloques es
inalámbrica (línea punteada) gracias al uso de la tecnología de RFID y a los
módulos de transmisión y recepción de RF que operan a frecuencias
diferentes. A continuación se realiza una descripción detallada de los
elementos que componen cada bloque y su respectiva función.

Figura20. Diagrama de Bloques del modulo a implementar

 
4.1 BLOQUE 1: PROGRAMADOR DE MEDICAMENTOS.
 

La función principal de este bloque es escribir en el TAG la información


referente al tipo y cantidad de medicamento que va a ser suministrado al
maniquí de neonato. Para lograr tal fin, en este bloque se utilizan los
siguientes elementos: un computador, un dispositivo de lectura/escritura de
RFID (referencia HF Mifare Easy Compact Plug and Play), una tarjeta de
adquisición de datos, 2 microcontroladores (ATMega16) y dos receptores de
RF que funcionan a frecuencias diferentes.

Respecto al dispositivo de RFID utilizado (ACG HF Mifare Easy Compact


Plug and Play) es importante resaltar que permite la lectura/escritura (sin
contacto) de varios tipos de tarjetas inteligentes de RFID entre las que se
encuentran las de la familia Mifare® y el estándar ISO 14443A . Además trae
incorporada una antena en PCB que le otorga un rango de lectura típico de
90 mm dependiendo del TAG, lo que implica que cuando se desee realizar la
programación, éste debe estar dentro del rango de detección.

El circuito integrado que se encuentra en la etiqueta electrónica (TAG)


cuenta con una memoria EEPROM de 8192Kbit organizada en 16 sectores
con 4 bloques de 16 Bytes cada uno. Para acceder o cambiar cada bloque
de la etiqueta electrónica se debe realizar un procedimiento de autenticación
para cada sector. En el caso del proyecto a realizar, se utilizarán dos
bloques: uno para almacenar la información acerca del tipo de medicamento
y otro para su respectiva dosis. Vale la pena mencionar que debido a la gran
capacidad de memoria, pueden almacenarse un elevado número de
medicinas haciendo de este módulo un proyecto escalable.

 
Para poder acceder al TAG es necesario enviarle algunas palabras de
control por medio del módulo lector.Por ello, es necesario acercar la jeringa
al bloque programador para poder efectuar de manera correcta el envío de
información desde el dispositivo escritor al TAG. Gracias a que el dispositivo
cuenta con una interfaz RS232, ésta será utilizada para establecer la
comunicación con el computador.

Con el fin de establecer una comunicación apropiada entre el ordenador y el


dispositivo lector que será utilizado para programar el TAG, se debe ajustar
un protocolo que depende de los parámetros de comunicación
predeterminados del dispositivo lector ACG HF Mifare Easy Compact Plug
and Play que en este caso tiene una velocidad de transmisión de 9600b/s,
con 8 bits de datos, no requiere bit de paridad, requiere de un bit de stop y no
necesita handshake.

Debido a que la aplicación a realizar en el ordenador tiene un alto


componente de instrumentación y a que se requiere una interfaz gráfica
versátil y amable para que los estudiantes de medicina puedan comprender
de forma sencilla el funcionamiento del módulo, el programa de software
escogido para desarrollar la aplicación fue LabView® de National
Instruments® en la figura 21, se puede observar dicha interfaz. Otra de las
ventajas de utilizar LabView® es que permite una fácil integración con
hardware , específicamente con tarjetas de medición, adquisición y
procesamiento de datos. Por medio de este software, se programará el TAG
una vez se ha establecido la comunicación con el módulo lector de acuerdo a
los parámetros anteriormente expuestos.

 
El tipo de medicamento será seleccionado directamente en el ordenador, es
decir, el practicante podrá escoger cuál medicina es la indicada para mejorar
la salud del neonato. La dosis podrá será visualizada en el computador de
acuerdo del movimiento de carga de la jeringa y ésta será programada de
acuerdo con la información recibida de la estación del aplicador
específicamente de la señal del sensor que varía una vez que el estudiante
efectúa movimientos de carga de la inyección.

Figura 21. Interfaz Gráfica implementada en LabView® para el Programador


de medicamentos

Como se puede observar en la figura 20, la comunicación entre los bloques 1


y 2 es inalámbrica (línea punteada de la figura) y se realiza gracias a los
módulos de RF que operan a una frecuencia de 434MHz que utilizan una
modulación ASK . Estas señales son procesadas por un microcontrolador
(véase MICRO 2 en la figura 20) que a su vez transferirá la información a la
tarjeta de adquisición de datos.

 
Un proceso similar al mencionado anteriormente se lleva a cabo para que el
ordenador pueda recibir la información acerca del neonato. Es decir, desde el
bloque 3 del identificador que se encuentra en el maniquí o simulador físico
se enviarán señales que indican cuál es la reacción del maniquí de acuerdo
con la medicina que se le aplicó. La comunicación es inalámbrica
nuevamente, sin embargo, es necesario resaltar que los módulos utilizados
operan a una frecuencia de 418MHz, esto con el fin de no generar
interferencias en las comunicaciones establecidas entre los bloques 1 y 2
(434MHz), y entro los bloques 1 y 3 (418MHz).

Las señales recibidas en el bloque 1 serán utilizadas en la monitorización de


la salud del neonato en el modelo virtual que actualmente está siendo
desarrollado por la Universidad Nacional de Colombia Así mismo, estos
datos son adquiridos nuevamente por el software con el fin de que el
practicante pueda comprender si su decisión fue correcta por medio de un
mensaje llamativo que capte la atención de aquel que se encuentra
monitoreando la salud del recién nacido.

A continuación se presenta una explicación más detallada de la


programación en el software y de los microcontroladores utilizados en este
bloque.

4.1.1 Descripción de la programación en LabView. La interfaz gráfica de


programación, y en sí el software de programación realizado en LabView se
desarrolló de acuerdo a las operaciones de memoria que pueden ser
ejecutadas en el chip de la tarjeta de RFID (Lectura/escritura de bloques,
incremento/decremento del valor de los bloques y copia del valor de un

 
bloque en otro). Como se ha mencionado previamente, para el caso concreto
de almacenamiento de datos en la tarjeta de RFID, se utilizaron las
operaciones de escritura del valor de un bloque (“write value”), así pues,
debido a que en la tarjeta de RFID se utilizaron 3 tipos de datos (tipo de
medicina, cantidad de medicina, peso del neonato) se utilizaron 3 bloques.

Vale la pena recordar, que la memoria de 1024 X 8 bits del chip de la tarjeta
de RFID se organiza en 16 sectores con 4 bloques de 16 Bytes cada uno, y
además, que el acceso a cada uno de los sectores necesita de una
secuencia de autenticación en la cual el módulo lector/escritor especifica el
sector a ser accesado y escoge la clave de ingreso, (que puede ser la A o la
B). Luego, hay una verificación de información entre la tarjeta y el dispositivo
lector y finalmente, se recibe una respuesta por parte del chip de la tarjeta en
la cual se autoriza o no a realizar modificaciones en el valor de sus bloques.

Para poder realizar estas modificaciones, existen unos comandos ASCII


(expuestos previamente) que son enviados por el módulo lector que es
controlado desde el software donde se encuentra la interfaz gráfica y que se
comunica con el computador por medio de la interfaz RS232. Entonces, de
acuerdo con estos comandos y con la secuencia de autentificación
denominada como Three Pass Autentification Sequence, se establecieron
los siguientes parámetros (Tabla 5) y el siguiente algoritmo (ver Tabla 6) para
la escritura de datos (Programación) de la etiqueta de RFID.

Respecto al algoritmo de acceso, es importante resaltar que el comando de


selección de la tarjeta (“s”) es obligatorio ya que una vez que se envía dicho
comando, se detecta la cantidad de tarjetas presentes en el campo de acción
de la antena del módulo lector, de modo que si la tarjeta esta fuera del rango

 
de lectura los comandos siguientes para escribir los valores de los bloques,
serían inútiles.
Tabla 5. Parámetros para almacenar la información en el TAG
Sector a Bloques a Significad
acceder acceder Info Almacenada Valor o
“00000002
” Adenosina
“00000003
” Adrenalina
8 Tipo de medicina
“00000004
” Atropina
“00000005
” Terbutalina

2 Cantidad de “00000X00 0<X<


9 Medicina ” 1ml

“00001000
” 1 Kg
“00002000
A Peso del neonato
” 2 Kg
“00003000
” 3 Kg

Tabla 6.Algoritmo de ingreso al TAG

Comando ASCII
Selección Tarjeta “s”
Sector Clave A
Acceder al Sector
“l” “02” “AAAAAAAAAAAA”
Bloque Valor
Escribir Valor del “wv” “08” “0000000#”
bloque “wv” “09” “00000#00”
“wv” “0A” “0000#000”

 
De acuerdo a esto la instrucción completa de caracteres que se envía a la
tarjeta de RFID por medio del módulo lector tendría la siguiente forma
ssL02AAAAAAAAAAAwv080000000#wv0900000#00wvA0000#000
donde # corresponde al carácter correspondiente dependiendo de la
selección del estudiante que utiliza el módulo.

En LabView se realiza el envío de dichos caracteres por medio de tres


cadenas concatenadas para formar una instrucción final como la mostrada,
con una longitud de 51 caracteres.

En la figura 22 se muestra la estructura usada para enviar la cadena


correspondiente al tipo de medicamento de acuerdo a la selección que
realiza el usuario que escribirá el valor del bloque 8.

Figura 22. Estructura “Case” utilizada para el envío de cadena de caracteres


correspondiente al tipo de medicamento.

En la estructura, hay 4 casos que corresponden a cada tipo de medicamento


respectivamente, así pues, dependiendo de la selección del usuario, se
modifica el último carácter de la cadena.

 
En esta estructura, y para los 4 casos posibles, es importante resaltar la
presencia de los caracteres que hacen parte de los comandos de la
selección de la tarjeta y de instrucción de acceso, que contiene tanto el
sector a ser accedido, como la clave de acceso. Esto significa que siempre
que se ejecute el programa, se cumple con los requisitos de seguir la
secuencia de autentificación para realizar adecuadamente al acceso a la
memoria de la tarjeta de RFID.

Figura 23. Estructura “Case” utilizada para el envío de cadena de caracteres


correspondiente a la cantidad de medicamento.

En la figura 23 se observa la estructura de programación utilizada para la


construcción de la cadena de caracteres que conforman la instrucción de
escritura del valor del bloque 9 de la memoria de la tarjeta de RFID, y que
corresponde a la cantidad del medicamento que será cargada en la jeringa.

La entrada de esta estructura, es una codificación de la información que


proviene de la captura en la tarjeta de adquisición de datos y que
corresponde a la información de la segunda etapa del proyecto (desde el

 
microcontrolador que procesa la información del sensor en el aplicador). Esta
señal, es de tipo numérico y puede tener los valores enteros entre 0 y 10. De
acuerdo a esto, se le hace un tratamiento previo para garantizar la correcta
elaboración de la instrucción.

En primer lugar se compara con 0 para saber si es el dato de entrada es


mayor o menor, en caso de que esa codificación sea menor que 0, la
instrucción que se envía es:
wv0900000000
que quiere decir que la dosis es 0, o que la jeringa está vacía.

Sin embargo, si el dato es mayor que 0, se entra en un nuevo proceso de


comparación, esta vez con el número 10, entonces, mientras que el dato de
entrada sea mayor que 0 y menor que 10, se realiza el siguiente proceso:
Debido a que la instrucción fue definida como:
wv0900000#00
el dato a modificar está en la tercera posición del byte, entonces lo que se
hace es multiplicar por 100 el valor proveniente de la codificación, y luego
este valor se transforma a su correspondiente valor en tipo carácter, formado
una cadena de 3 caracteres: #00. Ejemplo: Si el dato de entrada es 8,
8X100 = 800, luego se transforma a su correspondiente en “Decimal String”
que es “800”. Como se observa en la figura 23 esta cadena se concatena
con el resto de caracteres que forman la instrucción (wv0900000) así el
resultado final será:
wv0900000800
Solamente en caso de que el dato sea igual a 10 se envía la instrucción así:
wv0900000A00
con el objetivo de no tener que modificar un carácter más que se encuentre
fuera de la tercera posición.

 
Para la cadena de caracteres en la que se escribe el valor del bloque A (de
acuerdo a la selección del peso), se utiliza una estructura de programación
similar a la de la figura 22. En la figura 24 se observa esta estructura.

Figura 24. Estructura “Case” utilizada para el envío de cadena de caracteres


correspondiente al peso del neonato.

En este caso, se modifica la cuarta posición del byte dependiendo de la


selección del usuario del programa. Esta estructura se rige entonces
mediante la siguiente tabla:

Tabla 7. Codificación peso

Selección  Caso Cadena 


1Kg  0  "00001000"
2Kg  1  "00002000"
3Kg  2  "00003000"

Una vez que se elaboran las instrucciones que modifican cada uno de los
valores de cada bloque del sector 2, se concatenan en una sola cadena de
51 caracteres. En la figura 25 se observa la concatenación de las 3
instrucciones descritas previamente.

 
Figura 25. Concatenación de las cadenas que forman la instrucción final que
se envía al módulo lector de RFID para escribir la información en la tarjeta de
RFID.

Respecto a los datos que provienen de la captura realizada en la tarjeta de


adquisición (datos provenientes del microcontrolador que procesa la
información del sensor ubicado en la jeringa) es importante mencionar la
forma en que se realiza la codificación para que antes de llegar al proceso
donde se elabora la instrucción para la escritura del bloque de memoria de la
etiqueta tenga como valores posibles los números enteros comprendidos
entre 0 y 10.

En la figura 26 se observa el elemento que permite realizar la lectura del


puerto digital de la tarjeta de adquisición de datos donde se encuentran los
datos provenientes de la segunda estación. Este elemento (DAQmx) ubicado
en la parte izquierda de la figura tiene como salida precisamente el dato leído

 
de la tarjeta, este dato entra en una estructura tipo caso que se rige por la
tabla 8.
Figura 26. Elementos que permiten realizar la lectura de la Tarjeta DAQ.

Tabla 8. Decodificación datos obtenidos segunda estación


Dato leido  Dosis (ml) 
3  0 
6  0,1 
12  0,2 
24  0,3 
48  0,4 
96  0,5 
67  0,6 
70  0,7 
76  0,8 
126  0,9 
15  1 

Como ya se mencionó previamente, en LabView® se utilizan las librerías


VISA (Virtual Instrument Software Architecture) para establecer la
comunicación con el módulo lector de RFID por medio de la interfaz RS232
del computador. En la siguiente figura se observa el proceso de envío de la
instrucción (escritura en el puerto) al módulo lector.

 
Figura 27. Proceso de envío de la instrucción al puerto RS232.

En este proceso, se realiza el envío de cada carácter de la instrucción de


manera individual con un tiempo de envío determinado. El envío individual de
cada carácter se logra mediante la estructura “for” que indexa cada elemento
del arreglo que conforma la instrucción completa. El número de iteraciones
será 51, pues esa es la longitud de la cadena que debe ser enviada. Luego
de realizar las pruebas, se observó que el tiempo de envío mínimo de cada
carácter debe ser de 30 ms, lo que significa que el tiempo que toma enviar la
instrucción completa al módulo es de 51 X 30 ms = 1530 ms.

Así que una vez el usuario presiona el botón PROGRAMAR que se observa
en la interfaz de programación de la figura 21, debe esperar alrededor de 1.5

 
segundos para que el TAG sea programado, momento en el cual el LED de
indicación denominado como LISTO se encenderá y se apagará nuevamente
indicando que es posible realizar una nueva programación.

Con respecto a la captura de los datos provenientes de la tercera estación


(directamente del maniquí), la estructura utilizada es similar a la utilizada
para la captura de los datos referentes a la dosis. Nuevamente se utiliza el
módulo DAQmx para lectura de puerto digital, la diferencia es que en este
caso se debe seleccionar el puerto0 de la tarjeta de adquisición de datos.
Entonces en la figura 28 se observa el proceso que se lleva a cabo para
realizar dicha tarea.

Figura 28. Proceso para reconocer el estado futuro del neonato de acuerdo a
la medicina programada.

En las estructuras tipo caso que se observan en la parte derecha, se evalúan


los datos capturados para así desplegar en la pantalla del software la

 
información correspondiente al estado de salud del neonato que resulta de
la combinación de parámetros (medicina, dosis , peso y estado de salud
actual) que son modificados luego de la selección realizada por el usuario del
módulo, usuario que en este caso será un estudiante de medicina.

4.1.2 Programación de los microcontroladores (MICRO 1 y MICRO 2) Los


microcontroladores utilizados para realizar estas funciones tienen referencia
ATmega8. Estos dispositivos tienen bajo consumo, utilizan arquitectura RISC
de 8 bits y tienen tecnología CMOS. Ejecuta instrucciones complejas con un
solo ciclo de reloj y pueden realizar hasta un millón de instrucciones por
segundo de acuerdo a la forma como el diseñador programe el
microcontrolador con el fin de optimizar la potencia de consumo versus la
velocidad de procesamiento.

Los programas realizados utilizan lenguaje C++, esto se debe a que las
operaciones que se desean realizar con el microprocesador no son muy
extensas y por ello no es necesario utilizar assembler que permite un mejor
uso del espacio en memoria. Además, es necesario mencionar que C++ es
un lenguaje de alto nivel que actualmente se encuentra muy difundido en el
mundo y que es fácilmente entendible, en cambio con assembler es
necesario analizar las instrucciones propias de cada microcontrolador para
poder captar qué operación es realizada en cada línea con el fin de
comprender el código en general.

Los dispositivos utilizados tienen como función realizar una conversión serial-
paralela. Las señales convertidas son transmitidas a la tarjeta de adquisición
de datos de LabView®. Para hacer esto posible fue necesario establecer un
protocolo de comunicaciones entre el microcontrolador de envío y de

 
recepción de datos, esto es posible gracias al uso de los módulos USART
(universal synchronous asynchronous receiver transmitter) cuyas
características son las siguientes:

- Operación full dúplex


- Operación síncrona o asíncrona.
- Soporta un format de trama de hasta cinco, seis, siete, ocho o nueve
bits de datos y uno o dos bits de parada.
- Puede generar paridades par o impar
- Tiene un modo de comunicación asíncrona de hasta el doble de la
velocidad.

Una trama serial comienza por un bit de inicio seguido por el bit de datos
menos significativo, y opcionalmente un bit de paridad para chequear el error
de envío. Después se encuentran los siguientes bits de datos y termina aquel
más significativo. En caso de encontrarse activo, el bit de paridad se inserta
después del dato y antes de los bits de stop. Cuando una trama completa es
transmitida, es seguida por una nueva trama inmediatamente, o la línea de
comunicaciones de puede poner en estado inactivo (alto).

En la figura 29 se encuentra una figura que demuestra la trama en un


protocolo una vez ha sido establecido en el módulo.

Figura 29. Formato de trama (ATMEL ATmega8 datasheet)

StÆ Bit de inicio, siempre en bajo

 
(n)Æ Bits de datos (0 a 8)
PÆ Bits de paridad, pueden ser pares o impares.
SpÆ Bit de parada, siempre alto
IDLEÆ No hay transferencia en la línea de comunicación, este estado
siempre es alto.

El formato de trama utilizado por la USART se define en los registros


UCSZ2:0, UPM1:0, y los bits USBS en UCSRB y UCSRC. El receptor y el
transmisor usan el mismo protocolo establecido. El tamaño USART de los
caracteres (UCSZ2:0) selecciona el numero de bits de datos en una trama.
El modo de paridad USART (UPM1:0) habilitan los bits de paridad. La
selección del número de bits de parad se realiza en el bit USBS.

De modo que de acuerdo a las especificaciones de la comunicación el


USART puede ser inicializado según el modo de transmisión, el tamaño de la
trama de datos a transmitir y la velocidad de transmisión. Entonces dentro de
lo acordado el protocolo se puede configurar así:

• Tipo de transmisión: FULL DUPLEX


• Tamaño de la trama de datos: 8 bits, sin bit de paridad y con 1 bit de
stop.
• Velocidad de transmisión: 2400 baudios.
• Comunicación asíncrona.
• Comunicación por polling

Para poder establecer en el ATmega16 el protocolo, es necesario modificar


algunos de los registros internos del microcontrolador, entre ellos:

 
Figura 30. Registros del USART en ATmega8

Estos tres registros están destinados para determinar en qué condiciones se


va a realizar la transferencia de los datos entre los dispositivos. A
continuación se encuentra una breve explicación de cada uno de los valores
que se pueden modificar en estos registros.

UCSRA

• MPCM (Multiprocesor Communication Mode): Este bit habilita el modo


de comunicación multiprocesador, cuando el MPCM se configura
como ‘1’, todas las tramas de datos recibidas por el receptor USART
que no contengan información de direcciones serán ignoradas, el
transmisor no se ve afectado por algún tipo de configuración en este
bit.

 
• U2X: Duplica la velocidad de transmisión. Cuando el bit se encuentra
activo, duplica la velocidad. Esto solo tiene efecto para las
transmisiones asíncronas.
• PE: Error de paridad.
• DOR (Data Over Run): Este bit se activa si se detecta que el buffer de
recepción esta lleno.
• FE (Frame Error): Este bit se activa cuando el primer bit de stop del
siguiente carácter enviado se encuentra en nivel bajo, es decir,
cuando hay un mal envío de datos según el protocolo establecido.
• UDRE (USART Data Register Empty): Esta bandera indica si el buffer
UDR se encuentra listo para recibir un nuevo dato, si es ‘1’, significa
que el buffer esta desocupado y listo para ser escrito, a su vez, esta
bandera puede generar una interrupción en el bit UDRIE.
• TXC (USART Transmit Complete): Esta bandera se activa cuando la
totalidad de la trama a transmitir ha sido enviada y no hay dato en el
buffer UDR, esta bandera se desactiva automáticamente cuando la
interrupción de transmisión se ejecuta, también puede desactitvarse
por procesos de escritura y puede generar una activación de la
interrupción de transmisión completa en el bit TXCIE.
• RXC (USART Transmit Complete): esta bandera se activa cuando hay
datos que no han sido leídos en el buffer de recepción.

USCRB

• TXB8 (Transmit Data Bit 8): Este es el noveno bit de datos que se
transmite en una comunicación serial.
• RXB8 (Receive Data Bit 8): Este es el noveno bit de datos que se
recibe en una comunicación serial.
• UCSZ2 (Character Size): Junto con el UCSZ1 y el UCSZ0 se
especifica el tamaño de la trama de datos a ser enviada.

 
• TXEN (Transmiter Enable): Al activar este bit se habilitan las
transmisiones por USART.
• RXEN (Receiver Enable): Al activar este bit se habilitan las
recepciones por USART.
• UDRIE (USART Data Register Empty): Al activar este bit se habilita
la interrupción en la bandera UDRE.
• TXCIE (TX Complete Interrupt Enable): Al activar ete bit se habilitan
las interrupciones sobre la bandera TXC.
• RXCIE (RX Complete Interrupt Enable): Al activar ete bit se
habilitan las interrupciones sobre la bandera RXC.

UCSRC

• UCPOL (Clock Polarity): este bit se usa exclusivamente para el


modo asíncrono.
• UCSZ1:0 (Character Size): Estos bits, combinados con el UCSZ2
en el registro UCSRB, configuran el tamaño de la trama de datos en
el emisor y en el receptor.

 
Tabla 9. Configuraciones posibles UCSZ en ATmega8

• USBS (Stop Bit Select): Con este bit se seleccionan el numero de


bits de parada que serán insertados por el trasmisor.
• UPM1:0 (Parity mode):
Tabla 10. Configuraciones posibles UPM en ATmega8

• UMSEL (Usart Mode select):


Tabla 11. Configuraciones posibles UMSEL en ATmega8

• URSEL (Register select): Al activar este bit se habilita el acceso al


registro UCSRC.

Además de estos registros, también se encuentra el registro de los datos


enviados o recibidos. De la siguiente forma:

 
Figura 31. Registro UDR en ATmega8

El buffer de transmisión de datos del USART y el buffer de ecepción de datos


compartes la misma dirección I/O referida al mismo registro UDR del
microcontrolador. EL buffer de transmisión TXB será el destino para los datos
que son escritos en esta locación. Al leer el registro UDR se tendrá el dato
que se encuentra en el registro RXB.

EL buffer de transmisión solo puede ser escrito cuando la bandera UDRE se


encuentra activa, esta se encuentra en el registro UCSRA. Cuando los datos
son escritos en TXB y el transmisor esta activado, entonces la información es
inmediatamente almacenada. Luego los datos serán enviados serialmente
por medio de un registro de corrimiento.

EL buffer de recepción consiste de un FIFO de dos niveles. El FIFO cambiara


de estado cada vez que se accede a el. Debido a este comportamiento, no
se pueden utilizar instrucciones que modifiquen el contenido del registro.

Por ultimo hay que hablar de dos registros que almacenan la tasa de
transmisión de bits (USART Baud Rate Registers – UBRRL and UBRRH). EL
bit URSEL en los registros señala si se selecciona el registro UBRRH o el
UCSRC. Cuando se encuentra inactivo, quiere decir que se desea acceder al
 
registro UBRRH. En UBBRH (los 4 bits mas significativos) y UBRRL (los 8
bits menos significativos) se almacena el “baudaje”.

Después de comprender adecuadamente el funcionamiento del modulo


USART se realizó la iniciación del mismo. Inicialmente definimos la tasa
especificada que es de 2400 baudios. Sin embargo, este valor no es el que
se almacena en el ultimo registro comentado, es posible consultar la hoja de
datos del fabricante con el fin de encontrar el valor que debe almacenarse en
el registro UBRR para lograr esa velocidad de transmisión con respecto a la
frecuencia del reloj que se esté utilizando. En nuestro caso, el reloj interno es
de 1MHz, por lo tanto, el valor UBRR recomendado es 25, tal como se puede
ver en la Tabla 12.

Tabla 12. Ejemplos de los valores UBRR en las frecuencias de oscilación


más comúnmente usadas.

Una vez establecida la velocidad de transmisión, la frecuencia de oscilación y


el formato de trama, se puede comenzar a recibir los datos enviados de los
bloques 2 y 3. En este caso, la selección de la tasa de baudios se basó en la
hoja de datos del fabricante de los dispositivos RF utilizados para lograr la

 
c
comunicación serial que
q se enccuentra en los anexoss. Allí recom
miendan qu
ue
p
para los módulos la velocidad
v m
máxima de transmisión
n sea de 4800 baudio
os.
Por ello, ca
ada uno de los pares transmite
t a 2400 baud
dios. MICR
RO 1 recibe la
i
información
n por medio
o de un mó
ódulo de re
ecepción co
on referenccia RLP418
8A,
m
mientras qu
ue MICRO 2 recibe la información gracias al
a módulo co
on referenccia
RLP434.

En la figura 32 se
s encuen
ntra un diagrama
d d
del flujo que explica
d
detalladam ente el pro ada uno de los microccontroladores
oceso realizzado en ca
c el fin de obtener el
con e dato enviiado desde los bloque
es 2 y 3.

Figura 32.. Diagrama de flujo de


el proceso realizado
r en
n MICRO 1 y MICRO 2

El código comentado
o se encuentra en los
l anexoss. La comu
unicación se
s
r
realiza pro medio de polling, essto quiere decir
d que se
s realiza una consulta
c
constante, generalme
ente hacia un dispositivo de harrdware, pa
ara crear un
na
a
actividad sincrónica sin
s el uso de
d interrupciones. Entonces, en el momen
nto
e que se
en n dato, el microcontro
e reciba un olador lo almacenará
a á para lueg
go

 
ponerlo en el puerto B. Este puerto es conectado directamente a la tarjeta de
adquisición de datos de LabView® donde se realiza un procesamiento de la
información recibida.

4.2. BLOQUE 2: APLICADOR

El elemento más importante de este bloque es el TAG pues éste


contendrá la información de interés en el sistema. Una vez se ha programado
el elemento, la jeringa se llevará hacia la estación tres. Allí el maniquí
actuará de acuerdo a su estado actual y futuro que se verá modificado en el
momento en que el transponder es acercado al segundo módulo lector que,
como fue mencionado previamente, será el encargado de culminar con el
ciclo de identificación en el sistema.

En el diagrama de funcionamiento del módulo (Figura 20), se observa que


en el segundo bloque, están presentes un sensor, un microcontrolador y un
transmisor de RF, esto sucede ya que otra de las acciones importantes que
ocurren en esta etapa es la de carga del medicamento, pues de ella depende
la dosis que se programa en el TAG por parte de la primera estación. Con el
fin de encontrar la cantidad medida se hace uso de un sensor de efecto hall
que se coloca estratégicamente en el émbolo mientras que en la parte
inferior de la jeringa (justo donde se encuentra el pivote) se coloca un imán,
esto con el fin de que se puedan medir los cambios en la densidad de un
flujo magnético a medida que se emula el movimiento de carga de la
medicina. La señal proveniente del sensor pasa a través de un
microcontrolador que se encarga de realizar una conversión análoga a digital
y por medio de su módulo de comunicación serial, envía los datos de manera

 
inalámbrica a la primera estación por medio del transmisor de RF con
referencia TLP434.

4.2.1 Programación del microcontrolador Anteriormente se mencionó que


la jeringa contiene tres elementos importantes, el sensor de efecto hall, el
módulo RF que envía los datos hacia el bloque 1 y el microcontrolador. Este
último está encargado de hacer el acondicionamiento de la señal análoga
que es un indicador de la densidad de flujo medida por el sensor
seleccionado, el UGN3503; para luego enviar tal dato procesado hacia el
ordenador en donde se podrá visualizar la cantidad de medicamento.

Para hacer esto posible, es necesario utilizar el modulo de conversión


análogo digital que posee el ATmega8, nuevamente la programación se
realiza en lengua C++ por las ventajas anteriormente mencionadas.

El módulo de conversión análogo-digital del microcontrolador Atmega8


convierte una entrada análoga de voltaje en un valor digital de 10 bits a
través de una aproximación sucesiva, quiere decir que posee un registro de
10 bits en el que se guarda el valor de la conversión. Este registro se
denomina como ADC, debido a que tiene un tamaño de 10 bits, el resultado
de la conversión tiene una resolución de 2^10.

El registro ADC está conectado a un multiplexor de 8 canales


correspondientes a las entradas de voltaje análogo que van a ser
convertidas. El valor mínimo de la conversión representa GND y el valor
máximo representa el voltaje que fue escogido como eferencia, el Atmega8
permite que la referencia sea externa (en el pin de AVCC o AREF) o interna

 
de 2.56V. El tipo de referencia se escoge configurando el registro ADMUX
del módulo ADC.

El módulo ADC ese habilita configurando el bit ADEN en el registro ADCSRA,


el resultado de 10 bits que genera el ADC se guarda en dos registros de
datos ADCH y ADCL. Por defecto, el resultado se presenta justificado a la
derecha, pero opcionalmente se puede justificar a al izquierda configurando
el bit ADLAR en el registro ADMUX.

Si el resultado se justifica a la izquierda y solo se requiere de una precisión


de 8 bits es suficiente con leer el registro ADCH, de otra manera se debe leer
primero el registro ADCL y luego el ADCH para asegurarse de que el
contenido de los registros de datos pertenecen a la misma conversión. Una
vez que se ha leído el ADCL, el acceso a los registros de datos es
desactivado, o bloqueado, esto significa que si el ADCL es leído, y una
conversión se completa sin haberse leído el ADCH, el registro no se actualiza
ni pierde el resultado de la conversión. Cuando se lee ADCH el acceso de
datos a los registros es nuevamente habilitado.
El conversor ADC posee su propia interrupción, la cual puede ser producida
cuando se ha completado una conversión, o también cuando el acceso entre
los registros ADCH y ADCL está restringido, la interrupción se producir aún si
el resultado se pierde. A continuación se realiza una explicación detallada de
los registros del conversor análogo-digital.

ADMUX: ADC MULTIPLEXER SELECTION REGISTER.

 
• MUX4:0 (Analog Chanel and Gain Selection): el valor de estos bits
selecciona cuales combinaciones de entradas son conectadas al
conversor. En la siguiente tabla se presentan alguno de los valores.
Para nuestro caso en particular escogimos la combinación de ADC0
para la entrada individual que proviene de la señal del sensor.

Tabla 13. Configuraciones de los bits MUX.

• ADLAR (ADC LEFT ADJUST RESULT): Este bit afecta la


presentación del resultado de la conversión en el registro ADC.
Cuando el bit se pone en 1 el resultado se justifica a la izquierda, de
o contrario estará configurado a la derecha. En la figura 33 se
ilustra el efecto de este bit en el registro ADC.
Figura 33. Efecto bit ADLAR sobre conversión

 
• REFS1:0 (REFERENCE SELECTION BIT): con estos bits se
selecciona el voltaje de referencia para el conversor, en la
siguiente tabla se observa cual es el voltaje seleccionado
dependiendo de su configuración. Para nuestro caso, escogimos
que el voltaje en el pin AREF sería nuestro voltaje de referencia,
este voltaje es de 5V en la práctica.

TABLA14. Configuración valores REFS.

ADCSRA: ADC CONTROL STATUS REGISTER A.

 
• ADPS2:0 (ADC Prescaler Select Bits): Estos bits determinan el
factor de división entre la frecuencia XTAL y el clock de entrada al
conversor, es decir configuran el valor del Prescaler, en nuestro
caso escogimos un valor de 8. La siguiente tabla muestra los
posibles valores que se pueden configurar.

Tabla 15. Configuraciones ADPS en el ATmega8.

• ADIE (ADC Interrupt Enable): Cuando se configura este bit como 1,


y el bit I en el SREG se pone en 1, la bandera que indica que la
conversión se ha completado se activa.
• ADIF (ADC Interrupt Flag): este bit se pone en 1 cuando la
conversión se ha completado y cuando los registros de datos son
actualizados.
• ADATE (ADC Auto Trigger Enable): cuando este bit se pone en 1,
la producción automática, se habilita, es decir que se habilita la
posibilidad de que una conversión se provoque con un flanco
positivo de una “señal causante” seleccionada. La fuente de la

 
señal causante se selecciona configurando el bit ATS en el registro
SFIOR.
• ADCSC (ADC Start Conversion): en modo de conversión simple, se
configura este bit en 1 para empezar cada conversión, un modo
“Free Running” se pone este bit en uno para empezar la primera
conversión. Este bit permanece en uno mientras que se realiza la
conversión, una vez que esta se ha completado vuelve a su valor
inicial (0).
• ADEN (ADC Enable): Cuando se pone este bit en 1, se habilita el
conversor, si se pone en cero durante una conversión que está en
proceso, cancela dicha conversión.

ADC: ADC DATA REGISTER.

• ADC9:0 (ADC Conversion Result): Es el registro en el que se


guarda el resultado de la conversión, si se usan canales
diferenciales el resultado se presenta en forma de complemento a
dos. Cuando se lee ADCL, el registro de datos no se actualiza
hasta que no se haya leído ADCH. Consecuentemente, si el
resultado se justifica a la izquierda y no más de 8 bits de precisión
son necesarios, es suficiente con leer ADCH, de otra forma se lee
primero ADCL y luego ADCH.

SFIOR: SPECIAL FUNCTION IO REGISTER.

 
• ADTS2:0 (ADC Auto Trigger Source): Si el bit ADATE en el registro
ADCSRA se configure en 1, el valor en estos bits selecciona que
fuente producirá una conversión. Como y se mencionó antes la
conversión se producirá con un flanco positivo de la fuente
seleccionada. En la siguiente tabla se especifican cuáles son las
distintas fuentes y modos que se seleccionan con estos bits

Tabla 16. Configuraciones ADTS en el ATmega8.

Teniendo en cuenta esta información se inicializó el módulo con las


siguientes características:

• Se habilita el ADC con Prescaler 8


• Selección de AREF como voltaje de referencia

Inicialmente se pensó que era conveniente enviar los datos convertidos


directamente al ordenador para luego procesaros allí, sin embargo, se

 
encontró que se obtenían errores muy grandes teniendo en cuenta la
sensibilidad de la medición y que en algunas ocasiones el valor enviado no
arribaba bien al destino debido a una mala comunicación en los módulos de
RF.

Para solucionar estos errores, se asigno a un rango de voltaje análogo de


entrada un valor específico, y este valor sí es enviado hacia el ordenador, en
donde se procesa. Para encontrar este rango de voltajes se tuvieron que
hacer varias pruebas prácticas. Se conectó un multímetro a la salida del
sensor y se midió el voltaje máximo y mínimo de cada intervalo por décima
de mililitro. Esto se debe a que tal y cómo se encontró anteriormente,
ninguna dosis puede ser mayor a 1 ml. En la siguiente figura se pueden
encontrar los resultados obtenidos.

Figura 34. Jeringa a escala y valores enviados al bloque 1 teniendo como


referencia voltaje de salida del sensor.

Al lado izquierdo de la figura 34 se encuentra la medida del intervalo a


escala. Aproximadamente cada uno de los limites de capacidad tienen 2 mm
 
de distancia entre ellos. Cómo se dijo anteriormente, el imán se encuentra en
el embolo y a medida que el sensor se aleja del pivote, el voltaje de salida
comienza a disminuir considerablemente. Una vez el estudiante llena la
jeringa, el voltaje de salida puede variar, pero el dato enviado es diferente y
corresponde a un rango de voltajes específico. Por ejemplo, si el practicante
carga 0,7 ml del fármaco, el voltaje de salida el sensor puede variar entre los
2,7832 V y los 2,842 V pero el dato que llega al ordenador es 76 y
corresponde a una medida de 0,7 ml. Esto hace que la información obtenida
sea más confiable.

Nuevamente se debe inicializar el módulo USART tal y cómo se realizó para


los microcontroladores del bloque 1 (MICRO 1 y MICRO 2). El formato de
trama tiene 8 bits de datos, un bit de parada y una velocidad de transmisión
de 2400 baudios.
Una vez los módulos ADC y USART se configuran, se comienzan a recibir
datos de la conversión análoga- digital, a cada uno de estos se les debe
asignar un valor de acuerdo a los resultados obtenidos que pueden ser
verificados en la figura 34. Finalmente estos valores se envían serial e
inalámbricamente hacia el bloque 1 donde la información será utilizada para
determinar la dosis que se le debe inyectar al neonato. Esta información es
recibida por el MICRO 2 que se encuentra sincronizado con el MICRO 3 pues
tienen los mismos parámetros dentro de su protocolo.

Para comprender mejor el programa realizado en MICRO 3, se realizó un


diagrama de flujo que muestra el funcionamiento del ATmega8 en este
bloque.

 
Figura 35. Diagrama de flujo de MICRO 3.

4.3 BLOQUE 3: IDENTIFICADOR (MANIQUÍ)

Para el estudiante de medicina, ésta estación es la más dinámica y la que


determina si la acción realizada fue la indicada o no. Aunque la primera
estación también juzgará la decisión del practicante, desde una simulación
virtual del modelo, la evaluación física del paciente lo enfrenta a la realidad.
Para lograr que el neonato reaccione, es necesario instalar un lector de RFID
que pueda leer la información que se encuentra en el TAG. Debido a que el
 
módulo lector solo actúa como un intermediario, debe existir otro dispositivo
que envíe las palabras de control adecuadas para acceder a los datos
necesarios contenidos en el transponder, que básicamente son el tipo de
medicamento y la dosis del mismo. El dispositivo que hace esto posible es un
microcontrolador programado especialmente para que lea el TAG justo en el
momento en que estudiante se dispone a inyectar al modelo.

Una vez leída la información del TAG es necesario procesarla para


determinar qué reacción debe ocurrir en el neonato de acuerdo a su estado
actual, del medicamento y la dosis que se ha programado en la jeringa. Es
decir, el simulador físico tendrá la capacidad de cambiar su comportamiento
a partir de los efectos que se produzcan debido a la elección tomada por los
estudiantes.

Cómo ya se mencionó, se escogieron cuatro medicinas específicamente:


Adenosina, Atropina, Adrenalina y Terbutalina luego de una exhausta
investigación. Cada una de ellas se utiliza para un propósito diferente pero
físicamente se expresan de forma similar en el paciente. La tabla 17 resume
los medicamentos escogidos con sus respectivos usos y sus efectos
adversos.

Tabla 17. Tabla de medicamentos


Medicina Uso Efectos Adversos
(Reacciones)
Convertir a ritmo sinusal de la Arritmia transitorias
Adenosina taquicardia Enrojecimiento transitorio de la
piel
Taquicardia
Adrenalina Aumento de la frecuencia Arritmia Cardiaca
cardiaca

 
Arritmia
Atropina Revertir Bradicardia sinusal Fiebre
severa

Terbutalina Aumento de la frecuencia Fiebre


cardiaca

Como se observa en la tabla, los efectos producidos afectan la frecuencia


cardiaca y la temperatura, por ello, el maniquí poseerá un circuito en donde
se emula el sonido del corazón a diferentes frecuencias dependiendo de si
es taquicardia (frecuencia alta), bradicardia (frecuencia baja), paro cardiaco
(frecuencia muy baja) o si el estado del neonato es normal. En el caso de
que se produzca rubicundez (enrojecimiento) por efectos de fiebre, unas
señales luminosas se podrán observar en la superficie del maniquí. Con el fin
de poder mostrar si el paciente sufre un cambio de temperatura severo, se
utilizará una pantalla de cristal líquido que indica el pulso del neonato y la
temperatura del mismo.

Una vez se pueden observar los efectos de las medicinas sobre el maniquí
se procede a enviar esta información hacia el ordenador nuevamente de
forma inalámbrica con un módulo de RF de referencia TLP418.

A continuación se explicará en mayor detalle la programación de cada uno


de los microcontroladores utilizados en este bloque y lo circuitos
implementados para lograr las reacciones en el neonato.

4.3.1 Reacciones A continuación se presenta una breve descripción de los


circuitos implementados para lograr percibir los cambios y los efectos de los
medicamentos sobre el maniquí en el simulador físico.

 
4.3.1.1 Frecuencia cardiaca La reacción más frecuente frente a la
aplicación de los fármacos recomendados es el cambio de la frecuencia
cardiaca. El estudiante puede detectar las variaciones por medio de dos
formas: palpando el movimiento de alguna arteria que pase cerca de la piel,
en el caso de los neonatos se realiza en su cordón umbilical; o se puede
auscultar el corazón por medio de un fonendoscopio. Simular ambos efectos
es bastante complicado, sin embargo, se pensó en que emular el sonido del
corazón por medio del circuito LM555 es sencillo si se logra activarlo para
que suene de acuerdo a la frecuencia cardiaca.

El corazón realiza dos movimiento, sístole y diástole, cada uno de ellos


produce un sonido diferente, el primero (60 Hz) es más agudo que el
segundo (45 Hz). El periodo promedio de estos movimientos en un adulto es
de 0,013 segundos. Sin embargo, en un recién nacido, el periodo promedio
es de 0,007 segundos, entre cada uno de los sonidos hay aproximadamente
10 ms se diferencia. Esto es muy importante pues el esquema pensado para
simular el sonido del corazón del recién nacido considera la activación del
circuito en modo astable a una frecuencia de 60 Hz seguido (a los 10 ms) por
otra activación del circuito, esta vez a una frecuencia de oscilación de 45 Hz.
En la figura 36 se presenta un esquema general del circuito a implementar.

 
Figura 36. Circuito preliminar

El primer paso para hacer esto posible es encontrar la configuración


adecuada del circuito integrado LM555 para que opere en modo de oscilador
o en modo astable. Si el circuito se conecta como se muestra en la figura 37
(los pines dos y seis conectados entre sí), el circuito se disparará
automáticamente y trabajará como multivibrador. El capacitor externo se
carga a través de las resistencias RA+RB y se descargará por RB. Por lo
tanto, el ciclo útil puede ser determinado a partir del valor de estos dos
resistores.

Figura 37. LM555 como oscilador monoestable.

 
En este modo de operación, el capacitor se carga y se descargar entre
1/3Vcc y 2/3Vcc. La frecuencia de oscilación es independiente del voltaje de
alimentación del circuito integrado y para poder calcularla es necesario tener
en cuenta la siguiente ecuación:

Cómo ya se mencionó anteriormente, esta frecuencia será de 45 Hz y de 60


Hz, el paso siguiente será calcular los valores de las resistencias y el
condensador. En caso de tener un condensador de 100 nF, y que RB tenga
un valor de 10 kΩ, entonces para lograr que resuene a 60 Hz y 45 Hz, RA
debe ser de 240 kΩ y 320 kΩ respectivamente.

Con el fin de activar cada frecuencia por medio de interruptores, se utilizó el


circuito integrado CD4007 para que actúe como switch semiconductor. Esto
es, el microcontrolador tendrá la capacidad de activar el circuito oscilador de
acuerdo al sonido que se esta produciendo (sea diástole o sístole), esto se
realizará activando el interruptor del CD4007, lo que su vez permitirá el paso
de corriente hacia la resistencia RB donde comenzara a cargarse el
condensador y de ésta forma se podrá escuchar el sonido en el parlante que
actúa como resistencia de carga en la salida del circuito. En la figura 38 se
puede encontrar el circuito completo implementado.

 
Figura 38. Circuito implementado que simula sonido del corazón

Los transistores P-MOS que se activan con el microcontrolador deben tener


un ‘0’ lógico en la entrada y de esta forma la resistencia RB se conectará
directamente al pin 7 del circuito LM555 y en ese momento el circuito sonará
a la frecuencia de 60 Hz o 45 Hz. Cabe anotar que todo el circuito se
encuentra alimentado con 5 V.

4.3.1.2 Temperatura corporal Por otro lado, el neonato puede sufrir cambios
en la temperatura, debido a que es muy complejo lograr una calentamiento
del maniquí, se opto por mostrar en una pantalla de cristal liquido la
temperatura corporal del bebe de acuerdo a su estado actual. En el momento
de aplicar un medicamento que le produzca fiebre, se podrá observar un
cambio en el LCD, en este caso, se utilizará una de 16x2.

La mayoría de las pantallas LCD poseen un microcontrolador cuya referencia


es HD44780; de modo que la práctica consistía básicamente en comunicar el
atmega16 con el microcontrolador interno del dispositivo, que es el que
gobierna todas las instrucciones y en si el funcionamiento de la pantalla LCD.

 
Entonces, es necesario tener en cuenta todos los comandos que hacen que
el funcionamiento del display sea el adecuado.

La configuración de pines del LCD de 16X2 es la siguiente:

Tabla18. Pines LCD 16x2.

La descripción de los pines, es la siguiente:


• RS: Este bit es el que se encarga de seleccionar, o diferenciar si el
dato que recibe el LCD corresponde a una instrucción o a un dato,
con un “0” lógico interpreta una instrucción y con “1” un dato.
• R/W: Este bit se encarga de diferenciar entre el modo de lectura o
escritura de la siguiente manera: con un “1” se configura el LCD de
modo de lectura y con un “0” en modo de escritura, para nuestros
intereses particulares en la práctica, solo vamos a escribir en el
display, de modo que este bit se puso a “0” por defecto.
• E (Enable): Este bit se encarga de permitir el paso de datos hacia el
display, con un flanco de bajada se cargan los datos al display.
Entonces, dependiendo del estado de los bits RS, RW y E, es
necesario enviar de manera coordinada (con un tiempo de ejecución
específico) un determinado set de instrucciones o comandos para

 
operar correctamente el display. Algunos de estos comandos son los
descritos en la tabla 19.

Tabla 19. Comandos LCD 16 x2.

La descripción de cada uno de estos comandos es la siguiente:

• Clear Display: Se borra, o se limpia la pantalla del display y el cursor


se ubica en la posición “home” (o inicial) correspondiente a la dirección
0.
• Return Home: Devuelve el cursor a la posición inicial y además si hay
información desplazada en la pantalla, también la desplaza a la
posición inicial, la información de la DDRAM no se modifica.
• Entry Mode Set: Establece la dirección del movimiento del cursor y así
mismo habilita o deshabilita el desplazamiento del display, este

 
procedimiento se realiza por medio de un decremento o incremento
del contador de la dirección.
• Display ON/OFF control: Se encarga de encender o pagar el display
(D), apagar o encender el cursor (C), y además de controlar el
parpadeo del carácter o cursor en determinada posición (B).
• Cursor and Display Shift: Mueve el cursor o el display sin modificar el
contenido de la DDRAM
• Function Set: Configura el tamaño del dato (DL), el número de líneas
que se van a utilizar en el display (L), y la fuente del carácter (F).

Según las especificaciones, la mayoría de los LCD necesitan de rutinas de


inicialización en las que se especifica el modo de funcionamiento, existen
dos modos en los que el control de display puede ser implementado, en la
interfaz de 8 bits, ó en la interfaz de 4 bits. Para la interfaz de 8 bits, como su
nombre lo indica, se utilizan las ocho líneas de datos para enviar las
instrucciones al controlador, de modo que todo un byte se transfiere por un
acceso.

Para la interfaz de 4 bits, se utilizan sólo las cuatro líneas de datos


correspondientes al nibble alto del byte (es decir D4 a D7). Bajo este modo
de operación es necesario entonces, transmitir un byte por medio de dos
accesos, en el primero de ellos se transmite el nibble alto de la instrucción y
luego el nibble bajo de la misma. Este modo es un poco más eficiente
teniendo en cuenta que los pines del D0 al D3 se pueden dejar sin conexión
y se pueden configurar como salidas en el modo de lectura.

Algunos de estos comandos se especifican en la tabla 20.

 
Tabla 20. Instrucciones varias LCD 16x2.

La información presentada nos permite programar el microcontrolador para


que se pueda visualizar en el LCD la temperatura del neonato. También se
decidió que se pudiera mostrar la frecuencia cardiaca del mismo. De tal
modo que en la pantalla de cristal liquido se podrán monitorear dos signos
vitales del maniquí. Más adelante se comentará el código diseñado y
programado en el microcontrolador de las reacciones.

4.3.1.3 Rubicundez La última reacción implementada es una simulación de


rubicundez en el maniquí. Esto se refiere a un color rojo o sanguíneo que se
presenta como fenómeno morboso en la piel y en las membranas mucosas y
que en los bebes puede ser fácilmente detectable sobre la superficie de su
rostro. Esto se realizó por medio de LEDs de color rojo puestos en su cara.

 
4.3.2 Programación microcontrolador (Control lector) Antes de comenzar
a explicar cómo se programó el microcontrolador, es importante mencionar
que fue necesario utilizar un MAX232 para lograr la comunicación entre el
lector de RFID que posee una interfaz RS232 y el ATmega16. El circuito
integrado MAX232 cambia los niveles TTL a los del estándar RS-232 cuando
se hace una transmisión, y cambia los niveles RS-232 a TTL cuando se tiene
una recepción. El circuito típico se muestra en la siguiente figura:

Figura 39. Configuración típica del MAX 232.

Más adelante se detallará el circuito implementado. Con el fin de poder leer


la información que se encuentra en el TAG se diseñó un programa que
permite guardar la información almacenada en los bloques ocho, nueve y
diez del sector dos en este dispositivo que corresponden al tipo de
medicamento, la dosis y el peso el neonato respectivamente.

 
Cuando el TAG se encuentra en el campo de detección del lector de RFID,
éste inmediatamente se identifica, lo que quiere decir que el microcontrolador
recibirá constantemente una cifra de 8 símbolos y cada uno se puede
representar en código ASCII o hexadecimal, en este caso la cifra recibida es:
44CD92CD. Debido a que se está usando un ATmega16, es más sencillo
discriminar la cifra en código hexadecimal, para ello, se utilizó la siguiente
tabla en donde se encuentran las diferentes conversiones.

Tabla 21. Codificación ASCII.

 
Así pues, en hexadecimal la cifra “44CD92CD” es 34-34-43-44-39-32. En el
momento en que el microcontrolador reciba un “4”, quiere decir que el TAG
está listo para ser leído. Por ello, en ese momento se debe enviar la cadena
“ssl02AAFFFFFFFFFFFF” para acceder al sector dos. Inmediatamente, el
TAG responderá nuevamente con una “L” que en hexadecimal equivale a 4C,
lo que quiere decir que se ha loggeado correctamente en el TAG y se
pueden comenzar a leer cada uno de los bloques de este sector que han
sido programados con anterioridad por medio del programador de RFID que
está ubicado en el bloque 1 y que ya ha sido explicado anteriormente.

A continuación se envía la cadena “rv08” e inmediatamente se comienza a


almacenar el vector de 8 caracteres, en la variable vector. Cuando esto ha
finalizado, se envía la siguiente cadena “rv09” cuyos caracteres se
almacenaran en vector1 y finalmente se en envía la ultima cadena “rv0A”
cuyos caracteres se almacenan en el vector2.

Luego, estos vectores deberán ser examinados para determinar el tipo de


medicamento, la dosis y el peso del neonato que se programó inicialmente
en el TAG.

En cualquier momento de la comunicación el microcontrolador podrá recibir:


“N”, “F” y “?” ; lo que quiere decir que no se encuentra un TAG en el campo
de detección, que no se ha logrado acceder al sector correctamente y que no
se entiende la instrucción enviada; respectivamente. Por ello, en cada
proceso del programa diseñado, se debe tener en cuenta que en caso de
recibir estos caracteres es necesario enviar la siguiente cadena nuevamente:
“ss”, eso obligará al TAG a reportarse nuevamente al lector RFID y
nuevamente se deberá realizar el proceso anteriormente descrito.

 
En la figura
a a continua
ación se en
ncuentra un
n diagrama de flujo qu
ue describe el
p
proceso de
e lectura de datos en el
e TAG.

Figura 40. Diagrama de


d flujo miccrocontrolad
dor Control de Lector De
D RFID.

El bloque ocho possee la info


ormación acerca
a del tipo de medicamen
m nto
m
mientras qu
ue el bloqu
ue nueve provee
p el da
ato de la dosis,
d y porr último en el
b
bloque diez
z se encuen
ntra la inforrmación ace eso del neonato. Estoss 3
erca del pe
v
valores deb
ben ser evvaluados po
or el microccontroladorr, una vez esto ha sid
do
r
realizado se
s procede a cambiar el estado del
d puerto A que está conectado
oa
o
otro ega16 que controla los circuitos electrónicos que emulan las
ATme
rreacciones. A continu
uación se encuentra
e u
una tabla en
e donde se indica cu
uál

 
reacción se produce de acuerdo al procesamiento de los datos obtenidos del
TAG.

Tabla 22. Decodificación microcontrolador que controla Lector de RFID.

Tipo de medicamento  Pesos  Dosis  Reacción 


vector1: 
Indicada  vector2: 00002000 o menos Disminuye frecuencia cardiaca
00000100‐‐ 
1 Kg  Sobredosis vector2: 00003000 o más  Paro y rubicundez 
vector1: 
vector: 00000002 ‐‐  Indicada  vector2: 00004000 o menos Disminuye frecuencia cardiaca
00000200‐‐
Adenosina 
2 Kg  Sobredosis vector2: 00005000 o más  Paro y rubicundez 
vector1: 
Indicada  vector2: 00006000 o menos Disminuye frecuencia cardiaca
00000300‐‐ 
3 Kg  Sobredosis vector2: 00007000 o más  Paro y rubicundez 
vector1: 
Indicada  vector2: 00002000 o menos Aumenta frecuencia cardiaca 
00000100‐‐ 
1 Kg  Sobredosis vector2: 00003000 o más  Taquicardia 
vector1: 
vector: 00000003 ‐‐  Indicada  vector2: 00004000 o menos Aumenta frecuencia cardiaca 
00000200‐‐
Adrenalina 
2 Kg  Sobredosis vector2: 00005000 o más  Taquicardia 
vector1: 
Indicada  vector2: 00006000 o menos Aumenta frecuencia cardiaca 
00000300‐‐ 
3 Kg  Sobredosis vector2: 00007000 o más  Taquicardia 
vector1: 
Indicada  vector2: 00002000 o menos Aumenta frecuencia cardiaca 
00000100‐‐ 
1 Kg  Sobredosis vector2: 00003000 o más  Taquicardia 
vector1: 
vector: 00000004 ‐‐  Indicada  vector2: 00004000 o menos Aumenta frecuencia cardiaca 
00000200‐‐
Atropina 
2 Kg  Sobredosis vector2: 00005000 o más  Taquicardia 
vector1: 
Indicada  vector2: 00006000 o menos Aumenta frecuencia cardiaca 
00000300‐‐ 
3 Kg  Sobredosis vector2: 00007000 o más  Taquicardia 
vector1: 
Indicada  vector2: 00001000 o menos Aumenta frecuencia cardiaca 
00000100‐‐ 
1 Kg  Sobredosis vector2: 00002000 o más  Taquicardia y fiebre 
vector1: 
vector: 00000005 ‐‐  Indicada  vector2: 00002000 o menos Aumenta frecuencia cardiaca 
00000200‐‐
Terbutalina 
2 Kg  Sobredosis vector2: 00003000 o más  Taquicardia y fiebre 
vector1: 
Indicada  vector2: 00003000 o menos Aumenta frecuencia cardiaca 
00000300‐‐ 
3 Kg  Sobredosis vector2: 00004000 o más  Taquicardia y fiebre 

 
En cuanto a la dosis, al indicar: vector2:00002000 o menos, quiere decir que
se acepta los valores menores a éste, por ejemplo: vector2:00001000. Lo
mismo cuando se indica: vector2:00003000 o más, pues se refiere por
ejemplo a vector2:00004000.

El maniquí también tiene la capacidad de almacenar el estado anterior,


entonces, si el bebe se encuentra con taquicardia, lo más correcto e indicado
es inyectar Adenosina, pero en caso de haberle causado una sobredosis
entonces el neonato entrará en paro, y nuevamente será necesario inyectar
adrenalina, lo que a su vez incrementará el ritmo cardiaco.

Para lograr almacenar éste estado, se creó una variable entera global en el
programa, que permite controlar el ritmo cardiaco en el que se encuentra el
neonato. La variable se denomina: cardio_bebe. A partir de su valor, se
puede determinar la frecuencia cardiaca que debe activarse, una vez se ha
reconocido el medicamento. En la tabla a continuación se puede observar a
partir del estado actual y al medicamento inyectado, cuál debe ser su estado
futuro y algunos casos especiales que incluyen fiebre y rubicundez.

 
Tabla 23. Tabla estados futuros con base en estado actual.

ESTADO ACTUAL 
0 1 2 3  4
Indicada   0 0 1 2  3
Adenosina 
Sobredosis  0 0 1 1  1
Indicada   1 2 3 4  4
Adrenalina 
Sobredosis  2 4 4 4  4
Indicada   1 2 3 4  4
Atropina 
Sobredosis  2 4 4 4  4
Indicada   1 2 3 4  4
Terbutalina 
Sobredosis  2 4 4 4  4
Frecuencia cardiaca 
Estados  (pulsaciones por minuto)
4  220 
3  140 
2  80 
1  40 
0  PARO 
   Fiebre 
   Rubicundez 

Lo que indica la tabla anterior es que si por ejemplo, el neonato se encuentra


en estado tres, que equivale a una frecuencia cardiaca de 140, y se le aplica
una inyección de Terbutalina con la dosis indicada, entonces pasará a un
estado cuatro y a tener una frecuencia cardiaca de 220 y fiebre. Mientras que
si el maniquí se encuentra en estado uno y se le aplica una inyección de
Adenosina con la dosis indicada entonces pasará a estado 0 donde tendrá
paro y sufrirá de rubicundez.

Anteriormente se mencionó que el microcontrolador que controla el lector de


RFID en el maniquí es diferente al microcontrolador que realiza la activación
de las reacciones en el simulador físico, esto se debe a que no todo se logró

 
realizar en un solo dispositivo ya que su capacidad de memoria es muy
limitada.

Por ello, es necesario que el microcontrolador que identifica la reacción envíe


señales al microcontrolador que activa las reacciones. Esto se realiza por
medio del puerto A que varía su estado de acuerdo a la información
procesada. De tal forma que al cambiar a estado alto o bajo cada uno de los
pines de este puerto, se esta indicando las condiciones de salud del neonato.
La reacción se activa con un ‘1’ lógico. De tal forma que los pines se activan
cuando:

• PIN A7Æ El neonato sufre de taquicardia (pulso 220)


• PIN A6Æ El neonato se encuentra normal (pulso 140)
• PIN A5Æ El neonato sufre de bradicardia alta (pulso 80)
• PIN A4Æ El neonato sufre de bradicardia baja (pulso 40)
• PIN A3Æ El neonato sufre de paro (pulso 24)
• PIN A2Æ Este pin se utiliza para indicar que hay un cambio= ‘1’
• PIN A1Æ El neonato sufre de fiebre
• PIN A0Æ El neonato sufre de rubicundez

Por lo tanto, si el neonato se encuentra con paro y rubicundez, el puerto A


tendrá la siguiente configuración (desde el bit más significativo al menos):
00001101. Mientras que si sufre de taquicardia y fiebre el puerto A será:
10000110. Estos indicadores son los que finalmente indican cual es el efecto
del medicamento sobre el simulador físico, una vez el aplicador se ha
acercado al bloque 3 o identificador. El programa diseñado, compilado y
programado en el microcontrolador se encuentra al final de este informe, en
los anexos.

 
4.3.3 Programación microcontrolador (Reacciones) Para programar este
microcontrolador es importante leer el puerto A del microcontrolador
anteriormente descrito, pues a partir de estos cambios se determina la acción
que debe producirse en el maniquí. Por ello, el puerto B del dispositivo que
controla las reacciones se conectará a aquel del puerto A del dispositivo que
las identifica.

Antes de evaluar las entradas en el puerto es necesario inicializar el LCD


escribiendo en su primera línea: “Temp:” y en su segunda línea “Frec_cardi:”.
Las operaciones de escritura en la pantalla de cristal líquido de 16 x 2 se
realizaron con base en su funcionamiento que fue explicado anteriormente
en la sección de reacciones. Para lograr escribir en el LCD se tuvieron en
cuenta los siguientes procesos que pueden ser encontrados en el código de
este microcontrolador que se encuentra en los anexos.

• Lcd_init: Inicialización del display


• lcd_data: Proceso para enviar un dato al LCD
• set_cursor: Desplazamiento del cursor
• lcd_command: Proceso para enviar una orden al LCD
• lcd_enable: Generación del flanco de bajada en el enable
• lcd_string: Proceso para ingresar texto al LCD

En el proceso lcd_init, se envían las instrucciones o palabras de control


correspondientes a la inicialización del display, además, en este proceso
hemos configurado un carácter propio en la CGRAM del LCD, de modo que

 
en nuestro controlador las palabras de control enviadas en la inicialización
son las siguientes:

• 0b00000010: Con ésta instrucción se especifica que se va a trabajar


bajo la interfaz de 4 bits.
• 0b00101000: Se envía esta instrucción para especificar que se va a
trabajar, en el modo de 4 bits, una línea y con matrices de 5*8 pixeles.

Una vez se ha inicializado la pantalla de cristal líquido, se procede a


inicializar el módulo USART tal y cómo se realizó para los microcontroladores
del bloque 1 (MICRO 1 y MICRO 2). El formato de trama tiene 8 bits de
datos, un bit de parada y una velocidad de transmisión de 2400 baudios.
Esto se debe a que de acuerdo a la figura 20, MICRO 1 se comunicará
inalámbricamente por medio de los módulos de RF con este microcontrolador
para poder determinar el estado de salud del neonato.

A continuación se procede a leer el valor en los pines del puerto B. De


acuerdo a eso surgen las siguientes reacciones:

• PIN B7Æ El neonato sufre de taquicardia (pulso 220). En el LCD se


podrá observar inmediatamente que la frecuencia cardiaca cambia a
220 y además se podrá escuchar la simulación del sonido del corazón
del neonato. Esto se realiza por medio del circuito anteriormente
explicado, primero se activa el sonido más agudo, es decir se pone un
nivel bajo en la salida del pin A0 o pin 40 del ATmega16 e
inmediatamente se pone un nivel bajo en la salida del pin A1 o pin 39
del ATmega16. Este ciclo se repite constantemente, lo que hace que

 
el sonido sea periódico hasta que el PIN B2 tenga un estado bajo en
su entrada, lo que indica que va a producirse una nueva reacción. En
este caso, el ciclo es el siguiente:
_delay_ms(10);//(NO suena)
_delay_ms(100);//(suena)
_delay_ms(30);//(NO suena)
_delay_ms(150); //(suena)
• PIN B6Æ El neonato se encuentra normal (pulso 140). En el LCD se
podrá observar inmediatamente que la frecuencia cardiaca cambia a
140 y además se podrá escuchar la simulación del sonido del corazón
del neonato. Esto se realiza por medio del circuito anteriormente
explicado, primero se activa el sonido más agudo, es decir se pone un
nivel bajo en la salida del pin A0 o pin 40 del ATmega16 e
inmediatamente se pone un nivel bajo en la salida del pin A1 o pin 39
del ATmega16. Este ciclo se repite constantemente, lo que hace que
el sonido sea periódico hasta que el PIN B2 tenga un estado bajo en
su entrada, lo que indica que va a producirse una nueva reacción. En
este caso, el ciclo es el siguiente:
_delay_ms(150);//(NO suena)
_delay_ms(100);//(suena)
_delay_ms(30);//(NO suena)
_delay_ms(150); //(suena)
• PIN B5Æ El neonato sufre de bradicardia alta (pulso 80). En el LCD se
podrá observar inmediatamente que la frecuencia cardiaca cambia a
80 y además se podrá escuchar la simulación del sonido del corazón
del neonato. Esto se realiza por medio del circuito anteriormente
explicado, primero se activa el sonido más agudo, es decir se pone un
nivel bajo en la salida del pin A0 o pin 40 del ATmega16 e
inmediatamente se pone un nivel bajo en la salida del pin A1 o pin 39
del ATmega16. Este ciclo se repite constantemente, lo que hace que
el sonido sea periódico hasta que el PIN B2 tenga un estado bajo en

 
su entrada, lo que indica que va a producirse una nueva reacción. En
este caso, el ciclo es el siguiente:
_delay_ms(150);//(NO suena)
_delay_ms(170);//(NO suena)
_delay_ms(180);//(suena)
_delay_ms(30);//(NO suena)
_delay_ms(220); //(suena)
• PIN B4Æ El neonato sufre de bradicardia baja (pulso 40). En el LCD
se podrá observar inmediatamente que la frecuencia cardiaca cambia
a 40 y además se podrá escuchar la simulación del sonido del corazón
del neonato. Esto se realiza por medio del circuito anteriormente
explicado, primero se activa el sonido más agudo, es decir se pone un
nivel bajo en la salida del pin A0 o pin 40 del ATmega16 e
inmediatamente se pone un nivel bajo en la salida del pin A1 o pin 39
del ATmega16. Este ciclo se repite constantemente, lo que hace que
el sonido sea periódico hasta que el PIN B2 tenga un estado bajo en
su entrada, lo que indica que va a producirse una nueva reacción. En
este caso, el ciclo es el siguiente:
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(suena)
_delay_ms(50);//(NO suena)
_delay_ms(250); //(suena)
_delay_ms(50); //(suena)
• PIN B3Æ El neonato sufre de paro (pulso 24). En el LCD se podrá
observar inmediatamente que la frecuencia cardiaca cambia a 24 y
además se podrá escuchar la simulación del sonido del corazón del
neonato. Esto se realiza por medio del circuito anteriormente
explicado, primero se activa el sonido más agudo, es decir se pone un

 
nivel bajo en la salida del pin A0 o pin 40 del ATmega16 e
inmediatamente se pone un nivel bajo en la salida del pin A1 o pin 39
del ATmega16. Este ciclo se repite constantemente, lo que hace que
el sonido sea periódico hasta que el PIN B2 tenga un estado bajo en
su entrada, lo que indica que va a producirse una nueva reacción. En
este caso, el ciclo es el siguiente:
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(NO suena)
_delay_ms(250);//(suena)
_delay_ms(50);//(NO suena)
_delay_ms(250); //(suena)
_delay_ms(50); //(suena)
• PIN B2Æ Este pin se utiliza para indicar que hay un cambio= ‘1’
• PIN B1Æ El neonato sufre de fiebre. En estado normal, el neonato
tiene una temperatura corporal de “35.5°” lo que puede ser
comprobado en la pantalla de cristal liquido, mientras que cuando
sufre de fiebre, se escribirá cobre la misma que el maniquí tiene una
temperatura de “38.5°”.
• PIN B0Æ El neonato sufre de rubicundez. Se activan los 6 LEDs que
se encuentran en el puerto A del microcontrolador.

Es de aclarar que en cada uno de los casos se le informa al ordenador el


estado del neonato. Para ello, cada vez que se produce un cambio, se envía
un señuelo (se envía por USART un 0x0C) que indica que se ha producido
un cambio en el estado del neonato de acuerdo a la medicina que se le ha

 
aplicado. De tal forma que cuando el PIN B2 se activa (‘1’), se envía una
palabra de control (0x0C) al computador gracias al modulo RF que también
ha sido mencionado anteriormente. Esta información es recibida por el
MICRO 1 que se encuentra sincronizado con este microcontrolador pues
tienen los mismos parámetros dentro de su protocolo. De acuerdo al tipo de
medicamento, la dosis y el peso del neonato que anteriormente habían sido
programados en el primer bloque, el ordenador sabrá que reacción debe
continuar una vez se ha producido el cambio en el maniquí y está se podrá
observar en el recuadro de indica ESTADO DE SALUD DEL NEONATO.
Este recuadro se puede observar en la figura a continuación.

Figura 41. Interfaz que indica estado de salud del neonato.

A continuación se presenta en diagrama de flujo del programa realizado en el


microcontrolador que permite las reacciones.

 
Figura 42. Diagrama de flujo miccrocontrolador REACC
CIONES

 
5. HARDWARE IMPLEMENTADO

En esta sección se presentan los distintos montajes de cada una de las


etapas que forman el proyecto. Se realiza una breve descripción de los
circuitos implementados con su esquema y su respectivo circuito impreso. Se
adjuntarán algunas fotografías correspondientes al resultado final luego de
su total implementación.

5.1 BLOQUE 1: PROGRAMADOR DE MEDICAMENTOS

Como se mencionó previamente, en el programador de medicamentos, se


utilizaron algunos circuitos para poder cumplir con las funciones principales
de éste módulo, uno de estos circuitos es el que se encarga de permitir el
establecimiento de la comunicación entre el computador y el lector de RFID,
y los demás corresponden a los que contienen los microcontroladores y los
receptores de RF que capturan las señales del segundo y tercer bloque
respectivamente. Así como también la tarjeta de adquisición de datos que se
comunica directamente con los circuitos receptores.

 
El primer circuito, es básicamente una extensión de los pines del de
transmisión, recepción y referencia del puerto RS232 del computador,
conectados a la interfaz RS232 del módulo lector de RFID.

En la figura 43 se muestran las dimensiones del módulo de RFID utilizado así


como sus conectores principales, entre los que se encuentra el conector J3
que tiene los pines de la interfaz de comunicación que fue utilizada.

De acuerdo a esta figura podemos ver que prácticamente son necesarios 4


pines para poder establecer la comunicación.

 
Figura 43. Dimensiones y conectores del módulo lector de RFID.

Así que el circuito implementado para alimentar el módulo de RFID y


conectar el puerto serial del computador a su interfaz RS232, consta de un
conector de 4 pines correspondientes al +5V, GND, RX y TX del módulo, un
conector de 9 pines para los pines del puerto serial, un regulador de 5V
(7805), y un conector de 2 pines en los que se ubicará una batería de 9V que
 
alimentará el circuito en general, la disposición del circuito impreso final, se
observa en la figura 44.

Figura 44. Circuito Impreso del circuito que alimenta y comunica al módulo de
RFID con el computador.

En la figura 45 se observan las dimensiones del circuito en su vista 3D donde


solo se incluyen los objetos como conectores, sin embargo posteriormente se
adjuntan fotografías del circuito implementado físicamente.

 
Figura 45. Circuito en 3D del circuito que alimenta y comunica al módulo de
RFID con el computador.

Con respecto a los circuitos receptores que se comunican con la tarjeta de


adquisición de datos, son 2 circuitos que se componen de un
microcontrolador (ATMEGA 8), un conector apropiado para la conexión de
los módulos receptores de RF, un conector para las salidas digitales y la
entrada de su respectiva alimentación.

En las siguientes figuras se ilustra la disposición de su circuito impreso, de


sus dimensiones a partir de su visualización tridimensional y finalmente las
fotografías que evidencian su implementación física.

 
Figura46. Layout del circuito que receptor de la información proveniente del
aplicador o del maniquí.

Figura 47. Circuito en 3D del receptor de la información proveniente del


aplicador o del maniquí.

 
Figura 48. Tarjeta de adquisición de datos utilizada (De National
Instruments).

5.2 BLOQUE 2: APLICADOR (JERINGA)

En esta etapa del proyecto, se hace uso de un microcontrolador (ATMEGA8),


un transmisor de RF (TRP434) que consta de 4 pines, una batería de 9V, un
regulador de 5V (7805), y el sensor de efecto Hall (UGN3503) que tiene 3
pines. El montaje de éste circuito se realizó de tal forma que fuera posible
implantarlo en una jeringa de 50 ml de una manera cómoda. Así pues, el
circuito tiene un esquemático como el que se presenta en la figura 49.

 
Figura 49. Esquemático del circuito implementado en el aplicador (Jeringa)

De acuerdo a este esquemático, el circuito impreso tendrá la siguiente forma


y su respectiva visualización tridimensional con sus medidas físicas reales se
presenta a continuación.

Figura 50. PCB del circuito del aplicador

 
Figura 51. Circuito del aplicador en 3D

5.3 BLOQUE 3: IDENTIFICADOR (MANIQUÍ)

El identificador consta de dos circuitos, uno de ellos es el que se encarga de


controlar el módulo lector de RFID y procesa la información que éste captura
de la etiqueta de RFID, de aquí se envían unas palabras de control al
segundo circuito que es en el que se producen las señales de reacción del
neonato.

Con respecto al circuito que controla al lector de RFID, está compuesto por
los siguientes elementos:

Un microcontrolador (ATMEGA16), una batería de 9 V, un regulador de 5 V


(7805), un MAX232 para establecer la comunicación con el módulo de RFID
por medio de la interfaz RS232 (incluyendo los condensadores que permiten
una configuración apropiada para la comunicación), un conector de 4 pines
para las 4 entradas de la interfaz de comunicación propia del módulo de
RFID, un pulsador para la ejecución de las operaciones de identificación, y el
conector de los pines de salida por medio de los cuales se envían las

 
palabras de control hacia el circuito encargado de producir las señales de
reacción.

El esquemático de éste circuito se ilustra en la siguiente figura.

Figura 52. Esquemático del circuito controlador del módulo lector de RFID en
el maniquí.

El circuito impreso, fue diseñado de la siguiente manera:

 
Figura 53. PCB del circuito controlador del módulo lector de RFID en el
maniquí.

Las dimensiones reales de este circuito se observan a continuación

Figura 54. PCB del circuito controlador del módulo lector de RFID en el
maniquí.

 
Por su parte, el circuito donde se generan las señales de reacción está
compuesto por los siguientes elementos: Una batería de 9 V, un regulador de
5 V (7805), un ATMEGA16, el circuito utilizado para la generación de
sonidos del corazón (monoestable 555, condensadores y resistencias y
compuerta CMOS), 6 diodos emisores de luz (rojos) para emular la
rubicundez, el transmisor de RF (4 pines) y un conector de 8 pines
correspondientes a las entradas de donde provienen las palabras de control
que indican que reacciones son las que deben ser producidas. En este
circuito se incluye la pantalla de cristal líquido, por ello se hace necesaria la
presencia de un conector de 14 pines desde los cuales se accede a dicha
pantalla.

El esquemático de este circuito está dispuesto de la siguiente manera:

Figura 55. Esquemático del circuito de las reacciones.

El circuito impreso cuenta con el siguiente diseño:

 
Figura 56.PCB del circuito de las reacciones.

Las dimensiones físicas reales, se ilustran en la siguiente visualización


tridimensional del circuito.

Figura 57. Esquemático del circuito de las reacciones.  

 
6. RESULTADOS

Los resultados obtenidos fueron bastante satisfactorios. El módulo se


implementó tal y como se explico anteriormente. Con el fin de realizar las
pruebas finales se simulo el procedimiento que debe efectuar un estudiante
de medicina en el momento de usar el maniquí.

i) Se selecciona el tipo de medicamento


ii) Se selecciona el peso del neonato
iii) Se carga el medicamento en la jeringa
iv) Se programa la jeringa
v) Se acerca la jeringa al maniquí
vi) Se “inyecta” el contenido de la jeringa en su cordón umbilical
vii) Se observa la reacción del maniquí
viii) Se verifica el estado de salud del neonato en el computador que
corresponde a su vez a la reacción física del simulador.

Una vez realizado este proceso, y haber verificado que efectivamente la


reacción del maniquí es consecuente con la decisión realizada por el
practicante, se puede concluir que el modelo implementado es apropiado
para el entrenamiento médico del equipo de neonatología.

En las figuras a continuación se pueden encontrar las fotos correspondientes


a cada uno de los bloques mencionados anteriormente y se hace una breve
descripción de lo que puede observarse en cada uno de ellos.

6.1 BLOQUE 1: PROGRAMADOR DE MEDICAMENTOS

 
La interfaz del programador de medicamentos se puede observar en la figura
58, en ella se encuentra la selección del peso del neonato y la selección de
medicamento, esto se realiza manualmente desplegando la lista de opciones
por cada ítem. Cabe anotar que en el caso del peso hay tres opciones: 1 Kg,
2 Kg y 3 Kg. Mientras que por el lado de la selección del medicamento hay 4
opciones, entre ellas: Adenosina, Adrenalina, Atropina y Terbutalina. Por otro
lado, también se encuentra la visualización de la carga del medicamento que
puede llegar hasta 1 ml, cómo se dijo anteriormente, esta carga se realiza en
el bloque 2 pero el efecto de su movimiento puede verse en la pantalla del
ordenador. Una vez estos 3 elementos han sido seleccionados de acuerdo a
la decisión del practicante del equipo de neonatología, se procede a
programar el TAG que se encuentra en el aplicador, para ello se oprime el
botón de programar y una vez se ha culminado exitosamente ésta operación,
se encenderá el botón de listo. Finalmente se podrá acercar la jeringa al
maniquí y una vez éste ha reaccionado, llegará un mensaje a la pantalla y
aparecerá en la sección que se denomina: ESTADO DE SALUD DEL
NEONATO, en esta pantalla pueden aparecer los siguientes mensajes:

• Taquicardia 220
• Normal 140
• Bradicardia 80
• Bradicardia 40
• Paro
• Taquicardia 220 y fiebre
• Paro y rubicundez

 
Figura 58. Interfaz del programador de medicamentos en LabView ®

El primer bloque también consta de dos cajas, en una de ellas se ubica el


circuito que se compone del lector de RFID, el conector RS232 para la
conexión con el ordenador y un regulador de 5 V que alimenta el lector de
RFID encargado de programar el TAG. Ésta caja es utilizada en el momento
en que se va a escribir sobre la etiqueta electrónica, una vez se ha
seleccionado el medicamento, peso y dosis, el TAG debe ser aproximado a
esta caja para luego, en el momento de presionar el botón de programar, la
información pase del ordenador a la etiqueta.
Esta caja se puede observar en la figura 59 y en la figura 60se puede
observar el contenido de la misma.

 
Figura 59. Caja del programador de RFID

Sobre la cubierta superior de la caja en la figura anterior se debe colocar el


TAG cuando va a ser programado. Véase figura 61.

Figura 60. Contenido de la caja del programador de medicamentos.

Este bloque también incluye una sección de adquisición de datos que


provienen del bloque 2 y del bloque 3. Esta caja también fue realizada, y está

 
compuesta por la tarjeta de adquisición de datos de LabView ®, dos circuitos,
cada uno tiene un receptor de RF (cada uno de diferente frecuencia como se
ha explicado anteriormente), un microcontrolador ATmega8 (MICRO 1 y
MICRO 2 en la figura 20) y un regulador de 5 V.

Figura 61. Programación del TAG.

Esta caja se debe conectar directamente a un puerto USB del computador, lo


que permite a la tarjeta de adquisición de datos comenzar a operar una vez
se han recibido la información de los bloques 2 y 3. La figura 62 muestra la
imagen de esta caja.

 
Figura 62. Caja de adquisición de datos.

En la figura 63 se encuentra el bloque 1 completo, incluyendo cada una de


las cajas mencionadas anteriormente.

Figura 63. Bloque 1: PROGRAMADOR DE MEDICAMENTOS.

6.2 BLOQUE 2: APLICADOR (JERINGA)

 
El Aplicador de compone de una jeringa, su circuito y el TAG. El circuito de
este bloque se compone de un transmisor de RF que opera a 434 MHz, un
sensor de efecto hall y un microcontrolador (MICRO 3) que se encarga de
realizar la conversión análoga-digital de la señal que llega del sensor. La
Jeringa posee una medida de 1 ml a escala, que esta a su vez dividida en 10
divisiones, por ello, cada división corresponde a una decima de mililitro. El
funcionamiento detallado de este bloque ya fue explicado anteriormente y su
imagen se encuentra en la figura 64.

Figura 64. Bloque aplicador

La escala de medición a la que se hizo referencia anteriormente se puede


detallar en la figura 65. Esta escala se realizó con base en los datos
obtenidos a partir del acondicionamiento de señal del sensor de efecto Hall
que se ubica en su embolo.

 
Figura 65. Escala de la jeringa.

En la siguiente figura, también se puede observar el microcontrolador en


detalle, su ubicación es estratégica pues se encuentra aislada del contacto
del estudiante en el dispositivo.

Figura 66. ATmega 8 en la jeringa.

6.3 BLOQUE 3: IDENTIFICADOR (MANIQUÍ)

 
Finalmente se encuentra el bloque del identificador que se compone del
maniquí que reacciona de acuerdo a la información que contiene el TAG.
Para que el lector pueda leer el TAG adecuadamente se debe acercar la
jeringa al abdomen simulando una cateterización umbilical pues esta vía
permite la fácil administración de fármacos y líquidos intravasculares. Para
ello, el practicante debe ubicar la vena umbilical y su arteria. Un recién
nacido puede cateterizarse después de 4 o 5 días de su nacimiento. El modo
de administración se puede ver en la figura 67.

Figura 67. Modo de administración de los medicamentos.

Una vez el maniquí ha reconocido debidamente la medicina, comenzará a


reaccionar, para cada una de las combinaciones, existe un efecto diferente,

 
es decir, el hecho de aplicar un medicamento implicaría un cambio en la
salud del neonato de forma inmediata.

Dentro de las posibles reacciones esta el cambio en la frecuencia cardiaca


que puede visualizarse en la pantalla de cristal líquido, y puede auscultarse
en el interior del neonato. También se encuentra la rubicundez del maniquí o
la fiebre que también puede ser vista en el LCD. Estas reacciones pueden
verse en las figuras 68 y 69 a continuación.

Figura 68. Pantalla de cristal líquido que indica la temperatura y la frecuencia


cardiaca.

 
Figura 69. Rubicundez en el recién nacido.

Las luces en la imagen anterior tienen un color rojo intenso para llamar la
atención del practicante de medicina.

6.4 COSTO TOTAL DEL MÓDULO REALIZADO

El módulo se compone de los siguientes elementos.

 
Tabla 24. Costo módulo implementado

Unidades Componentes módulo Costo unitario Costo total


1 Computador $ 3.000.000,00 $ 3.000.000,00
1 Licencia Labview ® $ 4.300.000,00 $ 4.300.000,00
1 Tarjeta de dquisión de datos de LabView® $ 500.000,00 $ 500.000,00
2 Lectores RFID $ 170.000,00 $ 340.000,00
1 TAG $ 5.000,00 $ 5.000,00
2 ATmega16 $ 12.000,00 $ 24.000,00
3 ATmega8 $ 5.500,00 $ 16.500,00
5 Reguladores 7805 $ 500,00 $ 2.500,00
1 Modulo RF TLP434 y RLP434 $ 29.000,00 $ 29.000,00
1 Modulo RF TLP418 y RLP418A $ 68.000,00 $ 68.000,00
1 Max232 $ 5.500,00 $ 5.500,00
1 LCD 16X2 $ 12.000,00 $ 12.000,00
1 Audifonos $ 2.000,00 $ 2.000,00
1 Cable serial RS232 $ 10.000,00 $ 10.000,00

TOTAL $ 8.314.500,00

Como se puede observar, el costo del módulo implementado es de


aproximadamente 8.314.500 pesos. Esto incluye todos los componentes que
aparecen en la lista. Entre otros elementos están las resistencias, los LEDs y
otros que no se incluyen por su bajo costo.

 
7. CONCLUSIONES

Inicialmente RFID nace como una necesidad para reemplazar los códigos de
barras en la detección de objetos con el fin de poder almacenar una mayor
cantidad de datos que identifiquen al producto en una etiqueta electrónica y
que a su vez, estos puedan ser reprogramados cuando se requiera. Este tipo
de aplicaciones de producción y uso masivo de TAG’s son lo más conocidos
y utilizados en el mundo. Sin embargo, durante la realización de este
proyecto se ha podido evidenciar que la tecnología de identificación por
radiofrecuencia puede tener otro tipo de aplicaciones específicas con el uso
de una o varias etiquetas, en distintos campos, en este caso, en el de
instrumentación médica para entrenamiento de estudiantes.

Se implementó exitosamente un módulo RFID para lograr que un maniquí de


entrenamiento medicó pueda identificar el tipo de medicamento y su dosis
para luego reaccionar de acuerdo a la información obtenida. Esta reacción es
una simulación de los efectos que produce un fármaco y su cantidad en un
neonato en la vida real, lo que tomo mucho tiempo de investigación y trabajo
con el doctor asesor de la tesis Luis Carlos Méndez Córdoba.

Inicialmente se pensaba que la inyección de medicinas en cualquier tipo de


paciente implicaba sólo el hecho de cargar el medicamento tal y cómo se
entrega en la ampolleta y se ignoraban factores como la dilución del fármaco,
pues en el caso de los neonatos, no soportarían las concentraciones
indicadas que llegan directamente de un laboratorio. Por ello, para realizar el
proyecto se tuvo que realizar una ardua investigación acerca de la forma de
suministrar las los medicamentos a los neonatos incluyendo las soluciones
apropiadas para diluir las sustancias. Además, se desconocía inicialmente

 
que la dosis dependiera directamente del peso del neonato, esta variable es
de gran consideración pues de lo contrario el proceso no seria consecuente
con la realidad.

Durante la preparación y realización del proyecto ha sido posible evidenciar


la importancia de realizar proyectos interdisciplinarios que impliquen la
colaboración de distintas ramas de la ciencia, en donde el trabajo conjunto
de investigación y desarrollo sea una integración de conocimientos en los
que se gesten ideas
Y aplicaciones de la tecnología que permitan beneficiar a la comunidad para
una determinada tarea, en este caso, aportar a la preparación de los futuros
médicos del país.

Se espera que en futuras investigaciones acerca de este tema se pueda


mejorar el módulo implementado con el fin de complementar y adicionar
nuevas funciones o aplicaciones que permitan una mejor educación y
preparación, con mayor realismo, teniendo en cuenta la complejidad de los
procedimientos, intervenciones y eventualidades que pueden darse en un
escenario donde se trata con la vida humana.

 
8. RECOMENDACIONES

El proyecto realizado puede ser optimizado por medio del uso de


microcontroladores con mayor capacidad de memoria y por medio de otros
elementos de transmisión inalámbrica. Realmente no se lograron los mejores
resultados con los módulos de RF ya que cada vez más se están utilizando
estas frecuencias libres y las señales que interfieren en los datos leídos
provienen de fuentes externas que no pueden ser controladas por el usuario
de éste módulo. En caso de seguir utilizando estos módulos, es necesario
adaptar una antena adecuada que permite direccionar el envió de
información de forma adecuada. Se espera que en futuras investigaciones,
se puedan perfeccionas estas comunicaciones con tecnologías como X.bee.

Por otro lado, en caso de poder trabajar con microcontroladores con más
capacidad de memoria, se espera que e pueda extender la cantidad de
medicinas simuladas, y que también se puedan generar otras reacciones en
el maniquí para asemejar en mayor medida el comportamiento del simulador
con la vida real y de esta forma se pueda mejorar significativamente el
entrenamiento del equipo de neonatología.

 
BIBLIOGRAFÍA

HUNT. V. Daniel, PUGLIA Albert, PUGLIA Mike. RFID – A Guide to Radio


Frequency Identification. Willey, 2007, 201p.

CLOHERTY. John P. Manual de neonatología. Wolters Kluwer España,


2008, 06 ed. 755p. ISBN: 978-84-96921-19-1

HOSAKA. Ryosuke. An Analysis for Specifications of Medical Use RFID


System as a Wireless Communication. EN. Conference of the IEEE EMBS
(Cité Internationale, Lyon, France August 23-26, 2007)

BARKIN. R.M, ROSEN, P. Urgencias Pediátricas, 2000, 05 ed. ISBN:


9788481744262

SERRANO O. Cecilia. “Manejo y Administración de medicamentos en


neonatología” Internet:
(www.prematuros.cl/webenfermerianeonatal/septiembre2006/medicamentos.
pdf)

ACG HF Mifare Easy Module User Manual.

MF1ICS50 Functional Specification


 

 
ANEXO A
 

#include <avr/io.h>
#include <util/delay.h>

#ifndef F_CPU //define cpu clock speed if not defined


#define F_CPU 8000000
#endif

unsigned char uart_recibir(void);


unsigned char temp3;

// Inicialización del puerto USART


void usart_init (void)
{
// Se habilitan las líneas de transmisión y recepción
UCSRB |= (1 << RXEN) | (1 << TXEN);

UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);// Tamaño de los datos de 8
bits

// Se cargan los 8 bits menos signifiativos del baud rate en el registro UBRRL
(Low)
UBRRL = 0x00;

// Se cargan los 8 bits mas signifiativos del baud rate en el registro UBRRH (High)
UBRRH = 0x19;

UCSRB |= (1 << RXCIE); // Enable the USART Recieve Complete interrupt (USART_RXC)
}

void main (void)


{
DDRB = 0xFF; // port B output
usart_init ();
for(;;)
{
temp3=uart_recibir();
PORTB=temp3;
}
}

unsigned char uart_recibir(void)


{
while( !( UCSRA & ( 1 << RXC) ) );

return UDR;
}

 
ANEXO B
 

#include <avr/io.h>
#include <util/delay.h>

#ifndef F_CPU //define cpu clock speed if not defined


#define F_CPU 8000000
#endif

unsigned char uart_recibir(void);


unsigned char temp3;

// Inicialización del puerto USART


void usart_init (void)
{
// Se habilitan las líneas de transmisión y recepción
UCSRB |= (1 << RXEN) | (1 << TXEN);

UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);// Tamaño de los datos de 8
bits

// Se cargan los 8 bits menos signifiativos del baud rate en el registro UBRRL
(Low)
UBRRL = 0x00;

// Se cargan los 8 bits mas signifiativos del baud rate en el registro UBRRH (High)
UBRRH = 0x19;

UCSRB |= (1 << RXCIE); // Enable the USART Recieve Complete interrupt (USART_RXC)
}

void main (void)


{
DDRB = 0xFF; // port B output
usart_init ();
for(;;)
{
temp3=uart_recibir();
PORTB=temp3;
}
}

unsigned char uart_recibir(void)


{
while( !( UCSRA & ( 1 << RXC) ) );

return UDR;
}

 
ANEXO C

#include <avr/io.h>
#include <util/delay.h>

#ifndef F_CPU //define cpu clock speed if not defined


#define F_CPU 8000000
//#define F_CPU 3686400
//#define F_CPU 1000000
#endif
#define USART_BAUDRATE 9600
//#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)

#define RECIBIDO PORTB


#define REC_DDR DDRB

unsigned char sentByte;


unsigned char temp3;
unsigned char x,y,var;
unsigned int b,c,z,w;
void ADC_init();
void proceso1();

// Inicialización del puerto USART


void usart_init (void)
{
// Se habilitan las líneas de transmisión y recepción
UCSRB |= (1 << RXEN) | (1 << TXEN);

UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);// Tamaño de los datos de 8
bits

// Se cargan los 8 bits menos signifiativos del baud rate en el registro UBRRL
(Low)
UBRRL = 0x00;

// Se cargan los 8 bits mas signifiativos del baud rate en el registro UBRRH (High)
UBRRH = 0x0C;

UCSRB |= (1 << RXCIE); // Enable the USART Recieve Complete interrupt (USART_RXC)

void ADC_init()
{

// Se habilita el ADC con Prescaler 8


ADCSRA = (1<<ADEN) | (1<<ADPS0)| (1<<ADPS1);

// Seleccion de AREF como voltaje de referencia


ADMUX = (0<<REFS1) | (0<<REFS0) | (1<<ADLAR);

void proceso1() {

ADMUX = (0<<MUX0) | (0<<MUX1)| (0<<MUX2)| (0<<MUX3)| (1<<ADLAR);

//Start conversion
ADCSRA |= (1<<ADSC);

// wait until converstion completed


while (ADCSRA & (1<<ADSC)) {}

// get converted value

 
x = ADCH;
// output the higher 8 bits
PORTB = x;

if ((x < 0xBC || x == 0xBC) && x > 0xBA) // 0 a 2


{
var = 0x03;
}

if ((x < 0xBA || x == 0xBA) && x > 0xAF) // 2 a 4


{
var = 0b00000110; // 6
}

if ((x < 0xAF|| x == 0xAF) && x > 0xA6) // 4 a 6


{
var = 0b00001100;// 12
}

if ((x < 0xA6 || x == 0xA6) && x > 0x9D ) // 6 a 8


{
var= 0b00011000; // 24
}

if ((x < 0x9D || x == 0x9D) && x > 0x96 ) // 8 a 10


{
var = 0b00110000; // 48
}

if ((x < 0x96 || x == 0x96) && x > 0x91 ) // 10 a 12


{
var = 0b01100000; // 96
}

if ((x < 0x91 || x == 0x91) && x > 0x8E ) // 12 a 14


{
var = 0b01000011; // 67
}

if ((x < 0x8E || x == 0x8E) && x > 0x8B ) // 14 a 16


{
var = 0b01000110; //70
}

if ((x < 0x8B || x == 0x8B) && x > 0x87 ) // 16 a 18


{
var = 0b01001100; // 76
}

if ((x < 0x87 || x == 0x87) && x > 0x84 ) // 16 a 18


{
var = 0b01111110; // 126
}

if (x < 0x84 || x == 0x84) // 18 a 20


{
var = 0b00001111; // 15
}

PORTB = var;

UDR = var;
while(!(UCSRA & (1<<TXC)));
UCSRA=0x40;

void main (void)


{
DDRB = 0xFF; // port B output
ADC_init();

 
usart_init ();
for(;;)
{
proceso1();
}}

 
ANEXO D

#include <avr/io.h>
#include <avr/boot.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr\sfr_defs.h>
#include <util/delay.h>

#define FOSC 8000000 // Oscilador en Hz


#define PUERTO_CARDIO PORTA

/* prototipos de funcion y procesos */


void bucle (void);
void bucle1 (void);
void almacenar_valor (void);
void buscar_medicina (void);
void uart_enviar(unsigned char *, unsigned char);
unsigned char uart_recibir(void);

/* variables globales */
unsigned int cuenta;
unsigned char rx;
unsigned char *cadena = "ssl02AAFFFFFFFFFFFF";
unsigned char *cadena1 = "rv08";
unsigned char *cadena2 = "rv09";
unsigned char *cadena2a = "rv0A";
unsigned char *cadena3 = "Aden";
unsigned char *cadena4 = "Adre";
unsigned char *cadena6 = "Atro";
unsigned char *cadena7 = "Terb";
unsigned char *cadena8 = "Est0";
unsigned char *cadena9 = "Est1";
unsigned char *cadena10 = "Est2";
unsigned char *cadena11 = "Est3";
unsigned char *cadena12 = "Est4";
unsigned char *cadena13 = "Pesa1";
unsigned char *cadena14 = "Pesa2";
unsigned char *cadena15 = "Pesa3";
unsigned char *cadena16 = "Pesa4";
unsigned char *cadena5 = "ss";
unsigned char vector[];
unsigned char vector1[];
unsigned char vector2[];
unsigned int k=0;
unsigned int t=0;
unsigned int j=0;
unsigned int i=0;
unsigned int cardio_bebe=4;

int main (void)


{

UBRRH=0x00;
UBRRL=0x33; //Baud rate = 9600
UCSRA=0x00;
UCSRB=0x18; //TXEN=1 y RXEN=1 (Habilitacion Transmision y Recepcion)
UCSRC=0x86; //1 bit Stop. 8 bits por Caracter
DDRA=0xFF;
PUERTO_CARDIO=0xFF;
cuenta=0;
DDRB=0x00;
PORTB=0xFF;
PUERTO_CARDIO=0b11111111;//OJOOOOOOOOO esta puerto controla estado del
bebe(taquicardia, bradicardia, normal o paro)
bucle();
}

//Este proceso se utiliza para enviar las cadenas de caracteres al lector


void uart_enviar (unsigned char *dato, unsigned char cant_dato)

 
{
unsigned char i;

for(i = 0; i < cant_dato; i++)


{
_delay_ms(800);
UDR = *(dato+i);
while(!(UCSRA & (1<<TXC)));
UCSRA=0x40;
}

//Esta función se realiza cada vez que se espera recibir un dato


unsigned char uart_recibir(void)
{

while( !( UCSRA & ( 1 << RXC) ) );

return UDR;
}

//Este proceso se realiza para esperar que el TAG se encuentra identifique


void bucle(void)
{
while(1)
{
k=0;
t=0;
j=0;
i=0;
//PORTA |= (0<<2);
rx = uart_recibir();
if (rx==0x34) // recibe un 4
{
PORTA=0x01;
uart_enviar(cadena, strlen(cadena) );
buclei();
}
if (rx==0x46) // Caracter F (Failure)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x4E) // Caracter N (No Tag Found)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x3F) // Caracter ? (What?)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
}
}

// Este proceso se realiza para esperar hasta que el lector indique que se ha realizao
una identificación exitosa
void buclei(void)
{
while(1)
{
rx = uart_recibir();
if (rx==0x4C) //recibe L
{
PORTA=0x01;
uart_enviar(cadena1, strlen(cadena1) );
bucle1();
}
if (rx==0x46) // Caracter F (Failure)

 
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x4E) // Caracter N (No Tag Found)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x3F) // Caracter ? (What?)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
}
}

// Este proceso se realiza para esperar al envio del valor por parte del lector9
void bucle1(void)
{

while(1)
{
rx = uart_recibir();
if (rx==0x4C)
{
uart_enviar(cadena1, strlen(cadena1) );
}
if (rx==0x30)// si el caracter recibido es 0 entonces que comience a
almacenar el valor
{
//uart_enviar(cadena3, strlen(cadena3) );
almacenar_valor();
}
if (rx==0x46) // Caracter F (Failure)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x4E) // Caracter N (No Tag Found)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x3F) // Caracter ? (What?)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
}
}

//Este proceso se realiza para almacenar los valores de los bloques 4


void almacenar_valor(void)
{
unsigned char n;
while(1)
{
rx = uart_recibir();
//uart_enviar(cadena4, strlen(cadena4) );
vector[k]=rx;
k++;
if (k==7){ // no se alcanza a almacenar el valor 7 llega hasta
vector[6]
uart_enviar(cadena2, strlen(cadena2) );
almacenar_valor1();
if (rx==0x46) // Caracter F (Failure)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}

 
if (rx==0x4E) // Caracter N (No Tag Found)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x3F) // Caracter ? (What?)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
}

}
}

//Este proceso se realiza para almacenar los valores de los bloques 5


void almacenar_valor1(void)
{
unsigned char n;
while(1)
{
rx = uart_recibir();
//uart_enviar(cadena4, strlen(cadena4) );
vector1[t]=rx;
t++;
if (t==8){ // no se alcanza a almacenar el valor 8 llega hasta
vector1[7]
uart_enviar(cadena2a, strlen(cadena2a) );
almacenar_valor2();
if (rx==0x46) // Caracter F (Failure)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x4E) // Caracter N (No Tag Found)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x3F) // Caracter ? (What?)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
}

}
}

void almacenar_valor2(void)
{
unsigned char n;
while(1)
{
rx = uart_recibir();
//uart_enviar(cadena4, strlen(cadena4) );
vector2[j]=rx;
j++;
if (j==8){ // no se alcanza a almacenar el valor 8 llega hasta
vector1[7]
//uart_enviar(cadena2, strlen(cadena2) );
buscar_medicina();
if (rx==0x46) // Caracter F (Failure)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
if (rx==0x4E) // Caracter N (No Tag Found)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();

 
}
if (rx==0x3F) // Caracter ? (What?)
{
uart_enviar(cadena5, strlen(cadena5) );
bucle();
}
}

}
}

// Este proceso se realiza para identificar la medicina y realiza la reacción


consecuente
void buscar_medicina(void)
{
// Proceso muyyyyy largooooooooooooooooooo
if (rx==0x46) // Caracter F (Failure)
{
bucle();
}
if (rx==0x4E) // Caracter N (No Tag Found)
{
bucle();
}
if (rx==0x3F) // Caracter ? (What?)
{
bucle();
}
if (vector2[7]==0x31) //¨1Kg
{
uart_enviar(cadena13, strlen(cadena13) );
if (vector[6]==0x32) //Adenosina
{
//1Kg
uart_enviar(cadena3, strlen(cadena3) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32) //Adenosina OK (Es menor a 0.2ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena12, strlen(cadena12) );
}
}
else// Adenosina Sobredosis (Es mayor a 0.2ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}

 
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=1;// Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena12, strlen(cadena12) );
}
}
}
if (vector[6]==0x33) //Adrenalina
{
//1Kg
uart_enviar(cadena4, strlen(cadena4) );
if(vector1[7]==0x30 || vector1[7]==0x31||vector1[7]==0x32)
//Adrenalina OK ( Es menor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Adrenalina Sobredosis (Es mayor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;

 
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
if (vector[6]==0x34) //Atropina
{
uart_enviar(cadena6, strlen(cadena6) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32) //Atropina OK ( Es menor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Atropina Sobredosis (Es mayor a 0.2ml)
{

if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}

 
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
if (vector[6]==0x35) //Terbutalina
{
uart_enviar(cadena7, strlen(cadena7) );
if(vector1[7]==0x30 || vector1[7]==0x31) //Terbutalina
OK ( Es menor a 0.1ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Terbutalina Sobredosis (Es mayor a 0.1ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}

 
}

//2Kg
//====================================================================================
=========
if (vector2[7]==0x32) //¨2Kg
{
uart_enviar(cadena14, strlen(cadena14) );
if (vector[6]==0x32) //Adenosina
{
//2Kg
uart_enviar(cadena3, strlen(cadena3) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34) //Adenosina OK
(Es menor a 0.4ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena12, strlen(cadena12) );
}
}
else// Adenosina Sobredosis (Es mayor a 0.4ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=1;// Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena12, strlen(cadena12) );
}
}
}

 
if (vector[6]==0x33) //Adrenalina
{
//2Kg
uart_enviar(cadena4, strlen(cadena4) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34) //Adrenalina
OK ( Es menor a 0.4ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Adrenalina Sobredosis (Es mayor a 0.4ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
if (vector[6]==0x34) //Atropina
{
uart_enviar(cadena6, strlen(cadena6) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34) //Atropina OK
( Es menor a 0.4ml)

 
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Atropina Sobredosis (Es mayor a 0.4ml)
{

if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
if (vector[6]==0x35) //Terbutalina
{
uart_enviar(cadena7, strlen(cadena7) );
if(vector1[7]==0x30 || vector1[7]==0x31||
vector1[7]==0x32) //Terbutalina OK ( Es menor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal

 
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Terbutalina Sobredosis (Es mayor a 0.2ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
}

//3Kg
//====================================================================================
=========
if (vector2[7]==0x33) //¨3Kg
{
uart_enviar(cadena15, strlen(cadena15) );
if (vector[6]==0x32) //Adenosina
{
//3Kg
uart_enviar(cadena3, strlen(cadena3) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36) //Adenosina OK (Es menor a 0.6ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;

 
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena12, strlen(cadena12) );
}
}
else// Adenosina Sobredosis (Es mayor a 0.6ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=1;// Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena12, strlen(cadena12) );
}
}
}
if (vector[6]==0x33) //Adrenalina
{
//3Kg
uart_enviar(cadena4, strlen(cadena4) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36) //Adrenalina OK ( Es menor a 0.6ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia

 
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Adrenalina Sobredosis (Es mayor a 0.6ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
if (vector[6]==0x34) //Atropina
{
uart_enviar(cadena6, strlen(cadena6) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36) //Atropina OK ( Es menor a 0.6ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;

 
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Atropina Sobredosis (Es mayor a 0.6ml)
{

if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
if (vector[6]==0x35) //Terbutalina
{
uart_enviar(cadena7, strlen(cadena7) );
if(vector1[7]==0x30 || vector1[7]==0x31||
vector1[7]==0x32|| vector1[7]==0x33) //Terbutalina OK ( Es menor a 0.3ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

 
}
else // Terbutalina Sobredosis (Es mayor a 0.3ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
}
/*//4Kg
//====================================================================================
=========
if (vector2[7]==0x34) //¨4Kg
{
uart_enviar(cadena16, strlen(cadena16) );
if (vector[6]==0x32) //Adenosina
{
//4Kg
uart_enviar(cadena3, strlen(cadena3) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36||vector1[7]==0x37||vector1[7]==0x38) //Adenosina OK (Es menor a
0.8ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;

 
uart_enviar(cadena12, strlen(cadena12) );
}
}
else// Adenosina Sobredosis (Es mayor a 0.8ml)
{
if (cardio_bebe==0) { //Paro
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena8, strlen(cadena8) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=0;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=1;//Paro
PUERTO_CARDIO=0b00001100;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=1;// Bradicardia1
PUERTO_CARDIO=0b00010100;
uart_enviar(cadena12, strlen(cadena12) );
}
}
}
if (vector[6]==0x33) //Adrenalina
{
//4Kg
uart_enviar(cadena4, strlen(cadena4) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36||vector1[7]==0x37||vector1[7]==0x38) //Adrenalina OK ( Es menor
a 0.8ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Adrenalina Sobredosis (Es mayor a 0.8ml)
{
if (cardio_bebe==4) { //Taquicardia

 
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
if (vector[6]==0x34) //Atropina
{
uart_enviar(cadena6, strlen(cadena6) );
if(vector1[7]==0x30 ||
vector1[7]==0x31||vector1[7]==0x32||vector1[7]==0x33||vector1[7]==0x34||vector1[7]==0x
35||vector1[7]==0x36||vector1[7]==0x37||vector1[7]==0x38) //Atropina OK ( Es menor a
0.8ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Atropina Sobredosis (Es mayor a 0.8ml)
{

if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal

 
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
if (vector[6]==0x35) //Terbutalina
{
uart_enviar(cadena7, strlen(cadena7) );
if(vector1[7]==0x30 || vector1[7]==0x31||
vector1[7]==0x32|| vector1[7]==0x33|| vector1[7]==0x34) //Terbutalina OK ( Es menor a
0.4ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=3;//Normal
PUERTO_CARDIO=0b01000101;
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=1;//Bradicardia1
PUERTO_CARDIO=0b00010101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
else // Terbutalina Sobredosis (Es mayor a 0.4ml)
{
if (cardio_bebe==4) { //Taquicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena12, strlen(cadena12) );
}
if (cardio_bebe==3) { //Normal
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena11, strlen(cadena11) );
}
if (cardio_bebe==2) { //Bradicardia
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;

 
uart_enviar(cadena10, strlen(cadena10) );
}
if (cardio_bebe==1) { //Bradicardia1
cardio_bebe=4;//Taquicardia
PUERTO_CARDIO=0b10000111;
uart_enviar(cadena9, strlen(cadena9) );
}
if (cardio_bebe==0) { //Paro
cardio_bebe=2;//Bradicardia
PUERTO_CARDIO=0b00100101;
uart_enviar(cadena8, strlen(cadena8) );
}

}
}
}*/

//else{uart_enviar(cadena10, strlen(cadena10) );} // Este else solo se


da para el ultimo caso, es decir, tocaria poner else despues de todos los otros
esperar();
}

void esperar(void){
if (bit_is_clear(PINB, 7)){
uart_enviar(cadena5, strlen(cadena5) );
bucle();
PORTA |= (0<<2);
}
else {
esperar();}
}

ANEXO E

#include<avr/io.h>
#include <util/delay.h>
#include <math.h>

 
// Definición de contsantes y puertos
#define CLEAR_DISPLAY 0x01
#define CURSOR_HOME 0x02
#define LCD_PORT PORTC
#define LCD_DDR DDRC // Asignación de pines para el LCD
#define LCD_RS 4
#define LCD_EN 5

void check_react (void)


{

// nibble alto para las salidas (columnas)


// nibble bajo para las entradas (filas)

DDRB=0x00;
PORTD=0xFF;
// se habilita el pullup interno para PB0-PB3

PORTB=0xFF;
//PORTA &= ~(1<<0);
//PORTA &= ~(1<<1);
PORTA &= ~(1<<2);
PORTA &= ~(1<<3);
PORTA &= ~(1<<4);
PORTA &= ~(1<<5);
PORTA &= ~(1<<6);
PORTA &= ~(1<<7);

if (bit_is_set(PINB, 1)) // Fiebre


{
set_cursor(6,1);
lcd_string("38.2");
lcd_data(0x00);
}
else{
set_cursor(6,1);
lcd_string("35.5");
lcd_data(0x00);
}
if (bit_is_set(PINB, 7)) // Taquicardia 200
{
set_cursor(12,2);
lcd_string("220 ");
while (bit_is_set(PINB, 2)){
_delay_ms(10);
PORTA &= ~(1<<0);
PORTA |= (1<<1);
_delay_ms(100);//(suena)
PORTA |= (1<<0);
PORTA |= (1<<1);
_delay_ms(30);
PORTA &= ~(1<<1);
PORTA |= (1<<0);
_delay_ms(150); //(suena)
PORTA |= (1<<0);
PORTA |= (1<<1);}
}
if (bit_is_set(PINB, 6)) // Normal 140
{
set_cursor(12,2);
lcd_string("140 ");
while (bit_is_set(PINB, 2)){
_delay_ms(150);
PORTA &= ~(1<<0);
PORTA |= (1<<1);
_delay_ms(100);//(suena)
PORTA |= (1<<0);
PORTA |= (1<<1);
_delay_ms(30);

 
PORTA &= ~(1<<1);
PORTA |= (1<<0);
_delay_ms(150); //(suena)
PORTA |= (1<<0);
PORTA |= (1<<1);}
}
if (bit_is_set(PINB, 5)) // Bradicardia 2 80
{
set_cursor(12,2);
lcd_string("80 ");
while (bit_is_set(PINB, 2)){
_delay_ms(150);
_delay_ms(170);
PORTA &= ~(1<<0);
PORTA |= (1<<1);
_delay_ms(180);
PORTA |= (1<<0);
PORTA |= (1<<1);
_delay_ms(30);
PORTA &= ~(1<<1);
PORTA |= (1<<0);
_delay_ms(220);
PORTA |= (1<<0);
PORTA |= (1<<1);}
}
if (bit_is_set(PINB, 4)) // Bradicardia 2 40
{
set_cursor(12,2);
lcd_string("40 ");
while (bit_is_set(PINB, 2)){
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
PORTA &= ~(1<<0);
PORTA |= (1<<1);
_delay_ms(250);
PORTA |= (1<<0);
PORTA |= (1<<1);
_delay_ms(50);
PORTA &= ~(1<<1);
PORTA |= (1<<0);
_delay_ms(250);
_delay_ms(50);
PORTA |= (1<<0);
PORTA |= (1<<1);}
}
if (bit_is_set(PINB, 3)) // Paro 20
{
set_cursor(12,2);
lcd_string("PARO");
if (bit_is_set(PINB, 0)) // Rojo
{
PORTA &= ~(1<<2);
PORTA &= ~(1<<3);
PORTA &= ~(1<<4);
PORTA &= ~(1<<5);
PORTA &= ~(1<<6);
PORTA &= ~(1<<7);
}
if (bit_is_clear(PINB, 0))
{
PORTA |= (1<<2);
PORTA |= (1<<3);
PORTA |= (1<<4);
PORTA |= (1<<5);
PORTA |= (1<<6);
PORTA |= (1<<7);
}
while (bit_is_set(PINB, 2)){
_delay_ms(250);

 
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
PORTA &= ~(1<<0);
PORTA |= (1<<1);
_delay_ms(250);
PORTA |= (1<<0);
PORTA |= (1<<1);
_delay_ms(50);
PORTA &= ~(1<<1);
PORTA |= (1<<0);
_delay_ms(250);
_delay_ms(50);
PORTA |= (1<<0);
PORTA |= (1<<1);}
}
}

//============================================================================
// PROCESO PRINCIPAL
//============================================================================

void main (void)


{
DDRA = 0xFF; // port A output
DDRB=0x00;
DDRD=0xFF;
MCUCSR |= (1 << JTD);
MCUCSR |= (1 << JTD);
DDRC=0xFF;
lcd_init();
Tempfrec();
PORTA &= ~(1<<0);
PORTA &= ~(1<<1);
PORTA &= ~(1<<2);
PORTA &= ~(1<<3);
PORTA &= ~(1<<4);
PORTA &= ~(1<<5);
PORTA &= ~(1<<6);
PORTA &= ~(1<<7);
for (;;)
{
check_react();
PORTD=0x00;
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);

 
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
}
}

//=============================================================================
// Procesos del LCD
//=============================================================================
// Inicializacion del display

void lcd_init(void)
{
LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN);

_delay_ms(100);
LCD_PORT &= 0xF0;
LCD_PORT |= 0x03;
LCD_PORT &= ~(1<<LCD_RS); // RS auf 0
lcd_enable();

_delay_ms(20);
lcd_enable();

_delay_ms(10);
lcd_enable();

// 4 Bit MODO
LCD_PORT &= 0xF0;
LCD_PORT |= 0x02;
lcd_enable();

// 4Bit / 2 LINEAS / 5x8


lcd_command(0x28);

// Display Off / Cursor Off


lcd_command(0x0C);

// INCREMENTAR A LA DERECHA
lcd_command(0x06);

lcd_command(0x40); // Comando para acceder a la CGRAM


// Se configura el caracter
lcd_data(0x06); // ˜˜
lcd_data(0x09); //˜ ˜
lcd_data(0x06); // ˜˜
lcd_data(0x00); //
lcd_data(0x00); //
lcd_data(0x00); //
lcd_data(0x00); //
lcd_data(0x00); //
lcd_home();

 
}

// funcion para mandar dato al LCD

void lcd_data(unsigned char temp1)


{
unsigned char temp2 = temp1;

LCD_PORT |= (1<<LCD_RS); // Se asigna RS = 1

temp1 = temp1 >> 4;


temp1 = temp1 & 0x0F;
LCD_PORT &= 0xF0;
LCD_PORT |= temp1;
lcd_enable();

temp2 = temp2 & 0x0F;


LCD_PORT &= 0xF0;
LCD_PORT |= temp2;
lcd_enable();

_delay_ms(100);
}

// Proceso para mandar comando al LCD

void lcd_command(unsigned char temp1)


{
unsigned char temp2 = temp1;

LCD_PORT &= ~(1<<LCD_RS); // RS = 0

temp1 = temp1 >> 4;


temp1 = temp1 & 0x0F;
LCD_PORT &= 0xF0;
LCD_PORT |= temp1;
lcd_enable();

temp2 = temp2 & 0x0F;


LCD_PORT &= 0xF0;
LCD_PORT |= temp2;
lcd_enable();

_delay_ms(100);
}

// Proceso para generar el Pulso en el enable

void lcd_enable(void)
{
LCD_PORT |= (1<<LCD_EN);
_delay_us(100);
LCD_PORT &= ~(1<<LCD_EN);
}

// Proceso que limpiar la pantalla del LCD

void lcd_clear(void)
{
lcd_command(CLEAR_DISPLAY);
_delay_ms(500);
Tempfrec();

// Proceso para enviar el cursor al home (solo se realiza al iniciarse)

 
void lcd_home(void)
{
lcd_command(CURSOR_HOME);
_delay_ms(20);
}

// Proceso para configurar la posicion del cursor desde la que se


// desea escribir en el LCD

void set_cursor(uint8_t x, uint8_t y)


{
switch (y) {
case 1: lcd_command(0x80+0x00+x); break; // 1. LINEA
case 2: lcd_command(0x80+0x40+x); break; // 2. LINEA
}
}

// Proceso para recorrer el texto a escribir en el LCD


void lcd_string(char *data)
{
while(*data) {
lcd_data(*data);
data++;
}
}

// Proceso para escribir en pantalla BOG: en la primera linea y MED: en la segunda


linea
void Tempfrec()
{
set_cursor(0,1);
lcd_string("TEMP:");
set_cursor(0,2);
lcd_string("Frec_cardi:");
_delay_ms(200);
}

 
 

También podría gustarte