Il Sensore MCP9808
Il Sensore
Questo sensore di temperatura digitale con protocollo I2C è uno dei più accurati e precisi che abbia mai visto, con una precisione ch si aggira intorno a ± 0,25 ° C nell’intervallo compreso tra -40 ° C e + 125 ° C e una precisione intorno intrno agli ± 0,0625 ° C con un tempo di lettura di 250ms
Funziona in modo accurato e preciso con qualsiasi microcontrollore che utilizza lo standard i2c. Sono presenti 3 pin di indirizzo in modo da poter collegare fino a 8 sensori ogni singolo bus I2C senza interferenze di indirizzi. Soprattutto possiede anche un ampio intervallo di tensione che lo rende utilizzabile da 2,7 V a 5,5 V!
Utilizzando questo sensore sono stato pronto e operativo in 15 minuti!!
Una comoda libreria adafruit 9808 scaricabile anche dall’ide di Arduino stesso contiene già un esempio funzionante.
Caratteristiche tecniche
- Protocollo di comunicazione I2C
- Fino a 8 sensori su un singolo bus I2C grazie ai pin di indirizzo regolabili
- Precisione tipica 0,25 ° C nell’intervallo da -40 ° C a 125 ° C (massimo garantito 0,5 ° C da -20 ° C a 100 ° C)
- Risoluzione di 0,0625 ° C
- Alimentazione da 2,7 V a 5,5 V
Corrente di funzionamento: 200 μA (tipica)
Pinouts

VDD – Questo è il pin di alimentazione positivo. Può essere 2,7-5,5 V CC, quindi va bene per l’uso con logica 3 o 5 V. Alimenta pure il VDD con qualsiasi voltaggio intendi utilizzare sulle linee del protocollo i2c.
GND – questo il pin di alimentazione negativo.
Pin dati I2C
- SCL: del protocollo I2C – SCL ( A Seconda della scheda può variare la sua posizione). C’è già una resistenza di pull-up da 10K sulla scheda, quindi collegalo pure direttamente al pin CSL
- SDA: del protocollo I2C – SDA. C’è già una anche qui una resistenza di pull-up da 10K sulla scheda, quindi collegalo pure direttamente al pin SDA.
Pin opzionali
Questi sono pin non necessari per il funzionamento a meno che non servano nel progetto.
- Alert: questo è il pin di interruzione / avviso dall’MCP9808. Il chip ha la capacità di essere avviato o spento dall’utente se la temperatura del chip va al di sopra o al di sotto di una determinata soglia.
- A0 A1 A2 – Questi sono i pin di selezione dell’indirizzo. Poiché è possibile avere un solo dispositivo con un determinato indirizzo nel protocollo i2c, deve esserci il modo per modificare l’indirizzo se si desidera mettere più di un MCP9808.
L’indirizzo predefinito è 0x18 e l’indirizzo può essere calcolato ‘aggiungendo’ A0 / A1 / A2 alla base di 0x18
A0 imposta il bit più basso con un valore di 1, A1 imposta il bit centrale con un valore di 2 e A2 imposta il bit più alto con un valore di 4. L’indirizzo finale è 0x18 + A2 + A1 + A0.
Quindi, ad esempio, se A2 è legato a VDD e A0 è legato a VDD, l’indirizzo è 0x18 + 4 + 1 = 0x1D.
Se solo A0 è associato a VDD, l’indirizzo è 0x18 + 1 = 0x19
Se solo A1 è legato a VDD, l’indirizzo è 0x18 + 2 = 0x1A
Se solo A2 è legato a VDD, l’indirizzo è 0x18 + 4 = 0x1C
Download libreria Adafruit_MCP9808 ed esempio di codice.
Per iniziare a leggere i dati del sensore, sarà necessario scaricare la libreria Adafruit MCP9808 dal gestore delle librerie di Arduino.
#include <Wire.h>
#include "Adafruit_MCP9808.h"
// Creazione dell'oggetto MCP9808
Adafruit_MCP9808 tempsensor = Adafruit_MCP9808();
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("MCP9808 demo");
// A2 A1 A0 address
// 0 0 0 0x18 this is the default address
// 0 0 1 0x19
// 0 1 0 0x1A
// 0 1 1 0x1B
// 1 0 0 0x1C
// 1 0 1 0x1D
// 1 1 0 0x1E
// 1 1 1 0x1F
if (!tempsensor.begin(0x18)) {
Serial.println("Non ho trovato il sensore MCP9808 all'indirizzo 0X18 prova con un altro indirizzo");
while (1);
}
Serial.println("Trovato MCP9808!");
tempsensor.setResolution(3); // Seleziona la risoluzione della temperatura.:
// Modo e Risoluzione
// 0 0.5°C 30 ms
// 1 0.25°C 65 ms
// 2 0.125°C 130 ms
// 3 0.0625°C 250 ms
}
void loop() {
tempsensor.wake(); //Operativo pronto per trasmettere!
Serial.print("Precisione: ");
Serial.println (tempsensor.getResolution());
float c = tempsensor.readTempC();
float f = tempsensor.readTempF();
Serial.print("Temperatura: ");
Serial.print(c, 4); Serial.print("*C\t e ");
Serial.print(f, 4); Serial.println("*F.");
delay(2000);
Serial.println("Spegnimento sensore MCP9808.... ");
tempsensor.shutdown_wake(1);
delay(1000); //Attendo un secondo alla prossima lettura.
}
Spero che questo articolo sia stato esaustivo e sia piaciuto a tutto. Un po’ di Arduino e Informatica.. Infotronica work in progesss.
Se Avete altre ed eventuali domande potete contattare SbrSoftware nella pagina contatti.
In Collaborazione con Arduino Meteo e Meteo Expert Me Writer Barollo Simone
Si ringrazia www.adafruit.com