MLX90614ESF-AFC campteur température IR

Bonjour

J'ai acheté un capteur de température infrarouge MLX90614ESF-AFC.
J'ai suivis le tuto suivant pour le mettre en oeuvre. Cependant, je n'arrive pas à le faire fonctionner et a réceptionner la température.
Je ne suis pas très a l'aise avec l'utilisation de l'i2c sur arduino.

Voici le code proposé par le tuto :

/* Librairie Wire pour les communications I2C */
#include <Wire.h>

/* Adresse par défaut du capteur IR */
#define I2C_ADDR 0x5A

/** Fonction setup() */
void setup() {

/* Initialisation du port série (pour debug) */
Serial.begin(115200);
Serial.println(F("BOOT"));

/* Initialisation du bus I2C */
Wire.begin();
}

/** Fonction loop() */
void loop() {

/* Données brute de température */
uint16_t data;

/* Commande de lecture de la RAM à l'adresse 0x07 */
Wire.beginTransmission(I2C_ADDR);
Wire.write(0x07);
Wire.endTransmission(false);

/* Lecture des données : 1 mot sur 16 bits + octet de contrôle (PEC) */
Wire.requestFrom(I2C_ADDR, 3, false);
while(Wire.available() < 3);
data = Wire.read();
data |= (Wire.read() & 0x7F) << 8; // Le MSB est ignoré (bit de contrôle d'erreur)
Wire.read(); // PEC
Wire.endTransmission();

/* Calcul de la température */
const float tempFactor = 0.02; // 0.02°C par LSB -> résolution du MLX90614
float tempData = (tempFactor * data) - 0.01;
float celsius = tempData - 273.15; // Conversion des degrés Kelvin en degrés Celsius

/* Affichage de la température */
Serial.print(F("Celsius: "));
Serial.println(celsius);

/* Temps d'attente */
delay(1000);
}

Celui ci datant de 2013, je pense qu'il n'est plus adapté a la version 1.6.
De plus il me semble qu'il y ait quelques incohérences dans le code.

Quelqu'un à déjà utilisé ce type de capteur et peut m'aider svp ?

merci ! :slight_smile:

hello
passes un coup de scanner i2c pour vérifier que l'adresse est bien 0x5A

J'ai passer le canner i2c avec ce code.

j'ai obtenu ce résultat dans le COM :

Recherche...
Dispositif I2C trouve a l addresse 0x66 !
Termine

Recherche...
Erreur inconnue a l addresse 0x66
Pas de dispositif I2C trouve

J'ai remplacer dans le code 0x5A par 0x66 mais cela ne fonctionne toujours pas.
je reçoit dans le COM seulement BOOT

Si tu regardes la datasheet du composant tu vas constater que le composant répond par défaut à l'adresse 5A. Une fois la connexion établie tu peux lui affecter une adresse quelconque.
Si l'adresse à été changée et oubliée, tous les composants répondent à l'adresse 0 (qui est normalement réservée selon la norme I²C.)
Vérifies bien la présence des résistances de tirage au +5V.

comme toi j'ai acheté 2 MLX que je n'ai pas pu faire fonctionner, ils attendent dans un tiroir
il y a quelques jours j'ai découvert que le MLX ne fonctionne pas avec la lib WIRE d'origine, regardes ici la solution (je n'ai pas essayé)

Effectivement, il ne faut pas interrompre la comm entre l'accès en écriture (pour faire la requête) et le cycle de lecture. Ce qui n'est pas un fonctionnement standard selon I²C.