Skip to Content

Tutorial sensore di temperatura analogico TMP36 con Arduino

Tutorial sensore di temperatura analogico TMP36 con Arduino

In questo tutorial imparerai come utilizzare un TMP36 sensore di temperatura analogico con Arduino. Ho incluso uno schema di collegamento e diversi esempi di codice per aiutarti a iniziare!

Nella prima parte di questo articolo, troverai le specifiche e le informazioni sui sensori TMP35, TMP36 e TMP37. Successivamente, vedremo come collegare il sensore all’Arduino.

Il primo esempio di codice può essere usato per rilevare la temperatura dal sensore e mostrare i risultati nel Serial Monitor. Nel secondo esempio, ti mostrerò come visualizzare la temperatura su un LCD I2C per creare un termometro autonomo.

Materiali

Componenti hardware

TMP36 analog temperature sensor (TO-92) × 1 Amazon
Arduino Uno × 1 Amazon
Breadboard × 1 Amazon
Jumper wires ~ 10 Amazon
16×2 character I2C LCD × 1 Amazon
USB cable type A/B × 1 Amazon

Software

Arduino IDEArduino IDE

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Informazioni sui sensori di temperatura analogici TMP35/TMP36/TMP37

I sensori TMP35/TMP36/TMP37 sono sensori di temperatura centigradi a bassa tensione e precisione prodotti da Analog Devices. Forniscono un’uscita in tensione proporzionale linearmente alla temperatura in gradi Celsius (°C) e sono quindi molto facili da usare con Arduino. Inoltre, sono precisi, non si usurano mai e sono molto economici!

I sensori TMP35/TMP36/TMP37 non richiedono alcuna calibrazione esterna per garantire una precisione tipica di ±1°C a +25°C e ±2°C nell’intervallo di temperatura da −40°C a +125°C.

La differenza tra TMP35, TMP36 e TMP37 riguarda l’intervallo di temperatura operativo e il fattore di scala dell’uscita. Il TMP35 misura temperature da 10°C a 125°C e fornisce un’uscita di 250 mV a 25°C. Questo sensore è compatibile funzionalmente con l’LM35 prodotto da Texas Instruments. Vedi il LM35 analog temperature sensor with Arduino tutorial per maggiori dettagli.

Il TMP36 misura temperature da -40°C a 125°C, fornisce un’uscita di 750 mV a 25°C e funziona fino a +125°C con un’alimentazione singola da 2,7 V. Questo sensore è compatibile funzionalmente con l’LM50. Il TMP35 e il TMP36 hanno lo stesso fattore di scala di uscita di 10 mV/°C.

Il TMP37 è progettato per un intervallo operativo da 5°C a 100°C e fornisce un’uscita di 500 mV a 25°C. Questo sensore offre una precisione leggermente superiore rispetto agli altri e ha un fattore di scala di uscita di 20 mV/°C.

tmp35 tmp36 tmp37 output voltage versus temperature
Tensione di uscita (V) in funzione della temperatura (°C). Fonte: Analog Devices

Come si vede nella figura sopra, l’intervallo di uscita di tutti i sensori è compreso tra 0,1 V e 2 V. Nota che la tensione di uscita è indipendente dalla tensione di alimentazione utilizzata.

Pinout TMP35/TMP36/TMP37

I sensori TMP35/TMP36/TMP37 sono disponibili in 3 formati diversi, ma il tipo più comune è il 3-pin TO-92 package, che assomiglia a un transistor. La versione TMP36 di questo sensore ha il numero di modello TMP36GT9Z.

Il pinout del sensore è mostrato nella figura seguente:

Pinout del TMP36

Nota che il pin 1 (+V S ) è il pin più a sinistra quando il lato piatto del sensore (con la scritta stampata) è rivolto verso di te.

Puoi trovare altre specifiche del TMP36 nella tabella sottostante.

Specifiche del sensore di temperatura analogico TMP36

Tensione di alimentazione 2,7 V a 5,5 V
Corrente a riposo 50 µA
Intervallo di temperatura -40°C a +125°C
Precisione ±1°C a +25°C
±2°C da -40°C a +125°C
Fattore di scala di uscita 10 mV/°C
Tensione di uscita a 25°C 750 mV
Package TO-92 a 3 pin
Produttore Analog Devices
Costo Check price

Per maggiori informazioni, puoi consultare anche il datasheet qui:

Collegamenti – Collegare il sensore di temperatura TMP36 ad Arduino

Collegare un TMP36 ad Arduino è molto semplice perché devi collegare solo 3 pin. Inizia collegando il pin +V S al pin 5 V di Arduino e il pin GND a terra. Se usi un Arduino a 3,3 V, collega semplicemente +V S a 3,3 V invece.

Poi collega il pin centrale (V OUT ) a uno qualsiasi degli ingressi analogici di Arduino. In questo caso, ho usato il pin analogico A0.

TMP36 analog temperature sensor with Arduino Uno wiring diagram
Schema di collegamento del sensore di temperatura analogico TMP36 con Arduino Uno

I collegamenti sono anche riportati nella tabella sottostante:

Collegamenti sensore di temperatura analogico TMP36

TMP36 Arduino
Pin 1 (+V S ) 5 V
Pin 2 (V OUT ) Pin A0
Pin 3 (GND) GND

Per migliorare la stabilità del sensore, il datasheet consiglia di aggiungere un condensatore ceramico da 0,1 μF tra il pin +V S e GND. Quando si usano cavi lunghi, aggiungere una piccola resistenza (es. 750 Ω) in serie alla linea del segnale (V OUT ) può anche ridurre il rumore.

TMP36 with capacitor and resistor
TMP36 con resistenza e condensatore opzionali

Quando ho testato il sensore con un Arduino Uno, ho ottenuto letture stabili anche senza condensatore e resistenza, ma i tuoi risultati potrebbero variare.

Conversione della tensione di uscita del TMP36 in temperatura

Per convertire la tensione di uscita del sensore in temperatura in gradi Celsius, puoi usare la seguente formula:

Temperatura (°C) = (V OUT – 500) / 10

con V OUT in millivolt (mV). Quindi, se l’uscita del sensore è 750 mV, la temperatura è:

(750 – 500) / 10 = 25°C

Come si vede nello schema di collegamento sopra, l’uscita del TMP36 è collegata a uno degli ingressi analogici di Arduino. Il valore di questo ingresso analogico può essere letto con la funzione analogRead() come vedrai negli esempi di codice qui sotto. Tuttavia, la funzione analogRead(pin) non restituisce direttamente la tensione di uscita del sensore.

Le schede Arduino contengono un convertitore analogico-digitale (ADC) multicanale a 10 bit, che mappa le tensioni di ingresso tra 0 e la tensione di alimentazione (5 V o 3,3 V) in valori interi tra 0 e 1023. Su un Arduino Uno, ad esempio, questo corrisponde a una risoluzione tra le letture di 5 volt / 1024 unità, ovvero 0,0049 volt (4,9 mV) per unità.

Quindi, se usi analogRead() per leggere la tensione su uno degli ingressi analogici di Arduino, otterrai un valore tra 0 e 1023.

Per convertire questo valore nella tensione di uscita del sensore, puoi usare:

V OUT = lettura dall’ADC * (5000 / 1024)

E se usi un Arduino a 3,3 V:

V OUT = lettura dall’ADC * (3300 / 1024)

Useremo queste formule negli esempi di codice qui sotto.

Esempio di codice per sensore di temperatura analogico TMP36 con Arduino

Con il seguente esempio di codice, puoi leggere la temperatura da un sensore TMP36 e mostrarla nel Serial Monitor.

/* TMP36 analog temperature sensor with Arduino example code. 
   https://www.makerguides.com */

// Define to which pin of the Arduino the output of the TMP36 is connected:
#define sensorPin A0

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in Celsius:
  float temperature = (voltage - 500) / 10;

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

  delay(1000); // wait a second between readings
}

Dovresti vedere il seguente output nel Serial Monitor (Ctrl + Shift + M).

Output del Serial Monitor

Assicurati che la velocità di trasmissione del Serial Monitor sia impostata a 9600.

Come funziona il codice

Per prima cosa, ho definito a quale pin di Arduino è collegato il pin V OUT del sensore. In questo caso, abbiamo usato il pin analogico A0. L’istruzione #define può essere usata per assegnare un nome a un valore costante. Il compilatore sostituirà tutte le occorrenze di questa costante con il valore definito durante la compilazione del programma. Quindi ovunque menzioni sensorPin, il compilatore lo sostituirà con A0 durante la compilazione.

// Define to which pin of the Arduino the output of the TMP36 is connected:
#define sensorPin A0

Nella sezione setup del codice, iniziamo la comunicazione seriale a 9600 baud.

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

Nella sezione loop del codice, iniziamo prendendo una lettura dal sensore con la funzione analogRead(pin).

  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

Poi usiamo le formule menzionate prima nell’articolo per convertire la lettura in tensione e poi in temperatura.

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = (voltage - 500) / 10;

Se usi un Arduino a 3,3 V, come il Arduino Due o il Arduino Nano 33 BLE, devi collegare il pin +V S a 3,3 V e sostituire la riga evidenziata con:

  // Convert the reading into voltage:
  float voltage = reading * (3300 / 1024.0);

Infine, i risultati vengono stampati nel Serial Monitor:

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

Visualizzare le letture di temperatura TMP36 su un LCD I2C

Se vuoi realizzare un termometro autonomo che non richieda un computer, può essere utile sapere come visualizzare le letture di temperatura su un display LCD.

Con l’esempio di codice qui sotto, puoi mostrare le letture di temperatura su un LCD I2C da 16×2 caratteri. Collegare l’LCD I2C è abbastanza semplice come si vede nello schema di collegamento sottostante.

TMP36 analog temperature sensor with 16x2 character I2C LCD and Arduino wiring diagram.
Schema di collegamento del sensore di temperatura analogico TMP36 con LCD I2C 16×2 e Arduino.

Vedi il How to control a character I2C LCD with Arduino e il How to use a 16×2 character LCD with Arduino Tutorial per maggiori dettagli sui display LCD I2C.

I collegamenti sono anche riportati nella tabella sottostante:

Collegamenti LCD I2C

LCD caratteri I2C Arduino
GND GND
VCC 5 V
SDA A4
SCL A5

Nota che il sensore di temperatura TMP36 è collegato come prima.

Installazione delle librerie Arduino necessarie

Per usare un LCD I2C, devi installare la libreria Arduino LiquidCrystal_I2C.

Per installare questa libreria, vai su Tools > Manage Libraries (Ctrl + Shift + I su Windows) nell’IDE Arduino. Si aprirà il Library Manager che aggiornerà la lista delle librerie installate.

Installing an Arduino library step 1 open Library Manager
Library Manager

Ora cerca ‘liquidcrystal_i2c’ e cerca la libreria di Frank de Brabander. Seleziona l’ultima versione e clicca su Install.

Installazione della libreria Arduino LiquidCrystal_I2C

Esempio di codice TMP36 con LCD I2C

/* TMP36 analog temperature sensor with I2C LCD and Arduino example code. 
   https://www.makerguides.com */

// Include the required Arduino libraries:
#include "LiquidCrystal_I2C.h"

// Create a new instance of the LiquidCrystal_I2C class:
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Degree symbol:
byte Degree[] = {
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};

// Define to which pin of the Arduino the TMP36 is connected:
#define sensorPin A0

void setup() {
  // Start the LCD and turn on the backlight:
  lcd.init();
  lcd.backlight();

  // Create a custom character:
  lcd.createChar(0, Degree);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = (voltage - 500) / 10;

  // Print the temperature on the LCD;
  lcd.setCursor(0, 0);
  lcd.print("Temperature:");
  lcd.setCursor(0, 1);
  lcd.print(temperature);
  lcd.write(0); // print the custom character
  lcd.print("C");

  delay(1000); // wait a second between readings
}

Dovresti vedere il seguente output sul display LCD:

DS18B20-16x2-I2C-LCD-output
Output LCD

Conclusione

In questo tutorial ti ho mostrato come usare un sensore di temperatura analogico TMP36 con Arduino. Se vuoi saperne di più su altri sensori di temperatura, dai un’occhiata agli articoli qui sotto.

Se hai domande, sentiti libero di lasciarle nella sezione commenti.