Sensore di temperatura contactless MLX90614ESF GY-906

Sensore di temperatura contactless MLX90614ESF GY-906

Il sensore MLX90614ESF è in grado di misurare la temperatura di oggetti senza doverli fisicamente toccare.

Le principali caratteristiche sono:
– Range di temperatura letta:
– Da – 40 ° C a + 125 ° C per la temperatura del sensore (temperatura ambiente attorno al sensore)
– Da – 70 ° C a + 380 ° C per la temperatura dell’oggetto letto a distanza
– Alta precisione di 0,5 ° C su un’ampia gamma di temperature
(0… + 50 ° C per Ta e To) Calibrazione ad alta precisione (medica)
– Risoluzione di misura di 0,02 ° C
– Versioni a zona singola e doppia
– Interfaccia digitale compatibile SMBus
– Uscita PWM personalizzabile per la lettura continua
o comunicazione i2c.

Maggiori informazioni si possono trovare direttamente sul sito del costruttore qui.
Il dadascheet è scaricabile da qui.

ll sensore MLX90614ESF si può acquistare, già assemblato e dotato di tutti i componenti necessari all’utilizzo direttamente con Arduino, sui vari siti e e-commerce con la sigla GY-906 nella configurazione i2c come dal seguente schema:

UTILIZZO CON ARDUINO

Per l’uso con un Arduino Uno si può utilizzare il seguente schema:

NOTE: Il Vin del sensore può essere collegato sia sui 3,3V che sui 5V, i piedini i2c possono variare a seconda del modello di Arduino, clicca qui per ulteriori dettagli.

Per prima cosa andiamo a scoprire l’indirizzo i2c del sensore tramite lo Sketch i2c_scan che troveremo nella sezione “File” –> “Esempi” –> “Wire”–> “i2c_scaner” dell’IDE di Arduino.

Carichiamolo sulla nostra scheda ed apriamo il monitor seriale con il tasto Il risultato sarà simile al seguente:

Quindi il suo indirizzo sarà 0x5A (più avanti verderemo come poterlo cambiare nel caso si utilizzino più sensori o magari si abbiano altre periferiche i2c con lo stesso indirizzo).

Per utilizzare con semplicità il sensore ci viene incontro la libreria creta da Adafruit la Adafruit-MLX90614-Library che può essere scaricata dal loro github da qui, oppure una copia dal nostro sito da qui.

Aggiungiamo la libreria appena scaricata all’IDE di Arduino andando su “Sketch” –> “#include libreria” –> “Aggiungi libreria da file .ZIP…” e selezionare la libreria scaricata.

NOTA: in alcune versioni dell’IDE di Arduino, per poter attivare la libreria appena installata, deve essere riavviato.

Ora andiamo su “File” –> “Esempi” –> “Adafruit MLX90614 Library” –> “mlxtest” e avremo il seguente codice:

#include <Wire.h>
#include <Adafruit_MLX90614.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600);

  Serial.println("Adafruit MLX90614 test");  

  mlx.begin();  
}

void loop() {
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); 
  Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF()); 
  Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F");

  Serial.println();
  delay(500);
}

Carichiamolo sulla nostra scheda ed apriamo il monitor seriale con il tasto Il risultato sarà simile al seguente:

Analizziamo le voci che ci interessano:

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

Crea l’oggetto mlx e gli assegna l’indirizzo i2c di default (0x5A)  nel caso fosse diverso (per esempio 0x5B) andrà specificato così:

Adafruit_MLX90614 mlx = Adafruit_MLX90614(0x5B);

Nel void setup andrà inizializzato il sensore con:

mlx.begin();

per leggere la temperatura si utilizzerà:

mlx.readAmbientTempC() per leggere la temperatura ambiente in °C

mlx.readObjectTempC() per leggere la temperatura dell’oggeto in °C

mlx.readAmbientTempF() per leggere la temperatura ambiente in °F

mlx.readObjectTempF() per leggere la temperatura dell’oggeto in °F

Ad esempio, se volessimo caricare nella variabile temp_oggetto la temperatura letta dovremmo scrivere:

temp_oggetto = mlx.readObjectTempC();

CAMBIO INDIRIZZO I2C DEL SENSORE MLX90614ESF

NOTA: Prima di procedere si deve collegare un sensore MLX90614ESF alla volta.

Per cambiare l’indirizzo i2c al sensore MLX90614ESF si può utilizzare la libreria di SparkFun scaricablie dal loro github da qui, oppure una copia dal nostro sito da qui.

Dopo averla importata come abbiamo visto per la libreia di Adafruit andare su “File” –> “Esempi” –> “SparkFun MLX90614” –> “MLX90614_Set_addresst” e avremo il seguente codice:

#include <Wire.h> // I2C library, required for MLX90614
#include <SparkFunMLX90614.h> // SparkFunMLX90614 Arduino library

IRTherm therm; // Create an IRTherm object to interact with throughout

const byte oldAddress = 0x5A;
const byte newAddress = 0x5B;

void setup() 
{
  Serial.begin(9600); // Initialize Serial to log output
  Serial.println("Press a key to begin");
  while (!Serial.available()) ;
  
  therm.begin(oldAddress); // Try using the old address first
  
  byte address;
  if (!therm.readID()) // Try reading the ID registers
  {
    // If the read fails, try re-initializing with the
    // new address. Maybe we've already set it.
    therm.begin(newAddress);
    
    if (therm.readID()) // Read from the ID registers
    { // If the read succeeded, print the ID:
      Serial.println("Communicated with new address.");
      Serial.println("ID: 0x" + 
                     String(therm.getIDH(), HEX) +
                     String(therm.getIDL(), HEX));
    }
    else
    {
      Serial.println("Failed to communicate with either address.");      
    }
  }
  else
  {
    // If the read suceeds, change the address to something
    // new.
    if (!therm.setAddress(newAddress))
    {
      Serial.println("Failed to set new address.");
    }
    else
    {
      Serial.println("Set the address to 0x" + String(newAddress, HEX));
      Serial.println("Cycle power to try it out.");
    }
  }
}

void loop() 
{

}

Dovremo modificare solo le due linee:

const byte oldAddress = 0x5A; // questo è l’indirizzo i2c attuale del sensore
const byte newAddress = 0x5B; // questo è l’indirizzo i2c che vogliamo assegnare

Possono essere assegnati 127 indirizzi diversi che vanno da 0x00 a 0x7F.

Carichiamolo sulla nostra scheda ed apriamo il monitor seriale con il tasto

Ci verrà chiesto di premere un qualunque tasto:

Prima però cliccare con il mouse nella barra accanto al tasto “Invia” altrimenti non sentirà la pressione del tasto.

A questo punto se tutto andrà a buon fine vedremo:

A questo punto dovrà essere riavviato il sensore, quindi togliamo l’alimentazione all’Arduino.

Per controllare se il cambio dell’indirizzo è andato a buon fine ricarichiamo lo Sketch i2c_scan che troveremo sempre nella sezione “File” –> “Esempi” –> “Wire”–> “i2c_scaner” dell’IDE di Arduino.

Carichiamolo sulla nostra scheda ed apriamo il monitor seriale con il tasto Il risultato sarà simile al seguente:

USO DI PIU’ SENSORI MLX90614ESF

Per utilizzare 2 o più sensori MLX90614ESF si utilizza il seguente schema

Ad ogni sensore MLX90614ESF dovrà essere attribuito un indirizzo i2c diverso come visto precedentemente e lo sketch da adottare sarà come il seguente:

#include <Wire.h>
#include <Adafruit_MLX90614.h>

Adafruit_MLX90614 mlx1 = Adafruit_MLX90614(0x5a);
Adafruit_MLX90614 mlx2 = Adafruit_MLX90614(0x5b);

void setup() {
  Serial.begin(9600);
  Serial.println("Adafruit MLX90614 test");

  mlx1.begin();
  mlx2.begin();
}

void loop() {
  Serial.println ("Sensore n.1");
  Serial.print("Ambient = "); Serial.print(mlx1.readAmbientTempC());
  Serial.print("*C\tObject = "); Serial.print(mlx1.readObjectTempC()); Serial.println("*C");
  Serial.print("Ambient = "); Serial.print(mlx1.readAmbientTempF());
  Serial.print("*F\tObject = "); Serial.print(mlx1.readObjectTempF()); Serial.println("*F");
  delay(100);
  Serial.println ("Sensore n.2");
  Serial.print("Ambient = "); Serial.print(mlx2.readAmbientTempC());
  Serial.print("*C\tObject = "); Serial.print(mlx2.readObjectTempC()); Serial.println("*C");
  Serial.print("Ambient = "); Serial.print(mlx2.readAmbientTempF());
  Serial.print("*F\tObject = "); Serial.print(mlx2.readObjectTempF()); Serial.println("*F");

  Serial.println("--------------------------------------------------");
  delay(1000);
}

Carichiamolo sulla nostra scheda ed apriamo il monitor seriale con il tasto Il risultato sarà simile al seguente: