Arduino e il sensore di temperatura

In questo post spiegherò come utilizzare un sensore di temperatura MCP9700A con Arduino.
Come prima cosa dobbiamo leggere il Datasheet del componente elettrico per capire le tensioni di utilizzo  e come reagisce al variare della temperatura.

Il Datasheet del componente MCP9700A ci fornisce i seguenti parametri:
0°C = 500 mV
0 V = 0 bit
5 V = 1023 bit
Variazione -> 10.0 mV/°C


Quindi ho iniziato a ricavare l’espressione matematica per il calcolo della temperatura.

  • TEMP = ( analogRead * [Volt.BIT] ) / [Coeff_mV / °C]
  • [Volt.BIT] = VoltMAX / BitMAX -> 5V / 1024bit -> 5 / 1024
  • TEMP = [ ( VoltMAX  * analogRead  ) / BitMAX ] / Coeff_mV / °C
  • TEMP = ( VoltMAX * analogRead * °C/Coeff_mV ) / BitMAX

Dove:
analogRead è il valore in bit letto da Arduino dal sensore di temperatura (0 – 1023)
Volt.BIT è la differenza di potenziale che viene applicata ad ogni bit (0.00488) in questo caso dato che ho fornito al sensore di temperatura 5V.
Coeff_mV/°C è la variazione di tensione al variare della temperatura (10 mVolt)
VoltMAX è la tensione massima applicata al sensore di temperatura (5 Volt)
BitMAx sono i 1024 bit che arduino riesce a leggere
Con un po’ di matematica abbiamo l’espressione finale.

Visto che con tutte queste formule il valore che usciva fuori non era corrispondente a quello reale in quanto veniva segnata una temperatura di circa 70°C ma io non stavo affatto cuocendo con un moltiplicatore aggiunto alla fine della funzione ho risolto il problema.
Il moltiplicatore è stato ricavato con un banale ragionamento e una semplicissima espressione che teneva conto della temperatura reale misurata con un termometro a mercurio e il valore che veniva misurato da Arduino, il risultato era il seguente:

[TEMPERATURA REALE] : [X] = [TEMPERATURA ARDUINO] : 1

Questo è il codice Arduino che ho utilizzato per misurare la temperatura di un ambiente con un sensore MCP9700A.

TEMP = ( ( 5 * analogRead(PIN) * 100.0  ) /  1024 );

Ottimizzando il tutto sono arrivato a questa conclusione

 TEMP = ( ( analogRead(PIN) * 500 ) / 1024 ) - 50

Se la funzione che ho scritto non soddisfi le tue esigenze, Tim N9PUZ, ha creato una libreria che fa al caso tuo. MCP9700A Temperature Sensor Arduino Library