Test caméra thermique AMG8833/AMG8831 avec du code Arduino. Capteur infrarouge matriciel 64 points

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram
Le AMG88xx (AMG8833 / AMG8831) de Panasonic est un capteur infrarouge matriciel Grid-EYE permettant de cartographier simultanément 64 températures (8×8 pixels). Il détecte la chaleur (le rayonnement infrarouge) du corps humain ou tout autre objet de -20°C à +80°C.
Attention, ce capteur n’offre pas une précision suffisante (± 2,5°C) pour un usage médical. Il ne faut pas l’utiliser pour un usage médical tel que la détection du COVID-19. On pourra par exemple l’utiliser pour faire de la détection de présence, du diagnostic de panne par analyse thermique..

Présentation du capteur thermique matriciel AMG88xx de Panasonic

Les capteurs de la série AMG88xx de Panasonic sont des capteurs matriciels constitués de 64 points de mesure. La matrice carrée est constituée 8 x 8 pixels.

Sensibles au rayonnement infrarouge, il permettent de détecter la chaleur émise par le corps humain ou tout autre objet de -20°C à +80°C.

L’image, la matrice de température peut être récupérée sur un micro-contrôleur ou un Raspberry Pi via le bus I2C.

Il existe 4 versions du capteur. Les différences étant situés au niveau de la tension d’alimentation (3V3 ou 5V) et le facteur de gain (faible ou élevé). Dans le grand public, on trouve surtout la version AMG8833/AMG8831. La seconde référence indiquée sur le breakout (carte fille) est la référence de l’ancienne génération (voir plus bas pour plus de détails). Cela n’a aucun impact sur le fonctionnement. Panasonic n’indique pas clairement les changements d’une génération à l’autre.

Breakout AMG8831 / AMG8833 mesure de température IR matricielle 64 pixels

Spécifications techniques des AMG88xx

Spécifications techniques générales collectées dans les documentations techniques de Panasonic indiquées à la fin du paragraphe.

  • Mesure de température à matrice carrée constituée de 64 points (8×8 pixels)
  • Tension d’utilisation : 3.3V ou 5V
  • Plage de mesure de température : -20°C à +80°C (ou 0°C à +80°C en mode haute performance)
  • Précision de la température : ± 2,5°C ou ±4,5°F (typique)
  • Distance de détection humaine : 7m maximum
  • Différence de température équivalente au bruit est de 0,05°C à 1 Hz
  • Angle de mesure : 60°
  • Consommation de courant : 4,5mA (mode normal), 0,2mA (mode sommeil), 0,8mA (mode veille)
  • Interface I2C
  • Fréquence d’images : de 1 ou 10 images par seconde
  • Temps pour activer la communication après la configuration : 50ms puis 15ms
  • Notices techniques Panasonic

Voir plus de produits

Différences entre les désignations AMG8833 et AMG8831

Il existe deux générations du capteur AMG. La versions actuelle (33,34,53,54) et ancienne (31, 32, 51, 52). C’est la raison pour laquelle on trouve souvent les deux références sur les cartes filles (breakout).

La référence la plus courante est l’AMG8833/31.

Le tableau ci-dessous permet de retrouver les spécifications techniques à partir de la désignation du produit.

AMG 8 8 X X
Racine Nombre de pixels verticaux Nombre de pixels horizontaux Tension d’alimentation

3. 3.3V

5. 5V

Amplification

3. Gain élevé

4. Gain faible

Evolution des références entre les générations

Panasonic a fait évolué le produit (probablement les méthodes de fabrication) sans pour autant faire évoluer les caractéristiques techniques.

Pour faire la différence entre les deux générations de capteur, Panasonic a fait varie le dernier chiffre de la référence.

Le tableau ci-dessous permet de faire la correspondance entre les deux générations.

En gras la référence testée dans ce tutoriel.

Référence Equivalent ancienne référence Tension d’alimentation Amplification du signal
AMG8833 AMG8831 3V3 Elevée
AMG8834 AMG8832 3V3 Faible
AMG8853 AMG8851 5V Elevée
AMG8854 AMG8852 5V Faible

Librairies Arduino et Python

Plusieurs librairies sont disponibles pour piloter les capteurs AMG88xx depuis un projet Arduino, ESP8266, ESP32, CircuitPython et Python sur Raspberry Pi ou un autre SBC

librairie arduino adafruit sparkfun

Exemple de code Arduino avec la librairie Adafruit AMG88xx

Pour cet exemple nous allons utiliser la librairie Adafruit AMG88xx que l’on peut installer directement depuis le gestionnaire de librairies de l’IDE Arduino.

Circuit

La communication avec l’AMG8833 se faisant via le bus I2C, le circuit est rudimentaire. Voici le repérage des broches pour un Arduino, ESP32 et ESP8266.

AMG8833 Arduino ESP8266 ESP32
SDA SDA D2 IO21
SCL SCL D1 IO22
GND GND GND GND
3V 3V3 3V3 3V3

 

Circuit I2C AMG8833 sur ESP8266

Code Arduino compatible ESP32 ou ESP8266

Créer un nouveau croquis et coller le code Arduino adapté de l’exemple installé avec la librairie Adafruit.

Ce code récupère une matrice de températures chaque seconde et calcul le minimum, le maximum et la température moyenne des 64 points.

#include <Wire.h>
#include <Adafruit_AMG88xx.h> 
#define DISPLAY_MATRIX true   // Affiche la matrice de temperature | display te temperature matrix

Adafruit_AMG88xx amg;

float pixels[AMG88xx_PIXEL_ARRAY_SIZE];

void setup() {
  Serial.begin(115200);
  Serial.println(F("AMG88xx pixels"));

  bool status;

  status = amg.begin();
  if (!status) {
    Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
    while (1);
  }

  Serial.println("--  Begin AMG88xx Test --");
  Serial.println();

  delay(100);   // let sensor boot up - attend le démarrage de capteur
}

void loop() {
  //read all pixels - lit tous les pixels du capteur
  amg.readPixels(pixels);

  // Variables temporaires - Temp. var.
  float sum = 0;
  float mini = 80;
  float maxi = 0;
  float average = 0;

  for (int i = 1; i <= AMG88xx_PIXEL_ARRAY_SIZE; i++) {
    if ( pixels[i - 1] < mini ) mini = pixels[i - 1]; // trouve la température mini - find min temp. if ( pixels[i - 1] > maxi ) maxi = pixels[i - 1]; // trouve la température maxi - find max. temp.
    sum += pixels[i - 1];                          // additionne toutes les températures - add all temp.
  }

  average = sum / AMG88xx_PIXEL_ARRAY_SIZE; // calcul la température moyenne de la matrice - calculate matrix average
  // Imprime les résultats - print results
  Serial.print("Temp. mini: "); Serial.print(mini);
  Serial.print(" Temp. maxi: "); Serial.print(maxi);
  Serial.print(" Average: "); Serial.print(average); Serial.println();

  if ( DISPLAY_MATRIX ) {
    Serial.print("[");
    for (int i = 1; i <= AMG88xx_PIXEL_ARRAY_SIZE; i++) {
      Serial.print(pixels[i - 1]);
      Serial.print(", ");
      if ( i % 8 == 0 ) Serial.println();
    }
    Serial.println("]");
    Serial.println();
    
    delay(10000);
  } else {
    delay(1000); // Attend 1 seconde - wait a second
  }
}

Comment fonctionne le code

On déclare les librairies. La librairie wire.h est nécessaire pour la communication via le bus I2C.

#include <Wire.h>
#include <Adafruit_AMG88xx.h>

On créé un objet C++ qui permettra de communiquer avec le détecteur

Adafruit_AMG88xx amg;

Les 64 points (mesures de température) seront stockées dans un tableau. La macro AMG88xx_PIXEL_ARRAY_SIZE permet de définir la taille exacte du tableau

float pixels[AMG88xx_PIXEL_ARRAY_SIZE];

On initialise la communication avec la caméra thermique dans le setup()

status = amg.begin(); 
if (!status) { 
  Serial.println("Could not find a valid AMG88xx sensor, check wiring!"); 
  while (1); 
}

La méthode readPixels() récupère et copie les mesures dans le tableau temporaire (image) pixels créé précédemment. On pourra lire au maximum jusqu’à 10 fois par seconde les mesures (100ms).

amg.readPixels(pixels);

Il suffit ensuite de parcourir le tableau pour rechercher le minimum et le maximum

float sum = 0; // somme pour calculer la temperature moyenne
  float mini = 80;
  float average = 0; // moyenne calculée

  for(int i=1; i<=AMG88xx_PIXEL_ARRAY_SIZE; i++){
    if ( pixels[i-1] < mini ) mini = pixels[i-1];  // trouve la température mini - find min temp.
    sum += pixels[i-1];                            // additionne toutes les températures - add all temp.
  }

  average = sum/AMG88xx_PIXEL_ARRAY_SIZE;

Pour afficher la matrice de températures, il suffit d’attribuer la valeur true à la constante DISPLAY_MATRIX

#define DISPLAY_MATRIX true

Après avoir téléviser le programme, ouvrez le moniteur série pour visualiser les mesures

Test caméra thermique matricielle 64 points AMG8831 AMG8833. Code Arduino compatible ESP32 ESP8266

Si vous utilisez ESP Easy Mega pour réaliser vos objets connectés, vous pouvez également lire ce tutoriel qui explique comment convertir du code Arduino en plugin ESP Easy.

A LIRE AUSSI :
Transformer du code Arduino en plugin ESP Easy Mega pour ESP8266 / ESP32
Avez-vous aimé cet article ?
[Total: 0 Moyenne: 0]
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

quel modèle esp8266 choisir
Quel modèle d'ESP8266EX choisir en 2020 ?
guide choix esp32 development board
Quel ESP32 choisir en 2020 ?

Vous rencontrez un problème avec ce sujet ?

Peut-être que quelqu’un a déjà trouvé la solution, visitez le forum avant de poser votre question

Nous serions ravis de connaître votre avis

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Domotique et objets connectés à faire soi-même
Vous avez aimé ce tutoriel

Ne manquez plus les prochains projets

Recevez chaque semaine le récapitulatif des tutoriels et projets.

Vous pouvez vous désabonner à tout moment.