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.
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
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
- Pilote Adafruit Python / CircuitPyton
- Librairie Arduino d’Adafruit
- Librairie Arduino de Sparkfun
- PlatformIO
- Sparkfun : 2089 ou pio lib install “SparkFun GridEYE AMG88 Library”
- Adafruit : 1924 ou pio lib install “Adafruit AMG88xx Library”
- Depuis le gestionnaire de librairies de l’IDE Arduino
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 |
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
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.
- 4 solutions pour ajouter des E/S à un projet Arduino, ESP8266, ESP32, ESP8266, Raspberry Pi. ADS1115, MCP23017, PCF8574, PCA9685
- Adresses I2C des capteurs et actionneurs les plus courants
- Test caméra thermique AMG8833/AMG8831 avec du code Arduino. Capteur infrarouge matriciel 64 points
- Débuter avec le HC-SR04, mesure de distance par ultrason. Exemple de code Arduino
- Débuter avec l’Arduino et Node-RED. Enregistrer et afficher des mesures en JSON depuis le port série