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

  1. Protocollo di comunicazione I2C
  2. Fino a 8 sensori su un singolo bus I2C grazie ai pin di indirizzo regolabili
  3. Precisione tipica 0,25 ° C nell’intervallo da -40 ° C a 125 ° C (massimo garantito 0,5 ° C da -20 ° C a 100 ° C)
  4. Risoluzione di 0,0625 ° C
  5. 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

  1. 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
  2. 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.

  1. 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.
  2. 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. 

IN DETTAGIO: Codice di Esempio
#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

Condividi su facebook
Facebook
Condividi su google
Google+
Condividi su twitter
Twitter
Condividi su linkedin
LinkedIn
Condividi su pinterest
Pinterest