
Salut tout le monde!
L'hiver est arrivé, j'ai donc dû vérifier l'isolation thermique de ma datcha
hors résidence . Et il s'est avéré qu'un célèbre marché chinois a commencé à vendre des modules de caméra thermique bon marché. J'ai donc décidé de le bricoler et de construire une chose plutôt exotique et utile - une visière chauffante pour la maison. Pourquoi pas? D'autant plus que j'avais un Raspberry Pi qui traîne quand même ... Le résultat est en dessous.
MLX90640. Qu'est ce que c'est?
Il s'agit d'une matrice de caméra thermique avec un microcontrôleur embarqué, fabriquée par une société inconnue (pour moi) appelée Melexis. La matrice est de 32x24 pixels, ce qui n'est pas beaucoup, mais après interpolation, il suffit de remarquer les tendances générales.

Le capteur est disponible en deux versions, la seule différence étant le boîtier et le FoV de la caméra. Le modèle A le plus ancré observe le monde avec 110 degrés horizontalement et 75 verticalement. Le modèle B a respectivement 55 et 37,5 degrés. Le boîtier a quatre sorties - deux pour l'alimentation et deux pour parler à un dispositif de contrôle via I2C. La fiche technique se trouve
ici .
Qu'est-ce que le GY-MCU90640, alors?
Nos boursiers chinois expédient également la puce MLX90640 avec un autre microcontrôleur à bord (STM32F103), probablement pour un contrôle plus facile de la matrice. L'unité entière s'appelle GY-MCU90640, et cela m'a coûté environ 5 000 RUB (environ 80 $) en décembre 2018. Cela ressemble à ceci:

Comme nous pouvons le voir, il existe également deux versions de ce modèle, avec différents capteurs
Lequel fonctionnera le mieux? Malheureusement, je ne me suis posé cette question qu'après avoir commandé, expédié et reçu le module. Je n'y ai pas pensé en choisissant.
La version grand angle est mieux adaptée aux robots autonomes ou aux systèmes de vidéosurveillance (car son champ de vision est meilleur). La fiche technique indique qu'il est également moins bruyant et plus précis.

Mais pour la visualisation, je recommanderais le modèle B plus «aux yeux d'aigle», pour une raison très importante. Il peut être tourné en place (manuellement ou via un lecteur) pour rendre les images combinées beaucoup plus détaillées que sa résolution 32x24. Mais je n'en ai pas, donc plus tard je parlerai du modèle A à angle plus large.
Connexion au Raspberry Pi
Nous pouvons contrôler la caméra thermique de deux manières:
- Court-circuitez les broches «SET» sur la carte et utilisez le protocole I2C pour contrôler directement le microcontrôleur MLX90640
- Laissez les broches et utilisez le contrôleur STM32F103 via RS-232 ou une interface similaire.
Si vous codez en C ++, vous feriez probablement mieux d'ignorer le contrôleur supplémentaire, de court-circuiter les broches et d'utiliser l'API du fabricant, que vous trouverez
ici .
Les humbles pythonistes pourraient également utiliser la première option. Il semble y avoir quelques bibliothèques Python (
ici et
ici ), mais aucune n'a fonctionné pour moi.
Les pythonistes avancés pourraient théoriquement écrire leur propre pilote de contrôleur. La fiche technique explique comment en extraire un cadre. Mais vous devrez décrire toutes les procédures d'étalonnage manuellement, ce que je trouve excessivement difficile. J'ai donc utilisé l'option 2. Elle s'est avérée un peu compliquée, mais toujours gérable.
Grâce à l'ingéniosité chinoise (ou à la chance), la configuration de sortie sur la carte s'est avérée très pratique:

Tout ce que je devais faire était d'insérer la carte dans le port de Raspberry. La carte a un convertisseur 5V-3V intégré, donc les délicates sorties Rx et Tx du Pi ne courent aucun danger.
J'ajouterais également que vous pouvez le connecter de la même manière lors de l'utilisation de l'option 1, mais vous devrez être extrêmement prudent et compétent dans le soudage. La carte doit être montée de l'autre côté du Pi (l'exemple est sur la photo d'en-tête).
Logiciels
Le célèbre marché chinois propose ce majestueux logiciel d'accès au GY-MCU90640:

Apparemment, il doit également y avoir une description du protocole de communication utilisé pour accéder au microcontrôleur, et après une courte conversation avec le vendeur (grand respect pour lui), j'avais dit le protocole entre mes mains. En PDF et en chinois pur et distillé.
Grâce à Google Translate et à une bonne dose de copier-coller, environ 90 minutes plus tard, le protocole a été décodé. Je l'ai téléchargé sur

Github Il s'est avéré que la carte comprenait 6 commandes de base, dont une pour demander la trame actuelle via un port COM.
Chaque pixel de la matrice est essentiellement une lecture de la température de l'objet. La valeur de la température est en degrés Celsius multipliée par 100 (un nombre sur 2 octets). Il existe même un mode spécial lorsque la carte envoie automatiquement des images au Pi 4 fois par seconde.
Le script complet pour recevoir des images thermiques:"""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
Résultats
Le script interroge la matrice thermique et envoie des images à la console du moniteur connecté, 4 fois par seconde, ce qui est suffisant pour ne pas ressentir trop d'inconfort. Pour la visualisation, il utilise le package OpenCV. Lorsque vous appuyez sur S, les «cartes thermiques» de la caméra sont téléchargées sous forme de JPG dans le dossier du script.

Pour une meilleure visibilité, j'ai également fait en sorte que l'application affiche la température minimale et maximale dans le cadre. Ainsi, en regardant la carte de chaleur, nous pouvons estimer la température des objets les plus froids et les plus chauds (dans un degré, généralement sur le côté supérieur), dans la plage de 20 à 40 degrés. Ctrl + C quitte le script.

Le script fonctionne de la même manière sur le Raspberry Pi Zero W et le Pi 3 B +. J'ai installé un serveur VNC sur mon smartphone, donc, en transportant un Pi connecté à une banque d'alimentation avec un smartphone compatible VNC, nous pouvons obtenir une caméra thermique de poche qui enregistre les images. Ce n'est peut-être pas trop pratique, mais ça fait l'affaire.
Après le premier démarrage, il se peut que la température maximale ne s'affiche pas correctement, auquel cas le redémarrage du script devrait suffire.
C'est à peu près tout pour aujourd'hui. L'expérience pourrait être considérée comme un succès. Vous pouvez certainement faire un scan thermique d'une maison en utilisant cet appareil. Si quelqu'un peut trouver d'autres utilisations pour cela, veuillez écrire dans les commentaires.
Bonne semaine de travail et à bientôt!
UPD: On m'a demandé dans les commentaires de prendre une photo de la maison de l'extérieur. Ça y est. Les images se sont révélées peu informatives en raison d'un contraste de température plus faible. Les deux photos du haut représentent la maison entière sous deux angles. Les deux photos du bas sont des fenêtres différentes.

Le seul changement que j'ai apporté au code est la plage de température: de +20 ... + 40 à -10 ... + 5.