Skip to Content

Tutorial do sensor de temperatura analógico TMP36 com Arduino

Tutorial do sensor de temperatura analógico TMP36 com Arduino

Neste tutorial, vais aprender a usar um TMP36 sensor de temperatura analógico com Arduino. Incluí um diagrama de ligação e vários exemplos de código para te ajudar a começar!

Na primeira parte deste artigo, podes encontrar as especificações e informações sobre os sensores TMP35, TMP36 e TMP37. De seguida, vamos ver como ligar o sensor ao Arduino.

O primeiro exemplo de código pode ser usado para obter leituras de temperatura do sensor e mostrar os resultados no Monitor Serial. No segundo exemplo, vou mostrar-te como exibir a temperatura num LCD I2C para criar um termómetro autónomo.

Materiais

Componentes de 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.

Sobre os sensores de temperatura analógicos TMP35/TMP36/TMP37

Os TMP35/TMP36/TMP37 são sensores de temperatura centígrada de baixa tensão e precisão fabricados pela Analog Devices. Fornecem uma saída de tensão linearmente proporcional à temperatura em graus Celsius (°C) e, por isso, são muito fáceis de usar com o Arduino. Além disso, são precisos, não se desgastam e são muito baratos!

Os sensores TMP35/TMP36/TMP37 não requerem qualquer calibração externa para fornecer uma precisão típica de ±1°C a +25°C e ±2°C na faixa de temperatura de −40°C a +125°C.

A diferença entre o TMP35, TMP36 e TMP37 está na faixa de operação da temperatura e no fator de escala da saída. O TMP35 mede temperaturas de 10°C a 125°C e fornece uma saída de 250 mV a 25°C. Este sensor é funcionalmente compatível com o LM35 da Texas Instruments. Consulta o LM35 analog temperature sensor with Arduino tutorial para mais detalhes.

O TMP36 mede temperaturas de -40°C a 125°C, fornece uma saída de 750 mV a 25°C e funciona até +125°C com uma alimentação única de 2,7 V. Este sensor é funcionalmente compatível com o LM50. O TMP35 e o TMP36 têm o mesmo fator de escala de saída de 10 mV/°C.

O TMP37 destina-se a uma faixa de operação de 5°C a 100°C e fornece uma saída de 500 mV a 25°C. Este sensor oferece uma precisão ligeiramente superior aos outros sensores e tem um fator de escala de saída de 20 mV/°C.

tmp35 tmp36 tmp37 output voltage versus temperature
Tensão de saída (V) versus temperatura (°C). Fonte: Analog Devices

Como podes ver na figura acima, a faixa de saída de todos os sensores está entre 0,1 V e 2 V. Nota que a tensão de saída é independente da tensão de alimentação que usares.

Pinout do TMP35/TMP36/TMP37

Os sensores TMP35/TMP36/TMP37 vêm em 3 formatos diferentes, mas o tipo mais comum é o 3-pin TO-92 package, que se parece com um transistor. A versão TMP36 deste sensor tem o número de modelo TMP36GT9Z.

O pinout do sensor está indicado na figura abaixo:

Pinout do TMP36

Nota que o pino 1 (+V S ) é o pino mais à esquerda quando o lado plano do sensor (com o texto impresso) está virado para ti.

Podes encontrar mais especificações do TMP36 na tabela abaixo.

Especificações do sensor de temperatura analógico TMP36

Tensão de alimentação 2,7 V a 5,5 V
Corrente em repouso 50 µA
Faixa de temperatura -40°C a +125°C
Precisão ±1°C a +25°C
±2°C de -40°C a +125°C
Fator de escala de saída 10 mV/°C
Tensão de saída a 25°C 750 mV
Package TO-92 de 3 pinos
Fabricante Analog Devices
Custo Check price

Para mais informações, podes também consultar o datasheet aqui:

Ligação – Ligação do sensor de temperatura TMP36 ao Arduino

Ligar um TMP36 ao Arduino é muito fácil, pois só precisas de ligar 3 pinos. Começa por ligar o pino +V S ao output de 5 V do Arduino e o pino GND ao terra. Se estiveres a usar um Arduino de 3,3 V, simplesmente liga o +V S a 3,3 V em vez disso.

De seguida, liga o pino do meio (V OUT ) a qualquer uma das entradas analógicas do Arduino. Neste caso, usei o pino de entrada analógica A0.

TMP36 analog temperature sensor with Arduino Uno wiring diagram
Diagrama de ligação do sensor de temperatura analógico TMP36 com Arduino Uno

As ligações estão também indicadas na tabela abaixo:

Ligações do sensor de temperatura analógico TMP36

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

Para melhorar a estabilidade do sensor, o datasheet recomenda adicionar um condensador cerâmico de 0,1 μF entre o pino +V S e o GND. Quando usares cabos longos, adicionar um pequeno resistor (ex. 750 Ω) em série com a linha de sinal (V OUT ) também pode reduzir o ruído.

TMP36 with capacitor and resistor
TMP36 com resistor e condensador opcionais

Quando testei o sensor com um Arduino Uno, obtive leituras estáveis sem o condensador e resistor, mas os teus resultados podem variar.

Converter a tensão de saída do TMP36 em temperatura

Para converter a tensão de saída do sensor em temperatura em graus Celsius, podes usar a seguinte fórmula:

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

com V OUT em milivolt (mV). Portanto, se a saída do sensor for 750 mV, então a temperatura é:

(750 – 500) / 10 = 25°C

Como podes ver no diagrama de ligação acima, a saída do TMP36 está ligada a uma das entradas analógicas do Arduino. O valor dessa entrada analógica pode ser lido com a função analogRead(), como vais ver nos exemplos de código abaixo. No entanto, a função analogRead(pin) não retorna diretamente a tensão de saída do sensor.

As placas Arduino contêm um conversor analógico-digital (ADC) multicanal de 10 bits, que mapeia tensões de entrada entre 0 e a tensão de operação (5 V ou 3,3 V) em valores inteiros entre 0 e 1023. Num Arduino Uno, por exemplo, isto dá uma resolução entre leituras de 5 volts / 1024 unidades, ou 0,0049 volts (4,9 mV) por unidade.

Portanto, se usares analogRead() para ler a tensão numa das entradas analógicas do Arduino, obterás um valor entre 0 e 1023.

Para converter este valor de volta na tensão de saída do sensor, podes usar:

V OUT = leitura do ADC * (5000 / 1024)

E se estiveres a usar um Arduino de 3,3 V:

V OUT = leitura do ADC * (3300 / 1024)

Vamos usar estas fórmulas nos exemplos de código abaixo.

Exemplo de código para sensor de temperatura analógico TMP36 com Arduino

Com o seguinte exemplo de código, podes ler a temperatura de um sensor TMP36 e mostrar no Monitor Serial.

/* 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
}

Deverás ver a seguinte saída no Monitor Serial (Ctrl + Shift + M).

Saída do Monitor Serial

Certifica-te de que a taxa de transmissão do Monitor Serial está também definida para 9600.

Como o código funciona

Primeiro, defini a que pino do Arduino o pino V OUT do sensor está ligado. Neste caso, usamos o pino analógico A0. A instrução #define pode ser usada para dar um nome a um valor constante. O compilador substituirá todas as referências a esta constante pelo valor definido quando o programa for compilado. Assim, em todo o lado onde mencionares sensorPin, o compilador substituirá por A0 quando o programa for compilado.

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

Na secção setup do código, iniciamos a comunicação serial com uma taxa de 9600 bauds.

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

Na secção loop do código, começamos por fazer uma leitura do sensor com a função analogRead(pin).

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

De seguida, usamos as fórmulas que mencionei anteriormente no artigo para converter a leitura em tensão e depois em 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 estiveres a usar um Arduino de 3,3 V, como o Arduino Due ou o Arduino Nano 33 BLE, precisas de ligar o pino +V S a 3,3 V e substituir a linha destacada por:

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

Por fim, os resultados são impressos no Monitor Serial:

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

Mostrar as leituras de temperatura do TMP36 num LCD I2C

Se quiseres fazer um termómetro autónomo que não precise de computador, pode ser útil saber como mostrar as leituras de temperatura num ecrã LCD.

Com o código de exemplo abaixo, podes mostrar as leituras de temperatura num LCD I2C de 16×2 caracteres. Ligar o LCD I2C é bastante fácil, como podes ver no diagrama de ligação abaixo.

TMP36 analog temperature sensor with 16x2 character I2C LCD and Arduino wiring diagram.
Diagrama de ligação do sensor de temperatura analógico TMP36 com LCD I2C 16×2 e Arduino.

Consulta o How to control a character I2C LCD with Arduino e o How to use a 16×2 character LCD with Arduino Tutorial para mais detalhes sobre ecrãs LCD I2C.

As ligações estão também indicadas na tabela abaixo:

Ligações do LCD I2C

LCD de caracteres I2C Arduino
GND GND
VCC 5 V
SDA A4
SCL A5

Nota que o sensor de temperatura TMP36 está ligado da mesma forma que antes.

Instalar as bibliotecas Arduino necessárias

Para usar um LCD I2C, precisas de instalar a biblioteca Arduino LiquidCrystal_I2C.

Para instalar esta biblioteca, vai a Tools > Manage Libraries (Ctrl + Shift + I no Windows) no Arduino IDE. O Library Manager abrirá e atualizará a lista de bibliotecas instaladas.

Installing an Arduino library step 1 open Library Manager
Library Manager

Agora procura por ‘liquidcrystal_i2c’ e procura a biblioteca do Frank de Brabander. Seleciona a versão mais recente e depois clica em Install.

Instalar a biblioteca Arduino LiquidCrystal_I2C

Exemplo de código TMP36 com 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
}

Deverás ver a seguinte saída no LCD:

DS18B20-16x2-I2C-LCD-output
Saída do LCD

Conclusão

Neste tutorial, mostrei-te como usar um sensor de temperatura analógico TMP36 com Arduino. Se quiseres aprender mais sobre outros sensores de temperatura, consulta os artigos abaixo.

Se tiveres alguma dúvida, não hesites em deixar nos comentários.