Il sensore MLX90614 GY-906 è in grado di misurare la temperatura degli oggetti senza doverli fisicamente toccare. Il sensore si può acquistare, già assemblato e dotato di tutti i componenti necessari all’utilizzo direttamente con Arduino.
Citazione dell’articolo nelle sezioni ARDUINO, GADGET, STRUMENTAZIONE del Blog di Elettronica In
Indice
Caratteristiche del sensore
Il sensore MLX90614 prodotto Melexis (vedere datasheet) è un sensore di temperatura a infrarossi senza contatto.
Nello stesso package TO-39 sono integrati sia il sensibile rivelatore termopila IR (MLX81101) che il circuito di condizionamento del segnale ASSP (MLX90302).
Grazie al suo amplificatore a basso rumore, un ADC a 17 bit e una potente unità DSP, si ottiene un’elevata precisione e risoluzione del termometro. Il termometro viene calibrato in fabbrica con un segnale PWM digitale e un SMBus (System Management Bus).
I valori di calibrazione sono ampi: -40…125°C per la temperatura ambiente e -70…380°C per la temperatura dell’oggetto.
Come standard, il PWM a 10 bit è configurato per trasmettere continuamente la temperatura misurata nell’intervallo di -20…120°C, con una risoluzione di uscita di 0,14°C.
L’impostazione POR predefinita di fabbrica è SMBus.
Riassunto delle caratteristiche
- 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 - Precisione: 0,5 ° C su un’ampia gamma di temperature (0… + 50 ° C per Ta e To). Calibrazione ad alta precisione (medica)
- Risoluzione di misura: 0,02 ° C
- Interfaccia digitale compatibile SMBus
- Uscita PWM personalizzabile per la lettura continua o comunicazione I2C.
Video del test del sensore
Schema elettrico del modulo
Analizziamo ora lo schema elettrico del sensore MLX90614 GY-906 – Sensore temperatura.
Nello schema oltre al sensore nella versione MLX90614ESF, troviamo un modulo regolatore 662K 3.3V.
Questo permette di alimentare il modulo a 5V, con riduzioni del suo valore a quello di 3.3 V, valore massimo per il sensore.
E’ comunque possibile alimentare anche con una tensione di 3,3 V sul pin VIN; la tensione passa attraverso il regolatore che presenta una caduta di tensione minima.
Quindi il modulo è compatibile con MCU da 3.3 a 5 V .
Troviamo poi due condensatori per il livellamento della tensione di alimentazione e due resistenze di pull-up sulle linee SCL e SDA. Il PCB misura circa 17×11 mm.
Il progetto completo può essere anche scaricato dal mio account presso OSHWLab, utilizzando questo link.
Tipologia di sensore
Il modulo MLX90614 GY-906 può essere trovato in tre diverse tipologie: BAA, BCC e DCI. Questi differiscono principalmente per l’accuratezza e la distanza di misura della temperatura .
Dove trovare il sensore?
Il sensore MLX90614 GY-906 può essere acquistato presso il sito FUTURA ELETTRONICA, il codice prodotto è 1606-MLX90614. Il suo costo, al momento della pubblicazione di questo articolo è di 27,50 €.
Citazione dell’articolo nella sezione ARDUINO, GADGET, STRUMENTAZIONE di Elettronica In
Collegamento di base del sensore
Vediamo prima di tutto il collegamento di base del sensore di temperatura MLX90614 GY-906; in questo caso leggeremo i valori forniti dal sensore tramite il monitor seriale dell’IDE.
Materiale occorrente
Il materiale per realizzare il nostro termometro è formato da:
Scheda Arduino UNO | Sensore di temperatura MLX90614 GY-906 |
Bread board |
Cavi di collegamento colorati M/M |
Schema dei collegamenti
Verifica dell’indirizzo I2C
Per prima cosa andiamo a scoprire e verificare 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:
Se non leggiamo nulla potremmo aver invertito i cavi del collegamento I2C , provate ad invertirli.
Se tutto è corretto, leggeremo il suo indirizzo che è 0x5A; è possibile comunque modificarlo nel caso si utilizzino più sensori o magari si abbiano altre periferiche I2C con lo stesso indirizzo.
In questo caso è possibile utilizzare la libreria fornita dalla Sparkfun che negli esempi ha un’apposito sketch “Example4_Change_i2c_Address”
Librerie di gestione del modulo
Per facilitare l’uso del modulo sono disponibili varie librerie. Per il caricamento occorre aprire sotto il menù Sketch, #include libreria, “Gestione Librerie..”
Nel campo ricerca si inserirà “MLX90614” , trovata la libreria “Adafruit MLX90614 Library” , premendo su “More info..” apparirà il tasto “Installa” cliccare il tasto, la libreria verrà installata.
se non avete ancora utilizzato delle librerie Adafruit potrebbe esservi segnalato che deve essere caricata anche la libreria “Adafruit BusIO” nel caso cliccate su “Install all”
Sketch test di base
Sotto è riportato lo sketch di base per la lettura del sensore, sono mostrati i dati della temperatura ambiente e dell’oggetto; nel nostro caso il nostro dito, posto a pochi centimetri dal sensore.
I valori sono mostrati sia in gradi Celsius che in gradi Fahrenheit, il campionamento è di 2 secondi.
Per la lettura occorre attivare il monitor seriale dell’IDE premendo l’apposito tasto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <Adafruit_MLX90614.h> Adafruit_MLX90614 mlx = Adafruit_MLX90614(); void setup() { Serial.begin(9600); while (!Serial); Serial.println("Adafruit MLX90614 test"); if (!mlx.begin()) { Serial.println("Error connecting to MLX sensor. Check wiring."); while (1); }; Serial.print("Emissivity = "); Serial.println(mlx.readEmissivity()); Serial.println("================================================"); } void loop() { Serial.print("Temperatura Ambiente = "); Serial.print(mlx.readAmbientTempC()); Serial.print("*C\tTemperatura Oggetto = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C"); Serial.print("Temperatura Ambiente = "); Serial.print(mlx.readAmbientTempF()); Serial.print("*F\tTemperatura Oggetto = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F"); Serial.println(); delay(2000); } |
Il risultato sarà simile a questo
Lettura valori su display OLED
Per un utilizzo più semplice del sensore possiamo utilizzare un display OLED, in questo caso un modulo OLED da 0.96 ” con una risoluzione di 128×64 pixel, che sfrutta il driver SSD1306 e si interfaccia tramite la connessioni I2C. Per informazioni sul display vi consiglio la lettura dell’articolo Display bicolore OLED 0.96″ 128×64 – SSD1306
Materiale necessario
Scheda Arduino UNO |
Sensore di temperatura MLX90614 GY-906 |
OLED 0.96 ” 128×64 pixel I2C |
Bread board |
Cavi di collegamento colorati M/M |
Schema dei collegamenti
Libreria per display OLED
Per utilizzare il display OLED è necessario installare l’apposita libreria. Può essere cercata tra le librerie installabili nell’IDE, basterà inserire nel campo di ricerca “Adafruit_SSD1306“.
Sarà anche mostrata una finestra che segnala che la libreria ha una dipendenza con la libreria grafica “Adafruit GFX Library“. Procedete premendo “Install all”.
Per altre informazioni su come installare le librerie vedete l’articolo Arduino – Tutorial, come installare una libreria
Sketch test con display OLED
Sotto è riportato lo sketch di base per la lettura del sensore, sono mostrati i dati della temperatura ambiente e dell’oggetto, nel nostro caso il nostro dito, posto a pochi centimetri dal sensore. I dati sono mostrati sul display OLE, il campionamento è di 1/2 secondo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#include <Wire.h> #include <Adafruit_MLX90614.h> #include <Adafruit_SSD1306.h> Adafruit_MLX90614 mlx = Adafruit_MLX90614(); double temp_amb; double temp_obj; // Impostazione OLED #define OLED_ADDR 0x3C #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { // initializza e pulisce display display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR); display.clearDisplay(); //Messaggio iniziale display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(10, 0); display.println("ADRIROBOT"); display.setCursor(40, 20); display.println("TEST"); display.setCursor(20, 40); display.println("MLX90614"); display.display(); delay (2000); Serial.println("Adafruit MLX90614 test"); mlx.begin(); } void loop() { temp_amb = mlx.readAmbientTempC(); temp_obj = mlx.readObjectTempC(); display.clearDisplay(); display.setTextSize(2); display.setCursor(15, 0); display.println ("MLX90614"); display.setTextSize(2); display.setCursor(0, 20); display.print("Amb:"); display.print(temp_amb, 1); display.print((char)247); display.print("C"); display.setCursor(0, 40); display.print("Ogg:"); display.print(temp_obj, 1); display.print((char)247); display.print("C"); display.display(); delay(500); } |
Progetti futuri
In preparazione il progetto di un termometro che comunicherà a voce il valore letto
Sensore e display montato su DFPlayer test board