Professional Documents
Culture Documents
Facultad de Ingenierı́a
Escuela de Ingenierı́a Eléctrica
Por:
Por:
Daniel Hernández Méndez
v
Reconocimiento
A mi profesor guı́a Julián Gutiérrez Monge por su ayuda y colaboración. A
mis profesores lectores por su tiempo y comentarios
vi
Resumen
En el presente documento se estudia e implementa construcción de una
cámara térmica mediante un arduino. Se hizó una investigación de los funda-
mentos teóricos que rigen el funcionamiento del sensor MLX90614. Además
se investigó el protocolo de comunicación I2C utilizado por el MLx90614 para
comunicarse con el Arduino.
Ademas se hizó una interfaz gráfica para poder observar fácilmente la ima-
gen térmica obtenida, y otros datos de temperatura. Finalmente, se realizaron
pruebas con la cámara térmica a diferentes resoluciones de imágenes y se ob-
servó que a mayor resolución de la imagen térmica se obtiene mayor detalle,
pero con el inconveniente de que se incrementa considerablemente el tiempo
en que se tarda en obtener la imagen.
Se concluye que es posible desarrollar una cámara térmica de bajo costo por
medio de la tecnologı́a arduino, brindando un amplio rango de funcionalidad
y ventajas que otros sistemas no ofrecen o que resultan ser muy costosos.
vii
Índice general
Índice de figuras xi
Nomenclatura xiii
1 Introducción 1
1.1 Justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Metodologı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Marco teórico 3
2.1 Plataforma Arduino . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 Arduino y Processing . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 MLX90614 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.5 Servo motor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.6 Protocolo de comunicación del bus I2C . . . . . . . . . . . . . . 11
3 Desarrollo 15
3.1 Sensor MLX90614 . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 Comunicación Serial Primera parte . . . . . . . . . . . . . . . . 23
3.3 Circuito Final . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4 Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.5 Mapa de distribución de temperatura . . . . . . . . . . . . . . . 29
3.6 Cámara Webcam . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.7 Interfaz gráfica de usuario . . . . . . . . . . . . . . . . . . . . . 31
3.8 Creación de la aplicación . . . . . . . . . . . . . . . . . . . . . . 33
3.9 Procedimiento de uso de la cámara térmica . . . . . . . . . . . 33
3.10 Resultados de las pruebas experimentales . . . . . . . . . . . . 34
3.11 Bajo Costo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4 Conclusiones y recomendaciones 41
4.1 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2 Recomendaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 42
ix
5 Bibliografı́a 43
x
Índice de figuras
xi
Índice de cuadros
xii
Nomenclatura
ACK recibido (acknowledgement)
To Temperatura objeto.
Ta Temperatura ambiente
xiii
1 Introducción
1.1 Justificación
La idea del proyecto surge ante la necesidad de contar con una cámara
térmica desarrollada con materiales de bajo coste y fáciles de conseguir, esto
con la tarea de poder ver la temperatura de una superficie sin tener que hacer
contacto alguno con ella, motivo por el cual a este tipo de cámara térmica se
le abre un amplio campo de aplicaciones, como la inspección de instalaciones
eléctricas y poder localizar defectos en las instalaciones lograndose detectar
las perdidas energéticas.
1
2 1 Introducción
1.2 Objetivos
Objetivo general
Diseño y construcción de una cámara térmica de bajo costo mediante el uso
de un sensor Infrarrojo, servo motores y un arduino.
Objetivos especı́ficos
Para el desarrollo de este proyecto se establecieron los siguientes objetivos:
1.3 Metodologı́a
El desarrollo del trabajo incluyó los siguientes pasos y procedimientos, listados
en secuencia:
3
4 2 Marco teórico
Arduino UNO
Una de las principales caracterı́sticas que presenta la plataforma arduino es
su gran variedad de modelos, brindando la oportunidad de tener una amplia
gama para escoger el que mejor se ajuste a las necesidades que el problema a
resolver requiera.
2.2 Processing
Processing es un lenguaje de programación, entorno de desarrollo y una co-
munidad online. Este lenguaje, basado en Java, fue gestado con la simplicidad
en mente, para que diseñadores, artistas, estudiantes, arquitectos, ingenieros,
matemáticos, investigadores o simplemente personas con una gran curiosidad
y motivación creativa puedan aprender a programar, sin que esto resulte un
2.3. Arduino y Processing 5
Microcontrolador ATmega328
Tensión de operación 5V
Tensión de entrada (recommendada) 7-12V
Tensión de entrada (limites) 6-20V
Pines Digitales I/O 14 (6 preveen salida PWM)
Pines analogicos de entrada 6
Corriente DC por I/O 40 mA
Corriente DC por 3.3V Pin 50 mA
Memoria Flash 32 KB (ATmega328)
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Velocidad del reloj 16 MHz
dolor de cabeza ni tengamos que lidiar con una alta tecnicidad computacional,
y que al mismo tiempo, disfrutemos de la flexibilidad que nos permite comu-
nicarnos con la computadora en su propia lengua, el código. (Processing, 2014)
2.4 MLX90614
El sensor MLX90614 desarollado por Melexis es un sensor infrarrojo para
medir temperaturas sin necesidad de contacto alguno. Tal como se ve de su
diagrama de bloques en la figura 2.2, este sensor cuenta con un amplificador de
bajo ruido, un convertidor analógico digital de alta resolución de 17 bits, una
unidad de procesamiento digital de la señal, garantizando una alta resolución y
precisión alcanzada. El sensor viene de fábrica calibrado con una salida PWM
y SMBus (System Management Bus). (Melexis, 2013).
Las temperaturas de ambiente (Ta) y del objeto (To) calculadas están dis-
ponibles en la RAM interna del MLX90614 con una resolución de 0, 02◦ C, y
son accesibles por las salidas tanto, con el protocolo serial de dos cables SM-
Bus (I2C o TWI) o vı́a PWM (modulación por ancho de pulso) de 10-bits. En
el caso de este proyecto se usara el protocolo I2C para comunicarse entre el
arduino y el MLX90614. (Melexis, 2013).
Este sensor además cuenta con un filtro óptico que corta el flujo radiante
visible e infrarrojo cercano, este filtro está integrado en el empaquetado para
proporcionar inmunidad al ambiente y la luz solar. (Melexis, 2013).
Funcionamiento
El motor del servo tiene algunos circuitos de control y un potenciómetro conec-
tado al eje central del servo motor. Este potenciómetro permite a la circuiterı́a
de control, supervisar el ángulo actual del servo motor. Si el eje está en el án-
gulo correcto, entonces el motor está apagado. Si el circuito chequea que el
10 2 Marco teórico
La comunicación de datos del bus I2C es serial y sı́ncrona. Las dos señales
del bus son bidireccionales y de drenaje abierto, una de la señales del bus
marca el tiempo la SCL (serial clock) que es la lı́nea de los pulsos de reloj que
sincronizan el sistema y la otra que es la lı́nea usada para intercambiar datos
entro los dispositivos SDA (serial data). Ya que ambas señales son de drenaje
abierto están se deben de polarizar en estado alto por medio de resistencia de
pull-up (conectadas a la alimentación), y además todos los dispositivos conec-
tados al bus deben compartir la misma tierra. (Carletti, 2011).
• Bus libre (Bus Free): Estado en el que ambas lı́neas (SDA y SCL) están
inactivas, presentando un estado lógico alto. Es el único momento en
que un dispositivo maestro puede comenzar a hacer uso del bus.
15
16 3 Desarrollo
Donde “I2C WRITE” tienen el valor de 1 lógico para indicar que se trata
de una escritura (Write) y se suma para incluirlo en el byte del parámetro que
recibe la función.
Y con esto finalizarı́a lo que respecta a tomar la lectura del sensor MLX,
para simplifar la hora de tomar la lectura todo esto se agrupa en la función
llamada leerSensorMLX().
Servo motores
Conexión Servo motores
Como ya se explicó los servo motores (servos, para simplificar) tienen 3 cables
a su salida que corresponden a: rojo Vcc (+5 V), negro GND (tierra) y amarillo
el de control, por lo que la conexión al arduino de los servos debe hacerse de
manera que con coincidan la alimentación y la tierra, el cable de control del
servo debe ir conectado a uno de los pines digitales del arduino, la conexión
de los servos se muestra en la figura 3.7.
3.1. Sensor MLX90614 21
Que como se nota de la figura 3.7, los servos se conectan a los pines digitales
6 y 7.
Estructura de soporte
Con los servos conectados y la estructura movil armada, lo que sigue es hacer
que los servos puedan mover la estructura, para ello mediante el arduino se
procede a programar el movimiento de los mismos.
Una vez con el buffer lleno, se procede a analizar el comando recibido donde
el primer carácter del comando va a corresponder a la función a ejecutar y se
lista a continuación:
Esos serı́an los posibles comandos a enviar y recibir. Cada vez que el ar-
duino recibe un comando este debe responder con un ACK para indicar que
recibió el comando correctamente y que está listo para recibir el siguiente.
3.2. Comunicación Serial Primera parte 25
3.4 Processing
Processing va ser usado como medio para poder generar una interfaz gráfica
mediante la cual poder controlar la cámara térmica, además de encargarse
de procesar la información obtenida del sensor de temperatura y generar el
mapa de distribución de temperatura o imagen térmica, ası́ como enviar los
comando al arduino mediante la comunicación serial.
28 3 Desarrollo
Para enviar la posición a la cual el servo se tiene que mover, se define la fun-
ción comandoSerial(), que se encarga de enviar por el puerto serial el comando
que recibe como parámetro y además esperar el ACK del comando enviado.
El comando se envı́a como una cadena de caracteres o un string simplemente
escribiendo en el puerto serial, pero ahora se entra en un nuevo problema estos
ángulos de las posiciones a enviar corresponden a un tipo de datos float, por lo
que es necesario contar con una función que convierta de float a string para po-
der enviarlos, esta función se llama “convertFloatAString()”, que recibe como
parámetro un número float, lo redondea a dos decimales, y lo convierte a un
string. Para esperar por el ACK, se crea una función llamada esperarSerial(),
que recibe como parámetro el comando esperado, este comando esperado se
compara con lo que se encuentra en el contenido del buffer serial, si son igua-
les significa que se recibió el comando esperado, pero si son diferentes hubo
un error en la comunicación y se debe esperar un tiempo para volver a en-
viar de nuevo el comando y esperar por su respectiva confirmación de recibido.
contar con una escala de colores apropiada para esta tarea, por lo que mediante
con otro programa de processing se construye una escala de colores que va estar
contenida en una imagen, donde cada pixel de la imagen va corresponder a
un color, el tamaño de la imagen debe ser de alto 1 pixel y el ancho depende
cuantos colores se usaron, un ejemplo de esta escala se muestra en la figura
3.11, donde el tamaño es 1x380 pixeles.
Se hace uso de una cámara webcam para tomar una foto del área a ser esca-
neada y ası́ poder hacer una comparación de la imagen térmica con una foto
tomada y poder visualizar de una mejor forma la superficie a analizar.
En este proyecto se usó la librerı́a llamada “g4p controls” creada por Peter
Lager, esta librerı́a provee todo un conjunto de controles para crear un GUI
2D. Una vez importada la librerı́a se puede hacer uso del “GUI Builder” que la
librerı́a provee y se ve como se muestra en la figura 3.12. Con el GUI builder
es posible agregar botones, agregar texto, ventanas, imágenes, etc. de manera
sencilla a la hora de crear una GUI.
32 3 Desarrollo
• Guardar imagen: permite guardar una imagen una vez la imagen térmica
esté terminada.
La razón para la cual se tiene que ir a las esquinas, es para ajustar los
lı́mites a los cuales se va a dar el movimiento de los servos, ya que estos
lı́mites cambian de acuerdo a la superficie a analizar y la distancia a la cual
se encuentra la cámara térmica de la superficie, de manera que los limites se
ajusten como se muestra en la figura 3.14.
Una ves con todo el sistema de la camara termica listo se procede a realizar
pruebas, para ello se escoge una superficie que contenga un objeto caliente
y lo demás frió o a temperatura ambiente, en este caso para las pruebas se
escoge el monitor de la computadora y se realizan varias imágenes térmicas a
diferentes resoluciones tal como se muestra en las figuras 3.15, 3.16, 3.17, 3.18.
3.10. Resultados de las pruebas experimentales 35
de temperatura no se vio muy afectada salvo que se muestra más área roja
o caliente cerca de la parte superior de la pantalla con forme se aleja y la
temperatura ambiente se incrementó.
• Arduino: $25
• Diodo laser: $2
• Cámara Webcam: $9
• Total: $95
Ası́ que el costo total es inferior a los $100, lo cual representa un costo
muy bajo en comparación con otras cámaras térmicas existentes en el merca-
do, donde una cámara térmica en el mercado ronda los precios desde los $1000
hasta los $8000, lo más barato encontrado es un dispositivo que se le puede
agregar a un teléfono móvil para convertirlo en una cámara térmica, pero este
cuesta más de $300. Por lo que se puede notar que este proyecto verdadera-
mente representa una opción de bajo costo y sus materiales son muy fáciles
de conseguir al estar basado este proyecto en arduino.
4 Conclusiones y recomendaciones
4.1 Conclusiones
• Se describió el proceso mediante el cual funciona el protocolo de comuni-
cación serial I2C, en el caso especı́fico del sensor termómetro infrarrojo
MLX90614.
• Se logró obtener la imagen térmica por medio del uso del sensor MLX90614,
servo motores y una estructura móvil que permitió escanear un área o
un objeto que se mantuviera estático.
41
42 4 Conclusiones y recomendaciones
4.2 Recomendaciones
• Se recomiendo el uso modelo del sensor MLX90614 utilizado en este
proyecto, ya que ofrece una mayor precisión y un menor campo de visión,
que se traduce en mejores medición a mayores distancias.
Melexis (2013). MLX90614 Familyl, Single and Dual Zone Infra Red
Thermometer in TO-39. Recuperado de http://www.adafruit.com/
datasheets/MLX90614.pdf
43
44 5 Bibliografı́a