Il sensore digitale MCP9808 è uno dei più precisi e facili da programmare
Il sensore MCP9808 è uno dei sensori di temperatura più adoperati per progetti complessi, in cui è necessario ottenere dati quanto più affidabili. Tipicamente adoperato sia per applicazioni industriali, sia per applicazioni più semplici come l’utilizzo per applicazioni domestiche, il sensore MCP9808 vi permetterà di adoperare l’interfaccia I2C senza troppe noie.
Specifiche
Il sensore di temperatura digitale MCP9808 rileva temperature comprese tra -20°C e +100°C con una precisione di ±0,25°C/±0,5°C (tipica/massima). Permettendo di essere alimentato sia a 3,3V che a 5V, questo sensore è adatto per progetti con dev-board Arduino e con ESP8266/ESP32, sebbene vada ricordato che supporta una tensione minima di 2,7V ed una massima di 5,5V, richiedendo fino ad un massimo di circa 400µA di corrente.
Il sensore MCP9808 possiede 8 pin:
- Vcc: per tensioni di alimentazioni comprese tra i 2,7V e 5,5V
- GND: per il pin del ground
- SCL: Serial Clock, per la gestione del segnale di clock
- SDA: Serial Data, per la trasmissione dei dati
- A0: pin di indirizzo, per cambiare l’indirizzo del sensore nella comunicazione I2C
- A1: pin di indirizzo, per cambiare l’indirizzo del sensore nella comunicazione I2C
- A2: pin di indirizzo, per cambiare l’indirizzo del sensore nella comunicazione I2C
- ALERT: Il pin di uscita dell’avviso di temperatura dell’MCP9808 è un’uscita a scarico aperto. Il dispositivo emette un segnale quando la temperatura ambiente supera il limite di temperatura programmato dall’utente.
Acquista il sensore MCP9808 su Amazon: https://amzn.to/3qbZnpY
Acquista il sensore MCP9808 su Aliexpress: https://s.click.aliexpress.com/e/_9ixfzl
Collegamenti
Adoperando l’interfaccia I2C i collegamenti sono piuttosto facili. Basterà collegare il nostro sensore di temperatura MCP9808 come riportato in figura.
Il pin Vcc va connesso ai 5V, il GND al GND, il pin SDA al pin SDA di Arduino (in alternativa al pin analogico A4) e il pin SCL al pin SCL SDA di Arduino (in alternativa al pin analogico A5). Se invece volessimo collegarlo ad una ESP8266, collegheremo il pin Vcc ai 3.3V, il GND al GND, i pin SCL e SDA ai pin D1 e D2 della dev-board.
Codice
Partiamo dicendo che il sensore di temperatura MCP9808 necessita di un’apposita libreria, scaricabile a questo LINK. Una volta scaricata ed installata correttamente sulla IDE di Arduino, seguite il percorso File->Adafruit MCP9808 Library->mcp9808test. Si aprirà lo sketch di esempio per testare il sensore e rilevare la temperatura in gradi Celsius e Fahrenheit. Il codice inizia con le librerie Wire e Adafruit_MCP9808, rispettivamente per utilizzare l’interfaccia I2c e il sensore. Prosegue, poi, con la creazione dell’oggetto tempsensor per gestire il sensore.
#include <Wire.h> #include "Adafruit_MCP9808.h" Adafruit_MCP9808 tempsensor = Adafruit_MCP9808();
Nel VOID SETUP avviamo il monitor seriale e il sensore, specificando l’indirizzo a cui è connesso. Impostiamo la risoluzione per la lettura della temperatura.
Serial.begin(9600); while (!Serial); Serial.println("MCP9808 demo"); if (!tempsensor.begin(0x18)) { Serial.println("Couldn't find MCP9808! Check your connections and verify the address is correct."); while (1); } Serial.println("Found MCP9808!"); tempsensor.setResolution(3);
É importante sapere che posso assegnare fino a 8 indirizzi al mio sensore, semplicemente fornendo un segnale ai pin Ao, A1 e A2. Basta quindi collegarli alla dev-board e inviare un segnale digitale per attivarli o disattivarli. Qui in tabella i relativi indirizzi disponibili.
A0 | A1 | A2 | Address |
---|---|---|---|
0 | 0 | 0 | 0x18 |
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 |
Nel VOID LOOP svegliamo il sensore e rileviamo la temperatura in Celsius (tempsensor.readTempC()) e quella in Fahrenheit (tempsensor.readTempF()). Stampiamo i risultati su monitor seriale.
tempsensor.wake(); Serial.print("Resolution in mode: "); Serial.println (tempsensor.getResolution()); float c = tempsensor.readTempC(); float f = tempsensor.readTempF(); Serial.print("Temp: "); Serial.print(c, 4); Serial.print("*C\t and "); Serial.print(f, 4); Serial.println("*F."); delay(2000);
Concludiamo impostando il sensore in modalità di riposo, in modo che il suo consumo sia di circa 0,1 µA
Serial.println("Shutdown MCP9808.... "); tempsensor.shutdown_wake(1); Serial.println(""); delay(200);
Non ci resta che caricare il codice sulla nostra dev-board e aprire il monitor seriale per leggerne i valori.