Full text
Calibración de sensores infrarrojos utilizando la plataforma Raspberry Pi María López Carmona Departamento de Electrónica y Electromagnetismo Grado en Física Universidad de Sevilla Tutor: Dr. Juan Antonio Leñero Bardallo Co-tutor: Rubén Gómez Merchán Facultad de Física Junio 2020
iii Agradecimientos Tras haber finalizado este trabajo, me gustaría agradecer a mi tutor Juan Antonio Leñero la gran disponibilidad, esfuerzo y ayuda prestada junto con Rubén Gómez. Gracias por la implicación, consejos y facilidades dadas por ambos. A mi familia, todo lo que les pueda decir es poco, gracias por ese apoyo incondicional ante cualquier adversidad; en especial a mi padre. Y a mis amigos, por haber hecho de esta etapa tan intensa y dura, una experiencia tan bonita.
v Resumen El presente Trabajo Fin de Grado parte de un proyecto colaborativo entre la Universidad de Sevilla y el Departamento de Dermatología Pediátrica del Hospital Virgen de Rocío. El objetivo del estudio es implementar un sistema compacto y económico basado en una cámara infrarroja para el análisis de la temperatura de anomalías vasculares en niños, con el fin de poder clasificarlas de forma temprana. Uno de los retos que se plantea en el proyecto es calibrar la cámara térmica de partida, que mide niveles de radiación en la banda del infrarrojo, para obtener niveles absolutos de temperatura a partir de ellos. En este trabajo se realiza la calibración de dos sensores infrarrojos: un termómetro y la cámara infrarroja existente, con el fin de establecer una relación entre la salida proporcionada por cada uno de ellos. Se han desarrollado dos métodos para obtener la temperatura corregida suministrada por el termómetro infrarrojo en un rango óptimo (distancias a las que se puede adquirir la temperatura calibrada) de medición. De forma que es posible hacer una conversión lineal entre la temperatura de una superficie de la piel y los niveles de radiación infrarroja que mide el sensor térmico de imágenes. Gracias a la relación encontrada entre estas dos medidas es posible obtener un mapa 2D de temperatura que ayuda a la detección de problemas relacionados con las variaciones térmicas en la piel, como son las anomalías vasculares. Las tareas del proyecto han abarcado la elección de un termómetro infrarrojo comercial; su montaje en el sistema médico desarrollado; el desarrollo de código que permite automatizar las medidas con el termómetro; su calibrado experimental; y el desarrollo de un programa que permite de forma automática convertir los niveles de radiación del sensor de imagen infrarrojo de partida en valores absolutos de temperatura para generar imágenes termográficas.
Contenido Agradecimientos iii Resumen v Lista de abreviaturas x Capítulo 1. Introducción 1 1.1 Motivación y Objetivos del proyecto .......................................................................... 1 1.2 Planteamiento del problema ........................................................................................ 3 1.3 Principio de operación de los sensores infrarrojos ...................................................... 4 1.3.1 Fundamentos Físicos ................................................................................................ 6 1.3.2 Tipos de sensores infrarrojos ................................................................................. 10 1.3.2.1 Termopila ..................................................................................................... 11 1.3.2.2 Bolómetro ..................................................................................................... 12 1.4 Protocolos de comunicación entre los sensores IR y la Raspberry Pi ........................ 14 1.4.1 Protocolo de comunicación I2C ............................................................................. 14 1.4.2 Protocolo de comunicación SPI .............................................................................. 16 Capítulo 2. Descripción del sistema 19 2.1 Diagrama de bloques ................................................................................................. 19 2.2 Sensor de temperatura IR .......................................................................................... 20 2.3 Sensor de imágenes IR .............................................................................................. 21 2.4 Conexión entre los sensores IR y la plataforma Rapsberry Pi .................................. 23
Capítulo 3. Caracterización experimental y calibrado 25 3.1 Montaje y condiciones de la calibración ................................................................... 26 3.2 Procedimiento calibración termómetro IR ................................................................ 28 3.2.1 Calibración de la temperatura de la superficie medida por el termómetro IR MLX90614D ..................................................................................................................... 30 3.2.2 Calibración de la temperatura del ambiente medida por el termómetro IR MLX90614D ..................................................................................................................... 33 3.3 Calibración sensor imágenes infrarrojas Flir Lepton 2.5 .......................................... 34 Capítulo 4. Descripción del programa en lenguaje C 37 4.1 Descripción del programa realizado en lenguaje C de la medición calibrada del termómetro IR....................................................................................................................... 37 4.2 Descripción del programa realizado en lenguaje C de la medición calibrada de la cámara IR .............................................................................................................................. 38 Capítulo 5. Conclusiones y líneas futuras 41 Referencias 45 Anexo A. Códigos de los programas en lenguaje C 49 A1. Rutina para la obtención de la temperatura de un cuerpo calibrada tras la medición con el termómetro IR ............................................................................................................ 49 A2. Algoritmo para la obtención de la dependencia lineal entre los valores de los niveles de radiación y temperatura ................................................................................................... 52
4 Introducción malformaciones de 0,1ºC cubriendo el rango de distancias necesario para la aplicación, de manera rápida en la consulta durante la examinación del paciente sin necesidad de realizar multitudes de pruebas médicas que requieren equipos más complejos y mayores costes. Este trabajo se centra en la calibración de termómetro IR y la cámara IR para una implementación adecuada de todo el sistema. Figura 1-1. Sistema completo. (a) vista frontal del sistema, donde están señalados el termómetro IR, la cámara en el espectro visible, el sensor de imagen IR, la batería y el botón de encendido. (b) vista trasera, donde se visualiza las imágenes que proporciona las dos cámaras (IR, visible). (c) Visa lateral que muestra los puertos USB y de Ethernet disponibles. (d) Vista interior donde se observan los detalles de la conexión interna del sistema [13]. 1.3 Principio de operación de los sensores infrarrojos Para una temperatura por encima del cero absoluto (-273,15ºC = 0 K), un objeto emite un espectro de radiación térmica [1]. A pesar de que, en general, la forma de dicho espectro depende de la composición del mismo, el factor determinante fundamental es la temperatura. El espectro electromagnético es la radiación electromagnética que emite o absorbe un cuerpo. Al ser un conjunto de ondas electromagnéticas se pueden clasificar en función de su nivel energético, que está relacionado con la longitud de onda mediante la expresión (1.1).
5 5 E h f= (1.1) c h c E f = → = (1.2) Donde h es la constante de Planck (h ≈ 6,626069 ∙ 10−34𝐽 ∙ 𝑠), f es la frecuencia asociada a la longitud de onda de la radiación y c es la velocidad de la luz en el vacío (2,99792458 ∙ 108𝑚/𝑠). Observando la ecuación (1.2), se puede apreciar que la energía y la longitud de onda de dicha radiación son inversamente proporcionales. Con lo cual, cuanto mayor sea la longitud de onda menor energía va a tener la onda electromagnética. Aunque un cuerpo emita un espectro continuo de radiación térmica, el ojo humano solo es sensible a la región visible del espectro electromagnético (EE). Incluso a temperaturas muy altas (de varios miles de grados Kelvin), la inmensa mayoría (más del 90%) de la radiación térmica emitida es invisible, empezando por la zona del infrarrojo (IR) del EE. Por lo tanto, a temperatura ambiente la mayoría de los cuerpos son visibles gracias a la luz que reflejan, y no por la radiación que emiten, dado que ésta queda fuera de la región visible del espectro electromagnético. La clasificación de la radiación electromagnética (EE) se puede apreciar en la Figura 1-2. Figura 1-2.Esquema de las regiones del espectro electromagnético. Como el objeto de este trabajo es calibrar sensores infrarrojos, se analiza la radiación infrarroja (IR), que resulta invisible para nuestros ojos pero estos dispositvos electrónicos son capaces de medir en esta banda de emisión. En concreto, los sensores infrarrojos analizados en
6 Introducción este trabajo son sensibles al infrarrojo de onda larga (LWIR), que es la adecuada para detectar temperaturas por debajo de 100 ºC. La clasificación de las diferentes regiones de emisión infrarroja (IR) se indica en la Tabla 1-1. Tabla 1-1. Clasificación de la radiación infrarroja (IR) [2]. Región Longitud de onda 𝜆 (𝜇𝑚) Infrarrojo cercano (NIR, near IR) 0,78-1 Infrarrojo de onda corta (SWIR, short wavelength IR) 1-3 Infrarrojo de onda media (MWIR, medium wave IR) 3-4 Infrarrojo de onda larga (LWIR, long wave IR) 6-15 Infrarrojo de onda muy larga (VLWIR, very long wave IR) 15-30 Infrarrojo lejano (FIR, far IR) 30-100 1.3.1 Fundamentos Físicos A finales del siglo XIX y principios del XX Josef Stefan, Ludwig Edward Boltzmann, Max Planck, Wilhelm Wien y Gustav Kirchhoff establecieron correlaciones cuantitativas y cualitativas para la descripción de la energía infrarroja [1]-[2]. Se puede demostrar, tanto teóricamente como experimentalmente, que hay una clase de cuerpos que emiten espectros térmicos de características generales o universales, que siguen un patrón de radiación térmica común o estándar, y que corresponden a los referidos como cuerpos negros. Se denominan así porque idealmente absorben toda la radiación térmica que incide sobre ellos y por tanto al no reflejar luz, su color para el ojo humano es negro. Un cuerpo negro ideal absorbe toda la energía electromagnética que recibe, y bajo la hipótesis de que está en equilibrio térmico, la energía que emite debe coincidir con la que absorbe, como establece la ley de Kirchhoff de la radiación térmica (publicada en 1859) [2]. Esta emisión depende exclusivamente de la temperatura del cuerpo, presentando unos patrones característicos.
7 7 En 1894, Wilhelm Wien mostró que, una vez conocida la distribución espectral de la radiación del cuerpo negro para una temperatura dada, podría ser deducida para cualquier otra temperatura. De tal forma que, la distribución espectral M(λ,T) dependía del producto de la función de onda por la temperatura (λT), mediante M(λ,T) = λ−5𝜑(λT). Este resultado es conocido como la ley de desplazamiento de Wien, debido a que el máximo de la función M(λ,T) se desplaza hacia longitudes de onda más pequeñas a medida que aumenta la temperatura T, que concordaba con los experimentos realizados. Posteriormente, en 1896, Wien encontró una posible solución de 𝜑(λT)= exp (− 𝛼 λT), siendo 𝛼 una constante. Sin embargo, esta ley no era correcta para longitudes de onda largas y se proponía para la descripción de todo el espectro de radiación térmica. Más tarde, en 1900, dicha ley fue sustituida por la ley de Planck, que describe el espectro completo de radiación térmica. Esta ley proporciona la radiación emitida por un cuerpo negro a una temperatura T, en función de su longitud de onda λ. Por lo que, una definición de cuerpo negro (ideal) es aquel que, independientemente de su composición, para una misma temperatura emite una radiación térmica con un espectro que viene determinado por la ley de radiación de Planck [1]-[2]. La energía de la radiación térmica de un cuerpo se describe a partir de la energía asociada a cada frecuencia (o en su lugar a la longitud de onda) del espectro de radiación, y se caracteriza por una magnitud denominada radiancia espectral, indicada como 𝑅𝑇(𝜈) dada en la ecuación (1.3) [1],o como 𝑀(𝜆, 𝑇), dada por la expresión (1.4) [2]. 2 / 3 8 () 1 B Th K T h R d d ce =− (1.3) 1 2 5 2 ( , ) exp 1 /( ) B hc hc M T W cm m KT − =− (1.4) De forma que 𝑅𝑇(𝜈) 𝑑𝜈, o en su lugar 𝑀(𝜆, 𝑇) 𝑑𝜆, determina la energía por unidad de tiempo (potencia) emitida en forma de radiación dentro del intervalo de frecuencias [𝜈, 𝜈 + 𝑑𝜈], o en su lugar [𝜆, 𝜆 + 𝑑𝜆] por unidad de superficie a una temperatura T (en K). Con esta definición, a la integral de la radiación espectral a lo largo de frecuencias (o en su caso, de longitudes de onda) en el que haya emisión se denomina radiancia total o radiancia 𝑅𝑇, o en su caso 𝑀(𝑇).
8 Introducción Donde los símbolos que aparecen en las expresiones (1.3) y (1.4) se definen como: ▪ λ: longitud de onda. ▪ T: temperatura del cuerpo negro. ▪ c: velocidad de la luz (2,99792458 ∙ 108𝑚/𝑠). ▪ KB: Constante de Boltzmann (1,3806488(13) ∙ 10−23𝐽/𝐾). La ley de Stefan-Boltzmann [1], que se obtuvo experimentalmente por Stefan en 1879 y deducida teóricamente por Boltzmann en 1884, establece que la potencia emitida por unidad de área de un cuerpo negro viene dada por la expresión (1.5). 4 T RT = (1.5) Donde, 𝜎 = 5,67 ∙10−8 𝑊/𝑚2𝐾4 es la llamada constante de Stefan-Boltzmann. Este resultado se puede obtener integrando las ecuaciones (1.3) o (1.4) en todo el rango de frecuencias o longitudes de onda, según corresponda. Por otro lado, la ley de desplazamiento de Wien [1]-[2] establece que la curva del espectro de radiación se desplaza hacia frecuencias mayores a medida que la temperatura aumenta, de forma que la frecuencia para la que se produce el máximo de la radiación espectral, 𝑅𝑇, es directamente proporcional a la temperatura absoluta T (1.6). máx T (1.6) Si la ley de desplazamiento de Wien se expresa utilizando la longitud de onda (λ), se obtiene que la longitud de onda para la que se produce el máximo de radiancia espectral viene dada por (1.7). 2897,6 máx T m K = (1.7) donde la constante 2897,6𝜇𝑚 ∙ 𝐾 que aparece en (1.7) es conocida como la constante de Wien. Estas relaciones se pueden deducir a partir de la fórmula de Planck para la radiancia espectral empleando la condición de máximo de la función de la expresión (1.8). ( ( , )) 0 MT = (1.8) Para el caso en el que ℎ𝜈 << 𝑘𝐵𝑇, y pasando al límite, las expresiones 𝑅𝑇(𝜈) converge hacia el resultado de la física clásica obtenida por Rayleigh-Jeans para la densidad de energía
9 9 de radiación de un cuerpo negro [1], válida solo para el rango de frecuencias que cumplan ℎ𝜈 < < 𝑘𝐵𝑇, 2 3 8 () B T kT dd c = (1.9) En la Figura 1-3 se muestra la radiancia espectral de Planck para un cuerpo negro para tres temperaturas diferentes. Como se puede observar, a medida que la temperatura aumenta, la energía radiada aumenta (área bajo la curva) y el máximo de la curva se desplaza hacia la derecha. Como es lógico, en caso de emplear la longitud de onda como magnitud en el eje horizontal, el máximo de la curva de radiancia espectral se desplaza hacia la izquierda a medida que aumenta la temperatura. Por tanto, se puede observar también lo que predice la ley de desplazamiento de Wien. Figura 1-3. Ley de Planck [1]. La curva de radiancia espectral de un cuerpo negro proporciona el límite superior de radiación electromagnética asociada a cada frecuencia del espectro generada por un cuerpo a una temperatura T. La mayoría de las fuentes térmicas no son cuerpos negros ideales, por lo que se suele emplear el término de cuerpo gris [2], que corresponde a un cuerpo cuyo espectro de radiación tiene la misma forma (distribución espectral) que un cuerpo negro que emite radiación a la misma temperatura, pero con una magnitud más reducida. El cociente entre la
10 Introducción radiancia de un cuerpo y la radiancia de un cuerpo negro a la misma temperatura se denomina emitancia o emisividad térmica, 𝜀 (1.10), que en general depende de la longitud de onda y de la temperatura. _ ( , ) ( , ) ( , ) cuerpo cuerpo negro MT TMT = (1.10) Para un cuerpo negro perfecto, 𝜀 = 1 para todas las longitudes de onda, mientras que la emisividad de un cuerpo gris depende de la longitud de onda, estando su emisividad limitada en el rango 0 < 𝜀 < 1. Por lo tanto, la radiación térmica emitida (potencia) por un cuerpo gris (gris, GB) de superficie A cuya temperatura absoluta es T, viene dada por (1.11). TGB T R R A = (1.11) donde 𝑅𝑇 es la radiancia térmica que generaría un cuerpo negro a la misma temperatura T, y 𝜀 es la emisividad del material que constituye el objeto. Los sensores infrarrojos detectan la radiación IR en distintas bandas, pero no captan su temperatura. Por tanto, para poder conocer la temperatura del cuerpo, es necesario realizar una conversión entre los niveles de radiación infrarroja y la temperatura absoluta mediante un proceso de calibrado. Para ello, en este trabajo se empleará un termómetro comercial infrarrojo que proporciona la temperatura del cuerpo y se relacionará con los valores suministrados por el sensor de imágenes infrarrojas para poder conocer la temperatura de cualquier punto del objeto de medición. 1.3.2 Tipos de sensores infrarrojos Un sensor infrarrojo (IR) [2] es aquel que mide la radiación infrarroja emitida por un objeto que se encuentran dentro de su campo de visión y la transforma en una señal eléctrica. Aunque la radiación se puede producir en un rango amplio de frecuencias y está influenciada por la atmósfera, el detector va a filtrar todas las longitudes de onda que estén fuera del rango del espectro de la radiación IR. Existen dos grandes grupos de detectores de la radiación infrarroja emitida por los cuerpos, los fotónicos (fotodetectores) y los térmicos [2].
11 11 El primero de ellos, el fotodetector, está fabricado con semiconductores. La radiación emitida por el cuerpo es absorbida por el semiconductor, generando pares electrón-hueco que producen una corriente si estos se crean en la zona de deplexión de la unión PN. Este grupo a su vez se puede subdividir en función de la naturaleza de la radiación o en función de cómo se desarrollen los campos eléctricos o magnéticos. Estos detectores son muy sensibles a las diferentes longitudes de onda incidentes y son más rápidos de respuesta que los detectores térmicos. Sin embargo, requieren un enfriamiento criogénico para aumentar su precisión y disminuir el ruido, debido a que a temperatura ambiente los electrones pueden ser excitados y pasar a la banda de conducción. Por otro lado, en un detector térmico la radiación incidente es absorbida para cambiar la temperatura del material del detector, y el cambio en alguna propiedad física se utiliza para generar una señal eléctrica. Dicha señal no depende de la naturaleza de la radiación incidente, por lo que los efectos térmicos son generalmente independientes de la longitud de onda, es decir, la señal depende de la potencia radiante pero no de su contenido espectral Esto ocurre si el cuerpo presenta las características de absorción de un cuerpo negro. Estos detectores no requieren refrigeración, son más fáciles de usar y más baratos, pero su tiempo de respuesta es lento y la velocidad de detención es baja. Dentro de este grupo se encuentra una clasificación según el esquema de funcionamiento, los detectores de bolómetro, piroeléctrico y de termopila. Como en este trabajo se calibra el termómetro IR MLX90614D [14] y la cámara IR FLIR LEPTON 2.5 [15], se va a especificar con más detalle el principio de operación de la termopila [19] que se corresponde con el termómetro, y del bolómetro porque es el tipo de sensor IR de la cámara, en concreto un micro-bolómetro [16]-[17]-[18]. 1.3.2.1 Termopila La termopila está formada por un conjunto de termopares interconectados entre ellos en serie para aumentar la sensibilidad del dispositivo [19]. Cada termopar está formado por dos materiales termoeléctricos determinados diferentes. Una de las uniones A (fría) se mantiene a una temperatura de referencia conocida, que normalmente suele ser 0 ºC, y en la otra unión B (caliente) hay un cuerpo negro que absorbe la radiación IR que le llega, incrementando la temperatura acorde con dicha radiación, denominado este componente termopar de radiación. De tal forma que, al incidir un flujo de radiación IR, 𝜙𝑟𝑎𝑑, sobre la unión se va a crear una diferencia de potencial que es proporcional a la temperatura a la que se encuentra el cuerpo de
12 Introducción medida. En la Figura 1-4 se muestra la conexión entre la absorción y los dos materiales diferentes. Figura 1-4. Principio de funcionamiento del sensor termoeléctrico. Se genera un voltaje de salida Vout cuando un flujo de radiación IR (𝜙𝑟𝑎𝑑) iradia en el sensor [19]. El efecto Seebeck genera una diferencia de potencial entre ambas uniones (la fría y la caliente) viene dado por (1.12). () out a b VT = − (1.12) Donde a y b son los coeficientes de Seebeck para los materiales termoeléctricos A y B respectivamente, expresados comúnmente en µV/K. Como la termopila es un conjunto de termopares conectados en serie, el voltaje generado por el detector IR de la termopila es directamente proporcional al número de termopares, N. ( ) ( ) out a b a b total V N T T = − = − (1.13) Donde ∆𝑇𝑡𝑜𝑡𝑎𝑙 es la suma de las diferencias de temperatura entre los diferentes termopares. 1.3.2.2 Bolómetro El bolómetro [16]-[17]-[18] es un dispositivo que se basa en el cambio de una resistencia eléctrica, R, que se produce en ciertos materiales cuando se ve sometido ante variaciones térmicas. Estas resistencias son conocidas como termistores, que pueden ser de tipo NTC (Negative Temperature Coeficient) o PTC (Positive Temperature Coeficient), que se diferencian en que sus valores aumentan o disminuyen ante un cambio de la temperatura. Cuando el bolómetro absorbe la radiación IR del cuerpo, se produce un incremento de su temperatura, y esto causa un cambio de resistencia en la estructura. La resistencia del material que forma este dispositivo varía con la temperatura (1.14). 00 (1 ( ))R R T T = + − (1.14)
13 13 Donde 𝑅0 es la resistencia del material a la temperatura de referencia 𝑇0, que puede ser la temperatura ambiente o la criogénica, y 𝛼 es el coeficiente de temperatura de la resistencia dada por (1.15). 1dR R dT = (1.15) Donde 𝑑𝑅/𝑑𝑇 es la sensibilidad del instrumento. Posteriormente, las variaciones en la resistencia deben ser medidas con la circuitería apropiada, como podría ser un puente de Wheatstone. En el caso del sensor de imágenes térmicas es un sensor micro-bolómetro, que típicamente se construyen usando óxido de vanadio (VOx), que es un material eléctricamente conductor, o de silicio amorfo (a-Si). Opera de la misma forma que el bolómetro cuando incide radiación infrarroja de onda larga (LWIR) sobre el sensor. Un ejemplo de la estructura del micro-bolómetro se muestra en la Figura 1-5. Figura 1-5. Ejemplo de la estructura de un micro-bolómetro [18]. Una vez introducidos los principios de funcionamiento de los sensores IR, los fundamentos físicos en los que se apoya y el tipo de sensor que es el termómetro IR y la cámara IR, se pasa a los fundamentos electrónicos en los que se basa la comunicación entre los sensores y la plataforma Raspberry Pi para el control y la visualización de las operaciones.
20 Descripción del sistema Figura 2-1. Diagrama de bloques entre los componentes del sistema. 2.2 Sensor de temperatura IR El sensor de temperatura infrarrojo comercial que se calibra para poder conocer la conversión entre niveles de radiación y temperatura es el termómetro IR Melexis modelo MLX90614D (InfraRed thermometer for noncontact temperature measurements) [14]. Este dispositivo está diseñado para conectarlo a un procesador, que en este caso es la placa de desarrollo Raspberry Pi (CP, computer board o placa computadora) [23] para medir la temperatura de un objeto a distancia. El termómetro (IRT) en cada medida proporciona tanto la temperatura de la superficie del objeto (𝑇𝑜) a medir como la temperatura ambiente (𝑇𝑎). Tiene una precisión (la estándar según el fabricante [14]) de 0,5 ºC (o la versión médica de 0,2 ºC, en un rango limitado de temperatura que tiene que estar alrededor de la del cuerpo humano) para un rango de Figura 2-2. Termómetro IR MLX90614D
21 21 funcionamiento entre -40 ºC y 125 ºC para temperatura ambiente, -70 ºC y 380 ºC para la temperatura del objeto, con una resolución de 0,02 ºC, un nivel de ruido en la medida de 0,10 ºC RMS y un tiempo de respuesta o establecimiento (settling time) de 0,65 segundos. El dispositivo incorpora un filtrado para el ruido de medida, un convertidor analógico-digital (Analogic-to-Digital Converter, ADC) de 17 bits y un procesador digital de señales (Digital Signal Processor, DSP) incorporado en la unidad de procesamiento digital MLX90302. El protocolo de comunicación empleado entre el termómetro IR y la plataforma Raspberry Pi es el BUS I2C (Sección 1.4.1). En este caso, el IRT solo puede actuar como dispositivo esclavo (SD) y la placa Raspberry Pi como dispositivo maestro (MD). La línea de comunicación SDA proporciona en todo momento la información de la temperatura del objeto al MD cuando es solicitada por el usuario. 2.3 Sensor de imágenes IR El sensor de imágenes infrarrojas que se emplea para el control y clasificación de las anomalías vasculares en los niños es la cámara infrarroja FLIR LEPTON modelo 2.5 [15], 80x60, la cual es instalada en la placa Raspberry Pi. Este dispositivo está diseñado para la captación de la radiación infrarroja de onda larga (de 8-14 µm) produciendo una imagen térmica uniforme. Figura 2-3. Sensor de imágenes IR FLIR LEPTON [22]. Esta cámara IR (IRC) proporciona una imagen independientemente de la temperatura de la IRC en forma de matriz de celdas, puntos o píxeles de dimensión 80x60 con información sobre la radiación IR captada en cada celda o punto por la cámara. El tamaño de cada píxel es 17 µm y el rango de temperatura óptimo está entre -10 y 80 ºC. El dispositivo tiene un campo de visión (FOV, field of view) horizontal de 51 º, mientras que el diagonal es de 63,5 º. En la
22 Descripción del sistema Tabla 2-1 se muestran otras especificaciones adicionales del sensor [15]. Tabla 2-1. Especificaciones adicionales de la cámara IR. Frecuencia de imagen efectiva 8,6 Hz Sensibilidad térmica <50 mK (0,050 ºC) Rango dinámico de escena (típico a temperatura ambiente) Modo de ganancia alta: De -10 a 140 °C Modo de ganancia baja: De -10 a 450 °C Precisión radiométrica (Típica a temperatura ambiente) Ganancia alta: Mayor de ±5 °C o 5 % Ganancia baja: Mayor de ±10 °C o 10 % Disipación de potencia (típico a temperatura ambiente) 150 mW (funcionamiento), 650 mW (durante obturación), 4 mW (en espera) Dimensiones del paquete 11,5 × 12,7 × 6,835 mm Peso 0,9 g En la Figura 2-3 se puede apreciar el tamaño pequeño del sensor IR comparándolo con una moneda. Esto hace posible la construcción de un sistema compacto y ligero con necesidad de menos consumo y tiene una mayor amplitud de aplicaciones. Para la comunicación entre el sensor IR y la plataforma Raspberry Pi (RP) se emplean dos protocolos de comunicación (I2C y SPI). Siendo siempre en cada uno de ellos la cámara IR el dispositivo esclavo (SD) y la placa RP el dispositivo maestro (MD). Esto hace posible modificar su configuración sin necesidad de interrumpir la toma de imágenes a través de dos protocolos distintos. El bus I2C proporciona un interfaz de mando y control, mientras que el SPI permite la transferencia eficiente y verificable de video. En el caso del canal SPI, la línea MOSI no es utilizada debido a que solo se va a transferir información del MD al SD, por tanto, debe ser conectada a GND o puesta a nivel bajo. De forma que el esquema de las vías de comunicación entre el sensor IR y la RP se muestra en Figura 2-4. Figura 2-4. Líneas de comunicación empleadas entre la cámara IR y la Raspberry Pi [22].
23 23 2.4 Conexión entre los sensores IR y la plataforma Rapsberry Pi En esta sección se va a explicar el conexionado físico entre los sensores IR y la plataforma Raspberry Pi (RP) a través de sus protocolos de comunicación. La plataforma Rapsberry Pi [23] contiene unos pines en la parte lateral, que son unos conectores de entrada-salida de propósito general (GPIO). Es un puerto de 26 pines con dos filas de 13 conectores espaciados 2,54 mm. La numeración de estos pines está dividida en dos filas, la fila inferior toma los números impares y la superior los pares como se puede apreciar en la Figura 2-5. De tal forma que se conectan los sensores IR a los pines específicos para establecer su comunicación con la RP a través de sus respectivos protocolos. Figura 2-5. El piout de la Raspberry Pi. Señaladas las conexiones con el termómetro IR en rojo y la unión con la cámara IR en azul. El protocolo de comunicación entre los sensores IR y la plataforma Raspberry Pi es I2C. El bus I2C se puede acceder sobre los pines 16 y 18, los cuales proporcionan la señal SDA y la señal SCL respectivamente. Además, este sensor se alimenta desde la Raspberry Pi mediante los pines GND (14) y 3.3 V (17) como se observa en Figura 2-5. El esquema del montaje entre el termómetro MLX90614D y la placa es el que se muestra en la Figura 2-6.
24 Descripción del sistema Figura 2-6. Esquema montaje termómetro IR Melexis MLX90614D. En (a) se observa la vista trasera del térmometro, la cual proporciona la descripción de sus pines. En (b) se muestra una imagen del termómetro IR [14]. Por otro lado, la cámara IR utiliza la comunicación SPI para enviar la señal de video y usa el protocolo de comunicación I2C como interfaz de control. Figura 2-7. Esquema montaje cámara infrarroja Flir Lepton 2.5. En (a) se visualizan los pines que hay que interconectar para la comunicación con la Raspberry Pi y en (b) una imagen de la cámara IR [25]. El sensor IR se alimenta a través de la placa mediante los pines GND (pin 9) y 3.3V (pin 1). Para la parte de la comunicación I2C, se conecta los pines del sensor SCL y SDA a los pines de la Raspberry Pi correspondientes, 3 y 5 respectivamente. Por otro lado, para que se lleve a cabo la comunicación SPI se une el pin MOSI al pin 19 de la placa, el MISO al 21, el SCLK al 23 y el CS al 26, como se muestra en las Figura 2-5 y Figura 2-7. (a) (b) (b)
25 Capítulo 3 Caracterización experimental y calibrado En el presente capítulo se desarrolla la caracterización experimental y calibrado de los sensores infrarrojos, con el fin de establecer una relación entre las salidas del termómetro infrarrojo y del sensor térmico de imágenes. Se dispone de un termómetro infrarrojo (IRT) que se va a usar como patrón o base de medidas de referencia. Este es el Extech IR200 (Non-Contact Forehead InfraRed Thermometer) [20], y se va a indicar como IRT1. Este termómetro está diseñado para explorar grupos de individuos o monitorear a un individuo por alta temperatura corporal de forma rápida y sin contacto. Este IRT dispone de dos modos posibles para realizar la medición, el cual se puede seleccionar moviendo el interruptor Cuerpo/Superficie a la posición deseada, siendo el tiempo de medida para ambas funciones de 0,5 segundos. Este termómetro IR Extech IR200 utilizado de referencia se puede ver en Figura 3-1. Figura 3-1. Termómetro de referencia, Extech IR200 [20]. En el modo “cuerpo” (para medir la temperatura corporal) el IRT tiene una exactitud de 0,3ºC cuando se miden temperaturas de la piel entre 32 y 42,5 ºC. De tal forma que si la temperatura sobrepasa alguno de estos dos límites el aparato lo indica. El otro modo, “superficie”, se utiliza para la medición de temperaturas de la superficie sin contacto de 0 a 60
26 Caracterización experimental y calibrado ºC con una precisión de 0,8 ºC. Para que la medición sea óptima, hay que situar el IRT a una distancia entre 5 y 15 cm de la superficie cuya temperatura se quiere medir, proporcionando una resolución de 0,1 ºC. En el caso en el que el IRT cambie de ubicación y hubiese un cambio térmico en el ambiente, se debe esperar al menos 20 minutos para que se produzca el equilibrio térmico necesario para la toma de medidas precisas. Se tiene un segundo IRT, el MLX90614D (Infra Red thermometer for noncontact temperature measurements) [14], que se va a indicar en lo que sigue como IRT2 y sus especificaciones se encuentran en la Sección 2.2. Tanto IRT1 como IRT2 vienen calibrados de fábrica según indican sus respectivos fabricantes. Sin embargo, es necesario calibrar el termómetro de infrarrojo para realizar las medidas con la mayor precisión posible y para minimizar los errores que se cometen. Como tercer sensor infrarrojo se dispone de una cámara infrarroja (IRC), Flir modelo Lepton 2.5, 80 x 60 [15], cuyas especificaciones se encuentran en la Sección 2.3. El objetivo es combinar las medidas proporcionadas por IRC (IRCM) con las medidas del IRT2 (𝑇𝑜 y 𝑇𝑎) para estimar la temperatura de cada píxel de la matriz de puntos obtenida por la IRC. Para calibrar el IRT2 en el rango de temperaturas acotado al funcionamiento del IRT1, se hace un estudio experimental, obteniendo la función de ajuste, así como la estimación del error de medida. Una vez calibrada la IRT2, el sistema compuesto por la IRC y la Raspberry Pi con el IRT2 (junto con el programa desarrollado en lenguaje C que se ejecuta en la memoria EEPROM de la PB) se pueden utilizar para estimar la temperatura de cada celda en la que se divide una imagen de la que la IRC ha tomado una medida, y así se puede usar ésta como ayuda de detección de anomalías vasculares en niños. 3.1 Montaje y condiciones de la calibración Las condiciones y los instrumentos utilizados para la calibración del sensor infrarrojo de temperatura se muestran en la Figura 3-2, describiendo por separado la función de cada elemento empleado para su calibración.
27 27 Figura 3-2. Condiciones de medición para la calibración del termómetro IR, donde aparecen todos los instrumentos utilizados. • Herramienta para la fijación del termómetro a una posición que se muestra en la Figura 3-2 (b). • Regla para poder saber a qué distancia se está realizando la medición y una superficie vertical para mantener el termómetro apuntando hacia la zona de medida. • El termómetro IR Melexis MLX90614D conectado a la Raspberry Pi mediante el protocolo de comunicación I2C. La interconexión entre estos elementos se muestra más detalladamente en la Figura 3-3. Figura 3-3. Interconexión entre el termómetro IR y la Raspberry Pi. (a) (b)
28 Caracterización experimental y calibrado • Las Raspberry Pi conectada al monitor mediante un cable HDMI, con un ratón y un teclado para poder manejar los comandos, enlazados por USB y conectado todo a una fuente de alimentación a través del puerto micro-USB. 3.2 Procedimiento calibración termómetro IR Se expone en este apartado el procedimiento seguido para realizar la toma de datos de la calibración del termómetro IR Melexis MLX90614D (IRT2). Para realizar adecuadamente la medición de las temperaturas con los dos termómetros IR que se utilizan (IRT1 y IRT2), hay que tener en cuenta que estén bien orientados hacia la superficie que se quiere medir, sin estar cerca de ningún objeto/dispositivo que pudiera alterar la temperatura de dicha superficie. Inicialmente, se elige una superficie de temperatura uniforme, por ejemplo, la cara palmar o dorsal de la mano, sobre la que se toma la temperatura. Se realizan mediciones de la superficie para diferentes distancias, a fin de obtener el rango óptimo de distancia de medición del IRT2; de forma que suministre los valores de temperatura adecuados en ese rango tras haber finalizado la calibración. Tras haber elegido una superficie adecuada, se realiza una medición de la temperatura con el IRT2, el cual proporciona tanto 𝑇𝑎2 (temperatura ambiente medida por IRT2) como 𝑇𝑜2 (temperatura superficie medida por IRT2) a una distancia dada. En el instante posterior a esta medición, se toma la temperatura de la misma superficie con el IRT1 (𝑇𝑜1), que muestra únicamente la temperatura del objeto que apunta. Por tanto, se realiza también con el IRT1 la toma de la temperatura ambiente (𝑇𝑎1). Una vez conocidos los dos pares de datos (𝑇𝑎2, 𝑇𝑜2) y (𝑇𝑎1, 𝑇𝑜1), se calcula la diferencia entre 𝑇𝑜2 y 𝑇𝑜1, obteniéndose el error cometido en la medición de la superficie por IRT2 con respecto al IRT1 (la referencia para la calibración). Del mismo modo, se realiza la diferencia entre 𝑇𝑎2 y 𝑇𝑎1 para conocer el error cometido por IRT2 en la medida de la temperatura ambiente. Este procedimiento se repite 6 veces para cada distancia de medición. El número de repeticiones para la obtención de la temperatura para una misma distancia se ha elegido observando el comportamiento poco dispersivo de dichos valores (Figura 3-4 y Figura 3-5). Por otro lado, la distancia solo es necesario variarla para realizar la medida de las temperaturas
29 29 con IRT2, debido a que IRT1 realiza la toma de la temperatura de manera óptima en el rango 5-15 cm. Interesa guardar una distancia prudencial a la piel del paciente, apuntar bien con el termómetro y estar dentro del rango de distancias que recomienda el fabricante [14]. Por ello, se ha elegido calibrar el IRT2 en un rango entre 6 y 30 cm (tomando valores enteros). Por tanto, cada la obtención de 6 pares de medidas por cada termómetro IR, se varía la distancia. De esta forma se adquieren 25 pares de errores (error de la 𝑇𝑎2 y de la 𝑇𝑜2). El objetivo de esta calibración es ver cómo varía el error cometido por IRT2 al medir las 𝑇𝑎2 (temperatura ambiente medida por el sensor IR) y 𝑇𝑜2 (temperatura de la superficie proporcionada por el sensor IR) con la distancia de medición. Dicho comportamiento se observa para 𝑇𝑜2 en la Figura 3-4 y para 𝑇𝑎2 en la Figura 3-5. En ambas figuras se ha representado el valor absoluto del error frente a la distancia. Figura 3-4. Representación gráfica del error de la temperatura de la superficie medida por IRT2 (termómetro IR) respecto IRT1 (termómetro de referencia). 0 0,5 1 1,5 2 2,5 3 3,5 0 5 10 15 20 25 30 35 Error (°C) Distancia (cm)
36 Caracterización experimental y calibrado Figura 3-9. Posición (x,y) de la matriz. Si la Figura 3-9 fuera la matriz que representa la imagen infrarroja, IM(i,j) proporcionaría la radiación de la posición (x,y). Mediante la relación lineal (3.5) se puede conocer la temperatura que le corresponde a esa posición y a cualquiera de la matriz. Por tanto, es posible conocer la temperatura en cualquier punto de la superficie deseada a partir de sus valores de radiación, construyendo un mapa 2D de temperatura que ayuda a la detección de variaciones térmicas de la superficie deseada.
37 Capítulo 4 Descripción del programa en lenguaje C En este capítulo se presentarán las explicaciones de los programas construidos para la obtención de la temperatura de la superficie calibrada y conocer la dependencia radiación/temperatura. 4.1 Descripción del programa realizado en lenguaje C de la medición calibrada del termómetro IR En esta sección se describe las diferentes operaciones que realiza el programa efectuado en lenguaje C, y ejecutado en la plataforma Raspberry Pi para la obtención de las temperaturas corregidas de la superficie y del ambiente medidas por el termómetro IR MLX90614D [14]. 1. Se solicita al usuario que elija la forma que desea calibrar el termómetro, apareciéndole por pantalla dos opciones: 1.1 Utilizando la curva de ajuste encontrada a partir de los datos experimentales. La distancia óptima para realizar la medida de la temperatura está entre 6 y 30 cm, dentro de ese rango el usuario puede hacer la medición a la distancia que desee. 1.2 Utilizando los datos experimentales del error para cada distancia, especificándole que el rango de distancia posible para la medición está limitado, siendo solo posible valores enteros entre 6-30cm. 2. Según la opción que escoja el usuario se distinguen dos procedimientos. 2.2 Opción curva de ajuste. 2.2.1 Se solicita al usuario que introduzca la distancia a la que desea realizar la medición de la temperatura de la superficie en el rango 6-30 cm. 2.2.2 Mediante la curva de ajuste que relaciona el error cometido en la medición de la temperatura en función de la distancia, se calcula el error correspondiente a través de la ecuación (3.1).
38 Descripción del programa en lenguaje C 2.3 Opción uso de datos experimentales. 2.3.1 Se solicita al usuario que introduzca un valor entero de la distancia a la que desea realizar la medición de la temperatura de la superficie en el rango 6- 30 cm. 2.3.2 Se conoce por los datos experimentales el error que comete el termómetro IR a dicha distancia. De tal forma que le devuelve al usuario dicho valor. 3. Empieza a funcionar el termómetro y muestra por pantalla al usuario la temperatura de la superficie y del ambiente en el que se está realizando la medición corregidas. 4.2 Descripción del programa realizado en lenguaje C de la medición calibrada de la cámara IR Lo ideal habría sido realizar un programa en C con los pasos especificados en la Sección 3.3 (calibración sensor imágenes infrarrojas). Sin embargo, debido a la situación de estado de alarma en la que se ha encontrado el país por el COVID-19 durante el desarrollo de este trabajo, no se ha podido disponer del sensor que proporciona las imágenes infrarrojas. Por lo tanto, al no poseer la cámara infrarroja, no se tiene forma de conocer los valores de radiación IM1 y IM2 de las superficies que aparecen en la Sección 3.3. La imagen que genera la cámara térmica es un vector de 80x60 elementos en formato unit16, que es un formato propio de C donde cada elemento del vector es un entero sin signo codificado con 16 bits. En consecuencia, como alternativa a esta falta de información para poder conocer la dependencia lineal entre los niveles de radiación y temperatura, se ha construido dos matrices aleatorias de dimensión 80x60. Estas matrices contienen números aleatorios entre 0 y 216 debido al formato de la imagen que proporciona la cámara (unit16). Los pasos del programa creado para la calibración son los siguientes. 1. Se informa al usuario que en cada medición tiene que estar apuntando con el dispositivo hacia la superficie de medida, y que para la realización de la conversión de los niveles de radiación en temperatura es necesario elegir dos superficies diferentes planas con temperatura uniforme. 2. Se realiza el mismo procedimiento que para la calibración del termómetro IR hasta que se obtiene la temperatura corregida T1 de la primera superficie.
39 39 3. Se pregunta al usuario si quiere continuar con la calibración para la toma de la temperatura de la segunda superficie. Además, se le informa que la distancia de medición de este segundo cuerpo no puede variar respecto a la medida del primero. 4. El termómetro funciona y proporciona T2, que va a estar corregida y con el mismo error que T1, ya que la medición de las dos superficies se realiza a la misma distancia. 5. Se crea una función adicional que construye una matriz de dimensión 160x120 con números aleatorios entre 0 y 216, que es la denominada “matriz” en el código. 6. Se construyen dos matrices aleatorias 80x60 (“matriz1” y “matriz2”) a partir de la matriz principal 160x120 para poder asegurar que estos dos arrays no son idénticos. De tal forma que, matriz1 contiene la primera mitad de la matriz principal y, la matriz2, la segunda mitad. 7. Una vez conocido matriz1 y matriz2, que sería la información que suministraría la cámara IR a partir de las imágenes de las superficies de medición, se calcula el valor medio de cada matriz (IM1 y IM2) y se tiene las dos ternas (T1, IM1) y (T2, IM2). 8. Se calculan los coeficientes de la recta (a mediante (3.6) y b a través de (3.7)) de la dependencia lineal que siguen los valores de radiación infrarroja suministrados por la cámara y la temperatura medida por el termómetro (𝐼𝑀 = 𝑎 ∙ 𝑇 + 𝑏). 12 12 TT aIM IM − =− (3.6) 11b IM a T= − (3.7) 9. Finalmente, la relación encontrada para la conversión de los valores de temperatura y niveles de radiación, cuya ecuación (3.8), es proporcionada al usuario. IM a T b= + (3.8) Por tanto, al averiguar cuál es la relación existente entre los valores radiación y la temperatura, se puede conocer la temperatura absoluta de cada píxel de la imagen (que se corresponde con cada elemento de la matriz 80x60). Dicha conversión permite identificar la temperatura de cada punto de la superficie de estudio, generando imágenes termográficas (objetivo del trabajo).
41 Capítulo 5 Conclusiones y líneas futuras En este último capítulo se exponen las diferentes conclusiones obtenidas tras la realización de este TFG, las posibles líneas de continuación y las diversas aplicaciones en las que se pueden utilizar el sistema de sensores infrarrojos. Se ha sintetizado un sistema para la obtención de la temperatura de una determinada zona de la piel formado por un sensor IR de temperatura y un sensor IR de imagen. El termómetro IR se ha calibrado utilizando como referencia un termómetro IR comercial destinado a la medición de la temperatura corporal sin contacto. Tras la realización de esta calibración se han obtenido dos formas posibles de conseguir la temperatura corregida del cuerpo de medición, es decir, mediante los datos experimentales tomados para la calibración o a través de la curva de mejor ajuste de dichos datos. Siendo este último método más eficiente, debido a que el usuario puede obtener la temperatura corregida del cuerpo a cualquier distancia sin restricciones en el rango óptimo de medición (6-30 cm). Como la cámara IR detecta la radiación emitida por el cuerpo en la banda del infrarrojo, pero no la temperatura, se ha establecido una relación entre ambos valores para poder conocer la temperatura de cada punto de la imagen que proporciona el sensor IR de imágenes, obteniendo un mapa 2D de temperatura que permite detectar las variaciones térmicas en la zona de la piel deseada. Sin embargo, no se ha podido disponer de la cámara IR debido al estado de alarma del país por el COVID-19. Por tanto, como alternativa se han simulado las matrices 80x60 que suministraría dicha cámara para poder obtener la dependencia lineal que tienen los niveles de radiación y temperatura según el fabricante [15].
42 Conclusiones y líneas futuras Un trabajo que quedaría por hacer sería montar la cámara IR junto con el termómetro en la plataforma Raspberry Pi, para poder probar su utilidad en el hospital Virgen del Rocío de Sevilla, en el Área de Dermatología Pediátrica [13] con el fin de la detección y diagnóstico de manera temprana de anomalías vasculares en niños. Por otro lado, una de las principales ventajas del sistema es el reducido coste debido a la baja resolución del sensor IR en comparación con otros métodos como la resonancia magnética o la ecografía Doppler para la detección de anomalías vasculares. Resulta que no es necesaria una mayor resolución del sensor de imágenes IR debido a que incluso con señales ruidosas o defectuosas se puede extraer información relevante que ayuda a la identificación de las anomalías vasculares. Este sistema permite el procesamiento de las imágenes en tiempo real, y con ello conocer la temperatura de cada punto de la imagen en el mismo momento de una primera consulta médica. Es una forma eficiente y rápida de detección de las variaciones térmicas en la piel que provocan las anomalías vasculares, que es la principal aplicación de este sistema. Esto hace posible el diagnóstico de los pacientes en la primera consulta y el control de forma temprana, sin la necesidad de someterse a ningún mecanismo que requiera mayores costes, tiempo y material, teniendo en cuenta que un diagnóstico temprano es fundamental en determinadas enfermedades y anomalías. Este sistema sería útil como ayuda para la detección y diagnóstico de problemas relacionados con variaciones térmicas en la piel, ya que permite además conocer la distribución del calor en las distintas zonas en las que se realiza la medición, siendo posible identificar, por ejemplo, problemas circulatorios. Dicho sistema también se plantea como alternativa para la monitorización de temperatura debido al brote de COVID-19, ya que, si se incluyen algoritmos de detección facial, podrían suponer un sistema económico y eficaz para evitar posibles contagios entre personas que presenten síntomas. Al estar compuesto por cámaras, hace posible el reconocimiento facial para la identificación y el seguimiento de posibles personas sintomáticas. De esta forma, con las salidas del sensor de imágenes se puede controlar los espacios públicos o lugares vulnerables creando entornos más seguros gracias al rastreo y reconocimiento de posibles afectados por el COVID-19. Por lo tanto, entre los posibles trabajos futuros se pueden destacar:
43 43 • Incorporación de un sistema de refrigeración/ventilación que permita un tiempo de uso continuado más prolongado del sistema, dado que la plataforma Raspberry Pi debe apagarse tras un tiempo de utilización continuado debido a su calentamiento. • Incorporación a la cadena de procesado de un software de reconocimiento facial que, mediante inteligencia artificial (IA), sea capaz de clasificar a las personas que aparezcan en el plano visual como posibles contagiados. • Diseño de un sistema de detección mediante IA de enfermedades cardiovasculares, permitiendo al usuario un diagnóstico asistido.
45 Referencias [1] R.Eisberg y R. Resnick. (1988). Física Cuántica: átomos, moléculas, sólidos, núcleos y partículas. México: Limusa. [2] A. Rogalski. (2011). Infrared Detectors. New York: CRC Press. [3] W. Minkina and S.Dudzik. (2009). Infrared Thermography. Errors and Uncertainties. Poland: Wiley [4] V. Leboucher, "IR revolution 360 infrared panoramic camera the ultimate solution for perimeter security," 44th Annual 2010 IEEE International Carnahan Conference on Security Technology, San Jose, CA, 2010, pp. 425-428, doi: 10.1109/CCST.2010.5678699. [5] S. Meghana, T. V. Nikhil, R. Murali, S. Sanjana, R. Vidhya and K. J. Mohammed, "Design and implementation of surveillance robot for outdoor security," 2017 2nd IEEE International Conference on Recent Trends in Electronics, Information & Communication Technology (RTEICT), Bangalore, 2017, pp. 1679-1682, doi: 10.1109/RTEICT.2017.8256885. [6] N.A Diakides and J.D. Bronzino (editors). (2007). Medical Infrared Imaging. New York: CRC Press. [7] A. Saxena and G. Willital, “Infrared thermography: Experience from a decade of pediatric imaging,” European Journal of Pediatrics, vol. 167, no. 1, pp. 757–764, August 2008. [8] J. Hardwicke and O. Titley, “Thermographic assessment of a vascular malformation of the hand: A new imaging modality,” Journal of Clinical Imaging Science, vol. 6, no. 1, pp. 6– 9, March 2016. [9] S. Schneider, I. Kohli, I. Hamzavi, M. Council, A. Rossi, and D. Ozog, “Emerging imaging technologies in dermatology: Part I: Basic principles,” Journal american academy dermatology, vol. 80, no. 40, pp. 1114–1120, April 2019. [10] M. García-Romero, A. Chakkittakandiyil, and E. Pope, “The role of infrared thermography in evaluation of proliferative infantile hemangiomas. Results of a pilot,” International Journal of Dermatology, vol. 53, no. 3, pp. 216–217, May 2014.
52 Anexo } atemp=calc/AVG; // Proporciona la tempeatura ambiente calibrada /* Se muestra al usuario la temperatura de la superficie medida y la temperatura ambiente */ printf("Temperatura ambiente = %04.2f ºC\n ", atemp); printf("Temperatura superficie = %04.2f ºC\n ", skytemp); printf("\n \n"); printf("¡Medida realizada con éxito!\n"); return 0; } while (opcion!= 2); return 0; } A2. Algoritmo para la obtención de la dependencia lineal entre los valores de los niveles de radiación y temperatura #include <stdio..h> #include <bcm2835.h> #include <stdlib.h> #include <fcntl.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <time.h> #include <stdio.h> #include <stdio.h> #include <stdio_ext.h> #define AVG 1 //averaging samples #include <math.h> #define M 80 // Número de filas de las matrices que proporcionaría la cámara IR #define MT 160 // Número de filas de la matriz aleatoria creada para obtener dos matrices aleatorias diferentes (las que proporcionaría la cámara IR) #define N 60 #define NT 120 // Número de columnas void introduce (int **matriz); int main (int argc, char **argv) { int opcion,distancia; float errord,d,hace,p2,p1,p0;
53 53 /*Se crea un vector que contiene el error de la temperatura suministrada por el termómetro para cada distancia entre 6-30 cm (números enteros). Son los datos obtenidos en la calibración*/ float error_medida[25]={1.29, 1.40, 1.40, 1.57, 1.73, 1.63, 1.99, 2.33, 2.51, 2.51, 2.88, 2.80, 2.87, 2.72, 2.73, 2.80, 2.75, 2.96, 2.86, 2.92, 2.96, 2.83, 2.96, 2.90, 2.82}; /* Primer paso: Se hace elegir al usuario que escoja la forma de obtener el error cometido por el termómetro a la hora de medir la temperatura: caso 1: mediante la curva de ajuste caso 2: mediante los datos experimentales */ printf("\n Obtención de la conversión de los niveles de radiación en temperatura\n"); printf("\n 1º Elija dos superficies planas, diferentes y con temperatura uniforme\n"); printf("\n 2º Coloca el dispositivo apuntando hacia la primera superficie a la distancia deseada.\n"); printf("\n 3º Todas las medidas se realizan a la misma distancia \n"); opcion = 0; distancia = 0; do { printf("\n\n Elección del método de calibración termómetro \n"); printf("\n 1. Utilizando curva de ajuste (valor de distancia entre 6-30 cm) \n"); printf("\n 2. Utilizando valores experimentales (valor de distancia entero entre 6-30 cm) \n"); printf("\n\n Elija la forma de correción de la temperatura medida:"); scanf("%d",&opcion); printf("\n Introduzca la distancia de medición, distancia (cm) = "); scanf("%d", &distancia); // se guarda la distancia introducida por el usuario // verificación al usuario de la distancia introducida printf("\n\n La distancia de medición introducida es %d cm\n",distancia); // Lee la opción seleccionada por el usuario switch (opcion) { case 1: // Curva de mejor ajuste de los datos de la calibración /* Se guarda la distancia introducida como d en el caso de que esté comprendida entre 6-30 cm.*/ if (distancia>=6 && distancia<=30) { hace = 0; d = distancia; } else { /* Avisa al usuario que la distancia introducida
54 Anexo no es válida y le recuerda el rango válido para la medición*/ printf("\nError, la distancia debe estar en el rango calibrado 6-30 cm\n "); } // Coeficientes de la curva de ajuste p2 = -0.005283; p1 = 0.259728; p0 = -0.244709; errord = p2*d*d + p1*d + p0; /* Ecuación de la curva de ajuste que relaciona la distancia con su error en la medición de la temperatura */ /*Proporciona al usuario por pantalla el error cometido en la medida de la temperatura del paciente para la distancia seleccionada*/ printf("El error cometido en la medición de la temperatura del paciente es = %04.2f ºC\n", errord); break; case 2: // Utilización de los datos de la calibración if (distancia>=6 && distancia<=30) { errord = error_medida[distancia-6]; /*guarda en la variable errod el error de la temperatura para la distancia seleccionada*/ /*Proporciona al usuario por pantalla el error cometido en la medida de la temperatura del paciente para la distancia seleccionada*/ printf("El error cometido en la medidción de la temperatura del paciente es = %04.2f ºC\n", errord); } else { printf("\n Error, el valor de la distancia no es válido. Debe elegir un entero en el rango de calibración (6-30cm)\n"); } break; default: printf("\n Error, la ópción introducida no es válida\n"); } /* Una vez conocido el error que se comete en la medición de la temperatura, empieza a funcionar el termómetro */ /* Segundo paso: Se seleccionan dos superficies diferentes con temperatura uniforme*/ unsigned char buf[6]; unsigned char i,reg1,reg2,j; double temp=0,calc=0, T1,atemp,T2,calc2,temp2; bcm2835_init(); bcm2835_i2c_begin(); bcm2835_i2c_set_baudrate(25000); // set address bcm2835_i2c_setSlaveAddress(0x5a); printf("\n ¡El termómetro está funcionando!\n");
55 55 // Código que proporciona el termómetro IR /* Empieza la medición de la primera superficie y de la temperatura ambiente */ calc=0; reg1=7; for(i=0;i<AVG;i++) { bcm2835_i2c_begin(); bcm2835_i2c_write (®1, 1); bcm2835_i2c_read_register_rs(®1,&buf[0],3); temp = (double) (((buf[1]) << 8) + buf[0]); temp = (temp * 0.02)-0.01; temp = temp - 273.15 + errord; /* errord es el error cometido en la medición */ calc+=temp; sleep(1); } T1=calc/AVG; /* Proporciona la primera medida de la temperatura de la superficie 1*/ calc=0; reg1=6; for(i=0;i<AVG;i++) { bcm2835_i2c_begin(); bcm2835_i2c_write (®1, 1); bcm2835_i2c_read_register_rs(®1,&buf[0],3); temp = (double) (((buf[1]) << 8) + buf[0]); temp = (temp * 0.02)-0.01; temp = temp - 273.15 - 0.99; calc+=temp; sleep(1); } atemp=calc/AVG; // Temperatura ambiente printf("Temperatura ambiente = %04.2f ºC\n", atemp); printf("Temperatura superficie 1 = %04.2f ºC \n", T1); /* Pregunta al usuario si desea continuar con la calibración de la cámara IR */ // Tiene que elegir otra superficie diferente char salir; do { printf(" \n Cambie de superficie y apunte con el dispositivo hacia ella para la obtención de su temperatura. ¿Desea continuar con la calibración? (S/N):"); __fpurge(stdin); // Borra el buffer para que no se encuentre la tecla intro scanf("%c",&salir); } while(salir != 'S' && salir!='s'); printf("\n El dispositivio está funcionando para la segunda medida \n");
56 Anexo /* El termómetro funciona de nuevo para la toma de la temperatura de la segunda superficie*/ calc=0; reg2=7; for(i=0;i<AVG;i++) { bcm2835_i2c_begin(); bcm2835_i2c_write (®2, 1); bcm2835_i2c_read_register_rs(®2,&buf[0],3); temp = (double) (((buf[1]) << 8) + buf[0]); temp = (temp * 0.02)-0.01; temp = temp - 273.15 + errord; calc+=temp; sleep(1); } T2=calc/AVG; // Proporciona la temperatura de la superfice 2 elegida printf("\n Temperatura superficie 2 = %04.2f ºC\n", T2); printf("\n ¡Medidas realizadas con éxito!\n"); /* La matriz 160x120 creada se divide en dos para asegurar que ambas submatrices son aleatorias pero diferentes - Matriz 1: contiene la primera mitad de matriz - Matriz 2: contiene la segunda mitad de matriz */ int **matriz; int **matriz1; int **matriz2; /*Para reservar el espacio de memoria necesaria*/ matriz = reservar(); matriz1 = reservar2(); matriz2 = reservar2(); introduce(matriz); // Se definen los valores de la "matriz" int elemento_actual1, elemento_actual2, sumatoria1,sumatoria2; int cantidad_elementos1,cantidad_elementos2; double IM1,IM2; int a,b; for(i=0; i<M; i++) { for (j=0; j<N; j++) { matriz1[i][j] = matriz[i][j]; } } sumatoria1 = 0; cantidad_elementos1 = M*N; // filas*columnas // Se calcula el valor medio de todos los elementos de la matriz 1 for (i = 0; i<M; i++){ for(j = 0; j<N; j++){ elemento_actual1 = matriz1[i][j];
57 57 sumatoria1 = sumatoria1 + elemento_actual1; } } IM1 = sumatoria1/cantidad_elementos1; // Valor medio printf("Valor medio del nivel de radiación de la superficie 1 es IM1 = %0.2f\n", IM1); for(i=0; i<M; i++){ for (j=0; j<N; j++){ matriz2[i][j] = matriz[i+M][j+N]; } } sumatoria2 = 0; cantidad_elementos2 = M*N; // filas*columnas // Se calcula el valor medio de todos los elementos de la matriz 1 for (i = 0; i<M; i++){ for(j = 0; j<N; j++){ elemento_actual2 = matriz2[i][j]; sumatoria2 = sumatoria2 + elemento_actual2; } } // Se calcula el promedio IM2 = sumatoria2/cantidad_elementos2; printf("\n Valor medio del nivel de radiación de la superficie 2 es IM2 = %0.2f\n", IM2); /* Al haber una dependencia lineal entre los valores de radiación medidos con la cámara y la temperatura medida por la temperatura se calcula dicha recta para ver cómo se traducen los niveles de radiación en temperatura IM = a*T + b*/ a = (T1-T2)/(IM1/IM2); b = IM1-(a*T1); printf("\n La dependencia lineal entre los valores de radiación y la temperatura es IM = %i*T+%i \n",a,b); // Se libera la memoria asignada a las matrices free(matriz); matriz = NULL; free(matriz1); matriz1 = NULL; free(matriz2); matriz2 = NULL; return 0; } while (opcion!= 2); return 0; } // Se reserva espacio de memoria para las matrices int reservar() { int i;
58 Anexo int **mat; mat = (int**)malloc(MT*sizeof(int*)); if(mat==NULL) { printf("No se ha podido reservar memoria.\n"); exit(1); } for(i=0; i < MT; i++){ mat[i] = (int*)malloc(NT*sizeof(int)); if (mat[i] == NULL) { printf("No se ha podido reservar memoria.\n"); exit(1); } } return mat; } int reservar2() { int i; int **mat2; mat2 = (int**)malloc(M*sizeof(int*)); if(mat2==NULL){ printf("No se ha podido reservar memoria.\n"); exit(1); } for(i=0; i < M; i++){ mat2[i] = (int*)malloc(N*sizeof(int)); if (mat2[i] == NULL) { printf("No se ha podido reservar memoria.\n"); exit(1); } } return mat2; } /* Creación de una matriz 160x120 que contiene a las dos matrices que que sustituye la información proporcionada por el sensor de imágenes IR*/ void introduce(int **mat) { int i,j; srand(time(NULL)); for (i=0; i<MT; i++){ for (j=0; j<NT; j++){ mat[i][j] = rand()%16384; } } }