prototipo basico de incubadora neonatal

21
INDICE INTRODUCCION 2 MODO DE USO 3 DESARROLLO 5 SENSADO DE TEMPERATURA 5 ETAPA DE MUESTREO 7 BLOQUE DE CONTROL 10 ANEXOS PROGRAMACION 13 BIBLIOGRAFIA 21 1

Upload: walter-schroeder

Post on 04-Aug-2015

335 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Prototipo Basico de Incubadora Neonatal

INDICE

INTRODUCCION 2

MODO DE USO 3

DESARROLLO 5

SENSADO DE TEMPERATURA 5

ETAPA DE MUESTREO 7

BLOQUE DE CONTROL 10

ANEXOS

PROGRAMACION 13

BIBLIOGRAFIA 21

1

Page 2: Prototipo Basico de Incubadora Neonatal

INTRODUCCION.

En el siglo XX, se volvió indispensable el uso de incubadoras para neonatos (recién nacidos) en alto riesgo o prematuros, tanto en hospitales públicos como en clínicas privadas, para lograr una reducción en la tasa de mortalidad infantil. Los problemas en los bebés prematuros están relacionados con la inmadurez de sus sistemas orgánicos, por lo cual necesitan cuidados especiales en la sala de neonatos hasta cuando sus sistemas orgánicos se hayan desarrollado lo suficiente como para mantenerlos con vida sin necesidad de brindarles apoyo especializado. Estos cuidados pueden durar semanas o meses dependiendo que tan prematuro sea el bebé.

En la actualidad existe una gran variedad de dichos equipos en el mercado, algunos más o menos complejos que otros, pero todos trabajan para el mismo fin y controlan las mismas variables principales, o sea la temperatura y la circulación de aire en el habitáculo. Algunos equipos tienen la opción de controlar otros parámetros como la saturación de oxigeno en la sangre, la humedad dentro del habitáculo, entre otras.

El objetivo de este proyecto es realizar un prototipo de control de incubadora, siguiendo las normas vigentes al caso, que nos sirva de base para empezar a diseñar seriamente un control con el fin de poder comercializarlo en el futuro. En este proyecto, nos basamos en la norma IRAM 4220-2-19 de APARATOS ELECTROMEDICOS – INCUBADORAS DE BEBES, asi como también en los manuales de la marca MEDIX de los modelos TR-306(Incubadora de transporte – Manual de servicio Técnico) y PC-305(Incubadora de terapia intensiva – Manual de usuario). Como se dijo, esto es sólo un prototipo.

2

Page 3: Prototipo Basico de Incubadora Neonatal

MODO DE USO .

Este sistema cuenta con un indicador de temperatura en display, control microprocesado de temperatura, alarma acústica, alarmas visuales de temperatura y de falla en ventilador de recirculación de aire.

El control trabaja en un rango de temperatura fijo que va de 20º a 37ºC con opción de ser extendida a 39ºC.

La lectura de temperatura en el recinto se visualiza en display en un rango que va de 20º a 45ºC, con una precisión de 0.1ºC (un decimal).

Al encenderse el sistema, aparece en display la temperatura que se mide en el habitáculo. Por defecto la temperatura de set es de 30ºC, por lo cual, si la misma fuese menor a este valor, al encenderse el sistema arranca el control de calefacción.

En caso de que la temperatura sensada este 3ºC por debajo o 1ºC por encima de la temperatura seteada se enciende la alarma por temperatura.

Si la temperatura es mayor:

Suena la alarma acústica intermitentemente. Se enciende en forma intermitente el indicador de alarma TEMP. AIRE. Se apagan la resistencia calefactora junto con el ventilador de recirculación de aire.

Si la temperatura es menor:

Suena la alarma acústica intermitentemente. Se enciende en forma intermitente el indicador de alarma TEMP. AIRE.

3

Page 4: Prototipo Basico de Incubadora Neonatal

Se enciende la resistencia calefactora (potencia máxima) junto con el ventilador de recirculación de aire.

En ambos casos la alarma acústica se puede silenciar oprimiendo el pulsador RESET ALARMA, transcurridos 10 minutos y si la falla no se corrige vuelve a sonar la alarma.

Para modificar la temperatura en el habitáculo, se debe presionar el botón SET_TEMP, al hacerlo se visualiza en el display la temperatura de set actual (sin decimales), la misma se modifica apretando los botones (+) o (-), una vez seleccionada la temperatura deseada, se debe aceptar con el botón SET (de otro modo los cambios no producen), y presionando el botón MUESTRA, vuelve a mostrar en display la temperatura del habitáculo.

Ante una falla en la circulación de aire, se enciende la alarma correspondiente, la cual, al igual que la alarma anterior, consta de una indicación sonora y una visual. Esta alarma trabaja como sigue:

Suena la alarma acústica intermitentemente. Se enciende en forma intermitente el indicador de alarma falla de aire. Se interrumpe la potencia del calefactor a través de un circuito de relé.

La alarma acústica NO se puede silenciar oprimiendo el pulsador RESET ALARMA.

4

Page 5: Prototipo Basico de Incubadora Neonatal

DESARROLLO.

Este proyecto es un prototipo que usa un control ON-OFF de temperatura, el cual necesita muchos cambios y mejoras para poder usarse en una incubadora neonatal real. Este sistema cuenta con una unidad microprocesada para mostrar temperatura en display u otra para el control en sí mismo.

La unidad de muestreo en display de temperatura se hizo independiente del control porque asi se especifica en la norma IRAM 4220-2-19. Para el sensado de temperatura se armo interfaz para adaptar la señal de salida del sensor de temperatura a niveles de 0-5V que se puedan reconocer el la entrada de los microcontroladores utilizados. A efectos de simplificar se uso la misma interfaz para la unidad de control y la de muestreo.

A continuación se muestra circuito eléctrico utilizado para la simulación en proteus, puede verse que consta de tres bloque separados (la interfaz del sensor, el bloque de control y la etapa de muestreo), los cuales se interconectan entre si.

QAQBQCQDQEQFQG

QAQBQCQDQEQFQG

QAQBQCQDQEQFQG

QA

QB

QCQD

QE

QFQG

1 2 3

1

2

3

1b

2b

3b

4b

b1

b2

b3

1b

2b

3b

4b

b1

b2b3

p8

p7

p6

p5

p4

p3

p2

p1

p2

p1

p8

p7

p6

p5

p4

p3

p2

p1

seña

l aco

ndic

iona

da

señal acondicionada

señal acondicionada

BLOQUE DE CONTROL

PIC16F877A

muestra

temp --

temp ++

set

extensión 39ºC

Reset alarma

Interfaz sensor

R2

1k

R11k

SET_TEMP

R3

1k

++

R4

1k

--

SET_TEMP(2)

VALUE=5

SET

RESET ALARMA

EXT_39ºC

R5

1k

R6

1k

R7

1k

Q3_b

Q2_b

Q1_b

4_B

3_B

2_B

1_B

MUESTRA

set_temp

Falla vent

FALLA VENT

R81k

ETAPA DE MUESTREO

PIC16F873A

QA

QB

QCQD

QE

QFQG

Display 1

Display 2

Display 3

1B

2B

3B

4B

Interfaz sensor

Muestra

Set_temp

Q1b

Q2b

Q3b

D7

Alarma Acustica

D8

Alarma temp aire

D9

Ventilador

D10

Falla ventilador

D11

Calefactor

Pot calefaccion

Ventilador

Alarma Acustica

Alarma temp aire

Falla ventilador

31.0

D1

LM335

INTERFAZ SENSOR

LM335

A puerto A/Dsensor

DIAGRAMA GENERAL DE SIMULACION

Salida de datos

Entrada de datos

Control de Displays

repr

esen

taci

on s

alid

a de

pot

enci

a y

alar

mas

Pulsadores de control

El funcionamiento detallado de cada uno de los distintos bloques se explica a continuación.

Sensado de Temperatura.

Para el sensado de temperatura se utilizo el sensor integrado LM335, el cual tiene una salida lineal con una variación en la tensión de salida de 10mV/ºC. Los valores de salida de este sensor van desde 0V para 0ºK(-273ºC) en adelante.

Como el rango de lectura que se programo va de 20-45ºC, necesitamos saber la salida del sensor para estos valores de temperatura, se tiene:

5

Page 6: Prototipo Basico de Incubadora Neonatal

Ahora bien estos valores no son los adecuados para enviar a la entrada del conversor AD del micro, entonces se hace una conversión lineal para llevar las variaciones que van de 2.93V a 3.18V a otras que van de 0V a 5V. Esto lo logramos con el bloque interfaz sensor, el circuito eléctrico se detalla a continuación.

R910k

R9(2)VALUE=22

3

26

74

15

U6

LM741

3

26

74

15

U5

LM741

U6(

V+)

VA

LUE=

22

U5(

V+)

VA

LUE=

22

U6(V-)VALUE=-22 U5(V-)

VALUE=-22

R1110k

R1010k

U6(OP)

R149k012

sensor

R121k2

R1324k

R14(1)

A puerto A/D

R14(1)VALUE=22

D21N4007 D3 - ZENER

1N4733A

31.0

D1

LM335

El diagrama consta de dos Amp. Operacionales, el primero se configura como inversor y el segundo como sumador para dar la escala necesaria de 0-5V a su salida.

Debe notarse que el circuito es solo de simulación, en el circuito práctico que se hizo se coloco a la salida del sensor un filtro pasa bajos, el cual es seguido por un operacional configurado como seguidor de tensión, a modo seguir la variaciones de tensión evitando un consumo innecesario de corriente.

6

Page 7: Prototipo Basico de Incubadora Neonatal

3

26

74

15

U1

LM741

3

26

74

15

U2

LM741 3

26

74

15

U3

LM741

C133nF

11

33

22

PRES1 10k

Potenciometro paracalibrar sensor

1 2 3

J1 1: -22V2: GND3: +22V

R23M3

R310k

R4

10k

R51k2

R712k

R812k

R6

8k211 3 3

22

PRES2

1k

12

J2

CONN-H2

Conector de salidahacia la entradadel conversor A/D

R110k

123

J3

Conectorsensor

D21N4007 D3 - ZENER

1N4733A

Filtro pasa Bajo

Seguidor de tension

CIRCUITO PRACTICO

Etapa de muestreo.

Como se dijo antes, la unidad bloque de muestreo en display se hizo independientemente del control porque asi lo especifica la norma IRAM 4220-2-19.

En vista de los componentes que se pueden conseguir en el mercado de la zona, y debido al costo de los mismos, se opto por usar un PIC16f873A ya que de este modo el costo se hacía menor que si se usaban componentes discretos para visualizar un valor analógico en display.

Como se aprecia en el diagrama general de simulación en proteus que se muestra al principio, el bloque de muestreo tiene 5 conjuntos de líneas de entrada y un conjunto de líneas de salida.

Un conjunto se usa como E/S de alimentación eléctrica para los displays. El conjunto de entrada de datos consta de cuatro líneas de datos

provenientes del bloque de control, estas se usan para transmitir información cuando se quiere mostrar en display la temperatura de seteo, o dicho de otra forma estas líneas llevan el código BCD de la temperatura de seteo para que se visualice en display.

El conjunto de control de displays se usa para controlar los mismos desde el bloque de control cuando se está seteando temperatura.

Por último quedan dos líneas que proviene de los pulsadores de control y la entrada correspondiente a la señal acondicionada por la interfaz del sensor para conectarla al ADC.

7

Page 8: Prototipo Basico de Incubadora Neonatal

A continuación se detalla diagrama eléctrico correspondiente al bloque de muestreo:

9

131211101514

13

12

11

10

9

15

14

Q1

Q2

Q3

1_b

2_b

3_b

1_b

3_b

2_b

Q3

Q2

Q1

rb0

rb1

ra0rb2rb3

rc0

rc1

rc2

rc3

rb3rb2

rb0rb1ra0

rc0rc1rc2rc3

R421k2 R43

1k2R441k2

Q22N2222

Q32N2222Q1

2N22221 2

3

U7:A4030

5 64

U7:B4030

8 910

U7:C4030

R36

4k7

R374k7

R38

4k7

R39

4k7

R404k7

R414k7

12

1311

U7:D

4030

R36(1)VALUE=5

RA0/AN02

RA1/AN13

RA2/AN2/VREF-/CVREF4

RA4/T0CKI/C1OUT6

RA5/AN4/SS/C2OUT7

OSC1/CLKIN9

OSC2/CLKOUT10

RC1/T1OSI/CCP2 12

RC2/CCP1 13

RC3/SCK/SCL 14

RB7/PGD 28RB6/PGC 27RB5 26

RB4 25RB3/PGM 24RB2 23RB1 22RB0/INT 21

RC7/RX/DT 18RC6/TX/CK 17RC5/SDO 16

RC4/SDI/SDA 15

RA3/AN3/VREF+5

RC0/T1OSO/T1CKI 11

MCLR/Vpp/THV1

U3

PIC16F873APROGRAM=..\Programas\Programa 7 seg CCS\Control 7 segmentos.hex

XT14MHz

C1

33p

C2

33n

Set_tempMuestra

R35(1)

VALUE=5

R35

4k7

1A2 1Y 4

1B3

2A5 2Y 7

2B6

3A11 3Y 9

3B10

4A14 4Y 12

4B13

A/B1

E15

U1

74HC157

A7

B1

C2

D6

LT3

BI4

LE/STB5

QA 13

QB 12

QC 11

QD 10

QE 9

QF 15

QG 14

U2

4511R261k

R271k

R26(1)VALUE=5

R28220

R29220

R30220

R31220

R32220

R33220

R34220

1B

2B

3B

4B

R16

4k7

R17

4k7

R18

4k7

R19

4k7

R20

4k7

R21

4k7

R22

4k7

R23

4k7

R24

4k7

R25

4k7

QG

QF

QE

QD

QC

QB

QA

Display 1

Display 2

Display 3

Q1b

Q2b

Q3b

Interfaz sensor

Retorno catodo de displays

Control de Displays

Salida Codigo 7 segmentos

Entrada de datos

Si se observa el esquema, puede verse que el micro usado es un PIC16F873A, el cual trabaja en una frecuencia de 4MHz. La entrada de señal analógica proveniente de la interfaz del sensor se conecta al pin 2 del micro para ser convertida a un valor digital. Dicho valor se procesa mediante el ADC interno del micro, el cual da una salida de conversión de 10 bits, cuyos valores van desde 0 a 1023 (10n). Una vez obtenido el valor de la señal de entrada en el ADC interno, esta se procesa y se manda en código BCD al CI4511, el cual es un Driver y conversor BDC/7Segmentos, para ser mostrado en display. El CI 74HC157 conectado antes del CI 4511 es un multiplexor cuádruple de 2x1 canales, se usa para seleccionar que datos se deben mostrar, los datos correspondientes a la temperatura que salen del PIC16F873A o los correspondientes a la temperatura de seteo proveniente del bloque de control. El multiplexor se comanda, para que habilite uno u otro canal de datos, con el PICF16F873A mediante los pulsadores MUESTRA y SET_TEMP. Si se observa el circuito eléctrico, se ve que las salidas de control de los displays 7 segmentos se manejan con los transistores Q1, Q2 y Q3, y estos a su vez se controlan por medio de las compuertas X-OR conectadas a sus bases. Dichas compuertas cumplen la función de aislar las señales de control de display que provienen del Pic16F873A y del bloque de control de modo que no se den las dos a la vez y pueda ocasionarse un mal funcionamiento.

8

Page 9: Prototipo Basico de Incubadora Neonatal

Los resistores conectados a la entrada del 74HC157 y de las compuertas X-OR, y que se conectan a Vd = 5V cumplen la función de interfaz de lógica TTL a lógica CMOS. Esto se hizo asi porque el microcontrolador maneja niveles de tensión TTL, mientras que El 74HC157 y las X-OR(CD4030) manejan niveles de tensión CMOS. A continuación se muestra el esquema eléctrico práctico utilizado para hacer la placa de muestreo, en el mismo se distinguen dos bloques internos los cuales se muestran más abajo.

QA

QB

QCQD

QE

QFQG

dp

QAQBQCQDQEQFQG

QAQBQCQDQEQFQG

QAQBQCQDQEQFQG

dp

SENSOR TEMPERATURA

PIC 16F873A

R171k2

R181k2

R191k2

Q2

2N2222

Q32N2222Q1

2N2222

rc0

rc1

rc2rc3

Q1aQ2aQ3a

set_temp

Muestra

sensor

CONMUTADOR

DRIVER 7 SEGMENTOS

E

A/B

1B2B3B4B

1A2A3A4A

QAQBQCQDQE

QFQG

R21k

R121k

1 23

U7:A4030

5 64

U7:B4030

8 910

U7:C4030

A/B

dp

a7

b6

c4

d2

e1

f9

g10

dp5

33

88

U8C-501G

a7

b6

c4

d2

e1

f9

g10

dp5

33

88

U9C-501G

a7

b6

c4

d2

e1

f9

g10

dp5

33

88

U10C-501G

1234

J1

datos set temp

R42

4k7

reset

123456

J2

pulsadores

1 2 3

J8control displays

E

gnd+

gnd+5V

12 1311

U7:D4030

R34

4k7

R35

4k7

R36

4k7

R37

4k7

R38

4k7

R39

4k7

5V

12

J7sensor

1 - sensor2 - GND

1 2

J5 Vin1 - GND2 - 5V

DIAGRAMA GENERAL PRACTICO

RA0/AN02

RA1/AN13

RA2/AN2/VREF-/CVREF4

RA4/T0CKI/C1OUT6

RA5/AN4/SS/C2OUT7

OSC1/CLKIN9

OSC2/CLKOUT10

RC1/T1OSI/CCP2 12

RC2/CCP1 13

RC3/SCK/SCL 14

RB7/PGD 28RB6/PGC 27RB5 26RB4 25RB3/PGM 24RB2 23RB1 22RB0/INT 21

RC7/RX/DT 18RC6/TX/CK 17RC5/SDO 16RC4/SDI/SDA 15

RA3/AN3/VREF+5

RC0/T1OSO/T1CKI 11

MCLR/Vpp/THV1

U3

PIC16F873A

X1

4MHz

C1

33p

Q2aQ3a

Q1a

rc0

rc2rc3

rc1

Set_tempMuestra

sensor

A/B

reset

E

gnd+

C2

33n

SENSOR TEMPERATURA

9

Page 10: Prototipo Basico de Incubadora Neonatal

1A2 1Y 4

1B3

2A5 2Y 7

2B6

3A11 3Y 9

3B10

4A14 4Y 12

4B13

A/B1

E15

U1

74HC157

A7

B1

C2

D6

LT3

BI4

LE/STB5

QA 13

QB 12

QC 11

QD 10

QE 9

QF 15

QG 14

U2

4511 R20

220

R21

220

R29

220

R30

220

R31

220

R32

220

R33

220

1A1B2A2B3A3B4A4B

A/BE

gnd+

QG QF QE QD QC QB QA

R1

220

dp

5V

R151k

R161k

R114k7

R134k7

R144k7

R224k7

R234k7

R244k7

R254k7

R264k7

R274k7

R284k7

CONMUTADOR

Se puede ver en los diagramas prácticos que la fuente de alimentación es externa, esto se pensó asi para poder implementar a futuro (dentro de la misma fuente general de alimentación) alguna protección por hardware por sobre carga y/o cortocircuito.

Bloque de control.

Este bloque es un control muy básico de temperatura que sirve para controlar un relé (el cual maneja la resistencia calefactora), una salida para el ventilador de recirculación de aire y algunas alarmas. El hecho de que controle un relé indica que se trata de un control ON-OFF. Ahora bien algo mejor sería usar un control PID, esto es una mejora para implementar a futuro. El corazón de este bloque es el Pic16F877A, el cual se encarga de convertir a un valor digital la señal que sale de la interfaz del sensor y de procesar dicho valor (al igual que lo hace el Pic16F873A en el bloque de muestreo) para tomarlo como referencia para controlar el calefactor. Se ve que del micro salen líneas reservadas para las alarmas. Estas se simulan mediante leds de indicación de distintos colores, asi como también el calefactor y el ventilador, pero en la práctica se uso un relé para la potencia. La condición de alarma que indica falla en la ventilación se simulo con una entrada digital mediante un pulsador debido a que no contábamos con un sensor adecuado para tal efecto, esto es un detalle a corregir a futuro.

A continuación se muestra el diagrama eléctrico de simulación de proteus del bloque de control.

10

Page 11: Prototipo Basico de Incubadora Neonatal

RA0/AN02

RA1/AN13

RA2/AN2/VREF-/CVREF4

RA4/T0CKI/C1OUT6

RA5/AN4/SS/C2OUT7

RE0/AN5/RD8

RE1/AN6/WR9

RE2/AN7/CS10

OSC1/CLKIN13

OSC2/CLKOUT14

RC1/T1OSI/CCP2 16

RC2/CCP1 17

RC3/SCK/SCL 18

RD0/PSP0 19

RD1/PSP1 20

RB7/PGD 40RB6/PGC 39RB5 38RB4 37RB3/PGM 36RB2 35RB1 34RB0/INT 33

RD7/PSP7 30RD6/PSP6 29RD5/PSP5 28RD4/PSP4 27RD3/PSP3 22RD2/PSP2 21

RC7/RX/DT 26RC6/TX/CK 25RC5/SDO 24RC4/SDI/SDA 23

RA3/AN3/VREF+5

RC0/T1OSO/T1CKI 15

MCLR/Vpp/THV1

U4

PIC16F877A

XT0 8MHz

C3

22p

C4

22p

RESET 16F877A

R15(1)

VALUE=5

R154k7

muestraset_temp

temp --

temp ++set

extensión 39ºC

1_B2_B3_B4_B

Q1_bQ2_bQ3_bAlarma AcusticaAlarma temp aire

Reset alarma

Pot calefaccionVentilador

Falla vent

Falla ventilador

interfaz sensor

BLOQUE DE CONTROL

Se observa que el bloque de control no es más que el micro utilizado con sus respectivas E/S.

A continuación se muestra el prototipo resultante de este proyecto, todas las etapas explicadas, salvo la de control (por estar en desarrollo aun) fueron llevadas a cabo en una placa de circuito impreso.

11

Page 12: Prototipo Basico de Incubadora Neonatal

Observación sobre los microcontroladores utilizados.

Si se ven los diagramas eléctricos se puede ver que de los dos microcontroladores ninguno se usa de modo de sacar el mayor provecho debido a que no se utilizan todos los pines de todos los puertos. Esto es porque en un futuro se agregaran más funciones que demanden mayor cantidad de pines E/S, asi que estos micros pueden servir para tal caso. Ambos microcontroladores tienen un ADC interno de 10 bits, de modo que el valor de temperatura que se lee en display es igual (teóricamente) al que tiene como referencia el control de temperatura.

12

Page 13: Prototipo Basico de Incubadora Neonatal

ANEXOS.

Programación

Para este proyecto usamos el lenguaje de programación CCS, el cual puede trabajarse en conjunto con MPLAB para bajar los programas al respectivo microcontrolador.

A continuación se muestran los códigos de programación que se usaron en este proyecto.

Programa para el Pic del bloque de muestreo:

#include <16F873A.h>#device adc = 10 /*Con esto defino el modulo ADC(siempre se define despues de definir el pic chip a usar, si lo defino en otro momento no compila)*/#use delay(clock=4000000)

#fuses XT, NOWDT, PROTECT

#opt 9 //uso la maxima optimizacion de codigo

#use fast_io(a) //Selecciono los puertos A,B,y C como E/S digitales#use fast_io(b)#use fast_io(c)

#byte porta = 0x05#byte portb = 0x06#byte portc = 0x07

int aux1; //Numero de 8 bits sin signo

int flagtemp = 0; int cont = 0;

void muestra(float);void borrado();Dec2Bcd(int);

#int_rtccvoid interrup_temp(){cont ++; if(cont == 31) //como no me da para temporizar 2 segundos uso un {flagtemp = 1; //loop De 61 vueltas para lograrlo, De este modo temporizo cont = 0; //exactamente hasta 1.998848 segundos } //T = 4* Tosc* (256 -N10)* Rango del Divisor de Frec * loop set_timer0(0x00);}

void main(){float b = 0.02441; //Defino un numero de 32 bits en punto flotante float a;

13

Page 14: Prototipo Basico de Incubadora Neonatal

setup_adc_ports(RA0_RA1_RA3_ANALOG); setup_adc(adc_clock_div_32); set_adc_channel(0); setup_counters(rtcc_internal, rtcc_div_256); /*clock interno, preescaler al TMR0, divido por 256*/ enable_interrupts(global); enable_interrupts(int_rtcc); /*habilito permiso de interrupciones por desbordamiento del TMR0*/ set_timer0(0x00); //inicializo el TMR0 en cero

set_tris_a(0x01); set_tris_b(0x03); set_tris_c(0x00); aux1 = 0;

output_bit(pin_b2, 0); output_bit(pin_b3, 0); output_bit(pin_b5, 0); output_bit(pin_b6, 0); output_bit(pin_b7, 0); do {if (flagtemp == 1) //En estas lineas se procesa el valor analogico {a = read_adc() * b + 20; //que entra al ADC interno del micro flagtemp = 0; } muestra(a); //llama a la funcion de muestra en display if(input(pin_b0) && (aux1 == 0)) //Si aprieto el boton de Set_temp desahibilito {aux1 = 1; //las salidas a los transistores del Pic16F873A borrado(); //para que entren los datos del bloque de control } }while(true);}

/*esta Funcion se encarga de mostrar la temperatura en display*/void muestra(float valor_temp){int De, U, dec, aux;

/*Aca esta la definicion de parametros*/ De = (int) (valor_temp/10); //decenas U = (int)(valor_temp - 10*De); //Unidades aux = 10*De + U; dec = (int)(10*valor_temp - 10*aux); //decimales /*Ahora convierto los parametros a codigo BCD*/ De = Dec2Bcd(De); //muestra decenas U = Dec2Bcd(U); //muestra unidades dec = Dec2Bcd(dec); //muestra decimales

/*Aca viene la rutina de muestreo en display*/ output_c(De);

14

Page 15: Prototipo Basico de Incubadora Neonatal

output_bit(pin_b5, 1); delay_ms(15); output_bit(pin_b5, 0); output_c(U); output_bit(pin_b6, 1); delay_ms(20); output_bit(pin_b6, 0); output_c(dec); output_bit(pin_b7, 1); delay_ms(15); output_bit(pin_b7, 0);

return;}

/*esta es la funcion que transfiere el control de los displays al Pic16F877A que esta en bloque de control*/void borrado(){do {output_bit(pin_b5, 0); output_bit(pin_b6, 0); output_bit(pin_b7, 0); output_bit(pin_b3, 1); if(input(pin_b1) && (aux1 == 1)) {delay_ms(100); aux1 = 0; output_bit(pin_b3, 0); return; } }while(true);}

/*Funcion para convertir a codigo BCD*/Dec2Bcd(int valor){int aux2; aux2 = valor & 0x0F; return(aux2);}

15

Page 16: Prototipo Basico de Incubadora Neonatal

Programa para el Pic del bloque de control:

#include <16F877A.h>#device adc = 10

#use delay(clock=8000000)#fuses HS, NOWDT, NOPROTECT

#opt 9 //uso la maxima optimizacion de codigo

#priority rtcc, timer1 //Priorizo interrupcion del TMR0 antes que la del TMR1

#use fast_io(a) //Selecciono los puertos A,B,C, D y E como E/S digitales#use fast_io(b)#use fast_io(c)#use fast_io(d)#use fast_io(e)

#byte porta = 0x05#byte portb = 0x06#byte portc = 0x07#byte portd = 0x08#byte porte = 0x09

int set = 30;int flagtemp = 0;int reset_alarma = 0;int cont = 0;int cont1 = 0;int aux1, aux2, aux3;int aux0 = 37;

float a;

#int_rtccvoid interrup_temp(){cont ++; if(cont == 31) //como no me da para temporizar 2 segundos uso un {flagtemp = 1; // loop De 61 vueltas para lograrlo, De este modo temporizo cont = 0; // exactamente hasta 1.998848 segundos } // T = 4* Tosc* (256 -N10)* Rango del Divisor de Frec * loop set_timer0(0x00);}

#int_timer1void interrup_TIMER1(){cont1 ++; if (cont1 == 38) {cont1 = 0; reset_alarma = 0; output_low(pin_d4); output_low(pin_d5); }

16

Page 17: Prototipo Basico de Incubadora Neonatal

if (((int)a <= aux3) && ((int)a >= aux2)) reset_alarma = 0;

set_timer1(0x00);}

set_temp(int);Dec2Bcd(int);

void alarma(int);

void main(){int salida; float b = 0.02441;

setup_adc_ports(RA0_RA1_RA3_ANALOG); setup_adc(ADC_CLOCK_DIV_32); set_adc_channel(0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); /*clock interno, preescaler al TMR0,

divido por 256*/ set_timer0(0x00); //inicializo el TMR0 en cero setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); /*clock interno, preescaler al TMR1, divido por

8*/ enable_interrupts(global); //Habilito interrupciones globales enable_interrupts(INT_RTCC); //Habilito interrupcion por desbordamiento de TMR0 enable_interrupts(INT_TIMER1); //Habilito interrupcion por desbordamiento de TMR1 set_tris_a(0xFF); set_tris_b(0xF0); set_tris_c(0x00); set_tris_d(0x00); set_tris_e(0xF); output_c(0x00); output_d(0x00);

aux1 = 0;

do {aux2 = set-3; aux3 = set+1; if (flagtemp == 1) {a = read_adc() * b + 20; flagtemp = 0; }

if (input(pin_e2) && (aux1 == 0)) //Llamada a funcion set_temp() {delay_ms(100); aux1 = 1; set_temp(set); }

17

Page 18: Prototipo Basico de Incubadora Neonatal

/* las siguientes lineas son para controlar el calefactor*/ if ((int)a < (set-1)) //Defino el arranque del calefactor {salida = 1; //con una histerisis de 1ºC } if ((int)a >= set) {salida = 2; } /* las siguientes lineas son De llamada a las funciones De alarma*/

if ((int)a < aux2) //Lamada alarma de temp_aire por debajo de 3ºC del set {if (reset_alarma == 0) {alarma(1); salida = 1; } else {alarma(2); salida = 1; } } if ((int)a > aux3) //Lamada alarma de temp_aire por encima de 1ºC del set {if (reset_alarma == 0) {alarma(1); salida = 2; } else {alarma(2); salida = 2; } } if (((int)a <= aux3) && ((int)a >= aux2)) //Si se está en condiciones normales {if (!input(pin_b5)) //normales apago todos los bits {output_low(pin_d4); //de alarma. output_low(pin_d5); output_low(pin_d6); } }

if (input(pin_b5)) //Llamada a funcion alarma falla_ventilacion {alarma(3); salida = 2; } /*Las siguientes lineas son de encendido y apagado del calefactor y el ventilador de recirculacion*/ switch (salida) {case 1:{output_bit(pin_c2, 1); output_bit(Pin_c3, 1); break;} case 2:{output_low(pin_c2); output_low(Pin_c3); break;} }

18

Page 19: Prototipo Basico de Incubadora Neonatal

}while(true);}

/*Funcion de seteo de temperatura*/set_temp(int temp){int De, U; output_bit(pin_d3, 0); //deshabilito el tercer display do {De = (int) temp/10; //decenas U = (int)(temp-10*De); //Unidades De = Dec2Bcd(De); U = Dec2Bcd(U); /*muestro las decenas*/ output_b(De); output_bit(pin_d1, 1); delay_ms(20); output_bit(pin_d1, 0);

/*muestro las unidades*/ output_b(U); output_bit(pin_d2, 1); delay_ms(20); output_bit(pin_d2, 0);

if(input(pin_a5)) {delay_ms(20); if (input_state(pin_a5)) temp++; } if(input(pin_e0)) {delay_ms(20); if (input_state(pin_e0)) temp--; } /*Extension del rango de temperatura*/ if(input(pin_a2)) {delay_ms(20); if (input_state(pin_a2) && (aux0 == 37)) aux0 = 39; if (input_state(pin_a2) && (aux0 == 39)) aux0 = 37; } if (temp < 20) temp = 20; if (temp >= aux0) temp = aux0; if(input(pin_a4)) set = temp;

19

Page 20: Prototipo Basico de Incubadora Neonatal

if (input(pin_e1) && (aux1 == 1)) {output_bit(pin_d1, 0); output_bit(pin_d2, 0); output_bit(pin_d3, 0); aux1 = 0; return(set);} }while(true);}

/*Funcion para convertir de Decimal a BCD9*/Dec2Bcd(int valor){int aux2; aux2 = valor & 0x0F; return(aux2);}

/* La siguiente funcion engloba todas las alarmas programadas*/void alarma(int tipo){switch (tipo) {case 1: //Alarma temp_aire {output_toggle(pin_d4); output_toggle(pin_d5); delay_ms(500); if(input(pin_b4)) //Pulsador De RESET ALARMA {output_low(pin_d4); //reseteo la alarma acustica reset_alarma = 1; set_timer1(0x00); //Habilito el TMR1 para que empiece a contar } break;} case 2: //Alarma temp_aire con nla acustica reseteada {output_low(pin_d4); output_toggle(pin_d5); delay_ms(500); break;} case 3: //Alarma falla ventilacion {output_toggle(pin_d4); output_toggle(pin_d6); delay_ms(500); break; } }}

20

Page 21: Prototipo Basico de Incubadora Neonatal

Bibliografía

o Datasheet transistor 2n2222.o Datasheet transistor TIP 122.o Datasheet Amp. Op. LM 741.o Datasheet microcontrolador PIC16F877A.o Datasheet microcontrolador PIC16F873A.o Datasheet 74HC157 - multiplexor cuádruple de 2 a 1.o Datasheet M74HC4511 - BCD to 7 segment latch decoder driver.o Datasheet CD4030 - cuádruple XOR.

o Tutorial para crear componentes en Proteus.o Compilador C CCS y Simulador Proteus Para Microcontroladores Pic - Eduardo García

Breijo.o Manual de usuario del compilador PCW de CCS - Escrito por Andrés Cánovas López.o Manual_PIC16F87X_FIRTEC.o Curso PIC16f877 en español.pdf.o Amplificadores operacionales y circuitos integrados y lineales 5º edición – Robert F.

Coughlin – Frederick F. Driscoll.

o Norma IRAM 4220-2-19 de APARATOS ELECTROMEDICOS – INCUBADORAS DE BEBES.

o Manual de usuario de la incubadora para terapia intensiva modelo PC-305.o Manual de servicio técnico de la incubadora de transporte modelo TR-306.

21