
Olá pessoal!
O inverno chegou e, portanto, tive que verificar o isolamento térmico da minha dacha de
residência fora da cidade . E acabou que um famoso mercado chinês começou a vender módulos baratos de câmeras térmicas. Então, decidi fazer um bricolage e construir uma coisa bastante exótica e útil - uma viseira térmica para a casa. Porque não Especialmente porque eu tinha um Raspberry Pi por aí de qualquer maneira ... O resultado está abaixo.
MLX90640. O que é isso?
Esta é uma matriz de câmera térmica com um microcontrolador integrado, fabricado por uma empresa desconhecida (para mim) chamada Melexis. A matriz tem 32x24 pixels, o que não é muito, mas após a interpolação é suficiente observar tendências gerais.

O sensor vem em duas versões, a única diferença é o caso e o FoV da câmera. O modelo A mais fundamentado observa o mundo em 110 graus na horizontal e 75 na vertical. O modelo B tem 55 e 37,5 graus, respectivamente. O gabinete possui quatro saídas - duas para alimentação e duas para conversar com um dispositivo controlador via I2C. A folha de dados pode ser encontrada
aqui .
O que é o GY-MCU90640, então?
Nossos bolsistas chineses também enviam o chip MLX90640 com outro microcontrolador a bordo (STM32F103), provavelmente para facilitar o controle da matriz. A unidade inteira é chamada GY-MCU90640 e me custou cerca de 5.000 RUB (aproximadamente US $ 80) em dezembro de 2018. É assim:

Como podemos ver, existem também duas versões deste modelo, com sensores diferentes
Qual funcionará melhor? Infelizmente, só me fiz essa pergunta depois que o módulo foi encomendado, enviado e recebido. Eu não pensei sobre isso ao escolher.
A versão de ângulo mais amplo é mais adequada para robôs autônomos ou sistemas de CFTV (já que seu campo de visão é melhor). A folha de dados diz que também é menos barulhento e mais preciso.

Mas, para visualização, eu recomendaria o modelo B mais "de olhos de águia", por um motivo muito importante. Ele pode ser colocado no lugar (manualmente ou através de uma unidade) para tornar as imagens combinadas muito mais detalhadas do que sua resolução de 32x24. Mas eu não tenho um, então mais tarde falarei sobre o modelo A de ângulo mais amplo.
Conectando ao Raspberry Pi
Podemos controlar a câmera térmica de duas maneiras:
- Coloque os pinos “SET” na placa e use o protocolo I2C para controlar diretamente o microcontrolador MLX90640
- Deixe os pinos como estão e use o controlador STM32F103 através de RS-232 ou interface similar.
Se você codifica em C ++, provavelmente é melhor ignorar o controlador extra, encurtar os pinos e usar a API do fabricante, encontrada
aqui .
Pythonists humildes também poderiam usar a primeira opção. Parece haver algumas bibliotecas Python (
aqui e
aqui ), mas nenhuma funcionou imediatamente para mim.
Pythonists avançados poderiam teoricamente escrever seu próprio driver de controlador. A folha de dados explica como extrair um quadro dele. Mas você terá que descrever todos os procedimentos de calibração manualmente, o que acho excessivamente difícil. Então, usei a opção 2. Acabou sendo um pouco complicada, mas ainda gerenciável.
Graças à engenhosidade chinesa (ou sorte), a configuração de saída na placa acabou sendo muito conveniente:

Tudo o que eu precisava fazer era inserir a placa na porta do Raspberry. A placa possui um conversor de 5V-3V embutido, portanto as delicadas saídas Rx e Tx do Pi não correm perigo.
Eu também acrescentaria que você poderia conectá-lo de maneira semelhante ao usar a opção 1, mas precisará ser extremamente cuidadoso e proficiente em solda. A placa deve ser montada no outro lado do Pi (exemplo está na foto do cabeçalho).
De software
O famoso mercado chinês oferece este software majestoso para acessar o GY-MCU90640:

Aparentemente, também deve haver alguma descrição do protocolo de comunicação usado para acessar o microcontrolador e, após uma breve conversa com o vendedor (grande respeito a ele), eu havia dito o protocolo em minhas mãos. Em PDF e em chinês puro e destilado.
Graças ao Google Translate e uma boa dose de copiar e colar, cerca de 90 minutos depois, o protocolo foi decodificado. Eu enviei

Github Acontece que a placa compreende 6 comandos básicos, incluindo um para solicitar o quadro atual por uma porta COM.
Todo pixel da matriz é essencialmente uma leitura da temperatura do objeto. O valor da temperatura está em graus Celsius multiplicado por 100 (um número de 2 bytes). Existe até um modo especial quando a placa envia quadros para o Pi automaticamente 4 vezes por segundo.
O script completo para receber imagens 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
O script pesquisa a matriz térmica e envia os quadros para o console do monitor conectado, 4 vezes por segundo, o que é suficiente para não causar muito desconforto. Para visualização, ele usa o pacote OpenCV. Quando você pressiona S, “mapas de calor” da câmera são carregados como JPGs na pasta do script.

Para melhor visibilidade, também fiz o aplicativo exibir a temperatura mínima e máxima dentro do quadro. Assim, olhando o mapa de calor, podemos estimar a temperatura dos objetos mais frios e quentes (dentro de um grau, geralmente no lado superior), na faixa de 20 a 40 graus. Ctrl + C sai do script.

O script funciona da mesma maneira no Raspberry Pi Zero W e Pi 3 B +. Eu instalei um servidor VNC no meu smartphone, portanto, carregando um Pi conectado a um banco de potência com um smartphone habilitado para VNC, podemos obter uma câmera térmica de bolso que salva imagens. Pode não ser muito conveniente, mas funciona.
Após a primeira inicialização, ele pode exibir a temperatura máxima incorretamente; nesse caso, apenas a reinicialização do script deve fazer o trabalho.
É isso por hoje. O experimento pode ser considerado um sucesso. Você pode definitivamente fazer uma varredura térmica de uma casa usando este dispositivo. Se alguém conseguir outros usos para isso, escreva nos comentários.
Feliz semana de trabalho e até breve!
UPD: Nos comentários, fui convidado a tirar uma foto da casa pelo lado de fora. Aqui está. As fotos acabaram não sendo muito informativas devido ao menor contraste de temperatura. As duas fotos superiores são a casa inteira de dois ângulos. As duas fotos inferiores são janelas diferentes.

A única alteração que fiz no código foi a faixa de temperatura: de +20 ... + 40 a -10 ... + 5.