
Hola a todos!
El invierno ha llegado, así que tuve que verificar el aislamiento térmico de mi
casa de campo fuera de la ciudad . Y resultó que un famoso mercado chino comenzó a vender módulos de cámara térmica baratos. Así que decidí armarlo y construir algo bastante exótico y útil: una visera térmica para el hogar. Por que no Especialmente porque tenía una Raspberry Pi por ahí de todos modos ... El resultado está abajo.
MLX90640. Que es
Esta es una matriz de cámara térmica con un microcontrolador integrado, fabricado por una compañía desconocida (para mí) llamada Melexis. La matriz tiene 32x24 píxeles, lo cual no es mucho, pero después de la interpolación es suficiente para notar las tendencias generales.

El sensor viene en dos versiones, la única diferencia es el caso y el FoV de la cámara. El modelo A más conectado a tierra observa el mundo con 110 grados en horizontal y 75 en vertical. El modelo B tiene 55 y 37.5 grados respectivamente. El estuche tiene cuatro salidas: dos para alimentación y dos para hablar con un dispositivo controlador a través de I2C. La hoja de datos se puede encontrar
aquí .
¿Qué es GY-MCU90640, entonces?
Nuestros colegas chinos también envían el chip MLX90640 con otro microcontrolador a bordo (STM32F103), probablemente para un control de matriz más fácil. Toda la unidad se llama GY-MCU90640, y me costó alrededor de 5,000 RUB (aproximadamente $ 80) en diciembre de 2018. Se ve así:

Como podemos ver, también hay dos versiones de este modelo, con diferentes sensores.
¿Cuál funcionará mejor? Desafortunadamente, solo me hice esta pregunta después de que el módulo ha sido ordenado, enviado y recibido. No lo he pensado al elegir.
La versión de ángulo más amplio es más adecuada para robots autónomos o sistemas de CCTV (ya que su campo de visión es mejor). La hoja de datos dice que también es menos ruidosa y más precisa.

Pero para la visualización, recomendaría el modelo B más “con ojos de águila”, por una razón muy importante. Se puede colocar en su lugar (manualmente o mediante una unidad) para hacer que las imágenes combinadas sean mucho más detalladas que su resolución de 32x24. Pero no tengo uno, así que más adelante hablaré sobre el modelo A de ángulo más amplio.
Conectando a la Raspberry Pi
Podemos controlar la cámara térmica de dos maneras:
- Cortar los pines "SET" en la placa y utilizar el protocolo I2C para controlar el microcontrolador MLX90640 directamente
- Deje los pines y use el controlador STM32F103 a través de RS-232 o una interfaz similar.
Si codifica en C ++, probablemente sea mejor ignorar el controlador adicional, acortar los pines y usar la API del fabricante, que se encuentra
aquí .
Los pitonistas humildes también podrían usar la primera opción. Parece que hay un par de bibliotecas de Python (
aquí y
aquí ), pero ninguna funcionó para mí.
Pythonists avanzados teóricamente podrían escribir su propio controlador de controlador. La hoja de datos explica cómo extraer un marco de ella. Pero tendrá que describir todos los procedimientos de calibración manualmente, lo cual me parece excesivamente difícil. Entonces utilicé la opción 2. Resultó ser un poco complicado, pero aún manejable.
Gracias al ingenio chino (o suerte), la configuración de salida en el tablero resultó ser muy conveniente:

Todo lo que necesitaba hacer era insertar la placa en el puerto de Raspberry. La placa tiene incorporado un convertidor de 5V-3V, por lo que las delicadas salidas Rx y Tx del Pi no están en peligro.
También agregaría que podría conectarlo de manera similar mientras usa la opción 1, pero tendrá que ser extremadamente cuidadoso y competente en la soldadura. La placa debe montarse en el otro lado del Pi (el ejemplo está en la foto del encabezado).
Software
El famoso mercado chino ofrece este majestuoso software para acceder al GY-MCU90640:

Aparentemente, también debe haber alguna descripción del protocolo de comunicación utilizado para acceder al microcontrolador, y después de una breve conversación con el vendedor (un gran respeto hacia él), tenía dicho protocolo en mis manos. En PDF y en chino puro destilado.
Gracias al Traductor de Google y una buena dosis de copiado, unos 90 minutos después, el protocolo ha sido decodificado. Lo cargué en

Github Resultó que la placa comprende 6 comandos básicos, incluido uno para solicitar la trama actual a través de un puerto COM.
Cada píxel de la matriz es esencialmente una lectura de la temperatura del objeto. El valor de la temperatura está en grados Celsius multiplicado por 100 (un número de 2 bytes). Incluso hay un modo especial cuando la placa envía fotogramas a la Pi automáticamente 4 veces por segundo.
El guión completo para recibir imágenes térmicas:"""MIT License Copyright (c) 2019 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.""" import serial, time import datetime as dt import numpy as np import cv2
Resultados
El script sondea la matriz térmica y envía cuadros a la consola del monitor conectado, 4 veces por segundo, lo cual es suficiente para no experimentar demasiadas molestias. Para la visualización utiliza el paquete OpenCV. Cuando presiona S, los "mapas de calor" de la cámara se cargan como JPG en la carpeta del script.

Para una mejor visibilidad, también hice que la aplicación muestre la temperatura mínima y máxima dentro del marco. Entonces, al observar el mapa de calor podemos estimar la temperatura de los objetos más fríos y calientes (dentro de un grado, generalmente en el lado más alto), dentro del rango de 20-40 grados. Ctrl + C sale del guión.

El script funciona igual en Raspberry Pi Zero W y Pi 3 B +. Instalé un servidor VNC en mi teléfono inteligente, por lo tanto, al llevar un Pi conectado a un banco de energía con un teléfono inteligente habilitado para VNC, podemos obtener una cámara térmica de bolsillo que guarda imágenes. Puede que no sea demasiado conveniente, pero hace el trabajo.
Después del primer arranque, podría mostrar la temperatura máxima incorrectamente, en cuyo caso solo reiniciar el script debería hacer el trabajo.
Eso es todo por hoy. El experimento podría considerarse un éxito. Definitivamente puedes hacer un escaneo térmico de una casa usando este dispositivo. Si alguien puede encontrar otros usos para esto, por favor escriba en los comentarios.
¡Feliz semana de trabajo y hasta pronto!
UPD: Me pidieron en los comentarios que tomara una foto de la casa desde afuera. Aqui esta Las imágenes terminaron siendo poco informativas debido al menor contraste de temperaturas. Las dos fotos superiores son la casa entera desde dos ángulos. Las dos fotos inferiores son ventanas diferentes.

El único cambio que hice al código fue el rango de temperatura: de +20 ... + 40 a -10 ... + 5.