Tipos de sensor de temperatura para Arduino: 8 sensores comparados
Tipos de sensor de temperatura para Arduino comparados: DHT11, DHT22, DS18B20, LM35, NTC, BME280, MAX6675 e MLX90614 por precisão, faixa, ligação, comprimento de cabo e preço.
Escolher entre os diferentes tipos de sensor de temperatura para Arduino importa mais do que parece: um DHT11 e um DS18B20 no mesmo cômodo podem discordar em 2 °C, e é bem possível derreter um sensor tentando medir um forno de 300 °C com o modelo errado. Oito sensores de temperatura dominam a eletrônica hobby: DHT11, DHT22, DS18B20, LM35, o termistor NTC, BME280, MAX6675 (termopar tipo K) e MLX90614 (infravermelho sem contato). Cada um tem faixa de medição, precisão, forma de ligação e preço diferentes. Qual é o certo depende do que você vai medir: o ar do cômodo, água, um forno ou um motor girando que você não pode tocar?
Neste guia colocamos os oito sensores lado a lado em duas tabelas grandes: faixa de medição, precisão, resolução, velocidade de leitura, interface, tensão de alimentação, comprimento de cabo e preço relativo. Depois você verá como cada um funciona, seus pontos fortes e fracos, a ligação no Arduino Uno, ESP32 e Raspberry Pi Pico, exemplos de código para NTC, MAX6675 e MLX90614, uma montagem de teste que coloca três sensores para competir entre si e qual escolher para cada projeto. Também temos tutoriais detalhados para a maioria desses sensores; os links estão nas seções correspondentes.





O que observar ao escolher um sensor de temperatura?
Antes de comparar sensores, é preciso ler corretamente os termos do datasheet. A dupla que mais se confunde é precisão e resolução. A precisão diz o quanto a leitura está próxima da temperatura real; a resolução é o menor passo que o sensor consegue distinguir. O BME280 informa a temperatura em passos de 0,01 °C, mas sua precisão é de cerca de ±1 °C; então os dois últimos dígitos dos 23,47 °C na sua tela servem para acompanhar pequenas variações, mas não dizem a temperatura real com essa exatidão. Observe estes sete critérios na hora de escolher:
- Faixa de medição: o sensor deve cobrir com folga a menor e a maior temperatura que você quer medir. O DHT11 não enxerga abaixo de zero; uma geladeira pede um DS18B20 e um forno pede um termopar.
- Precisão: ±2 °C é aceitável para um termômetro de ambiente, mas um aquário ou uma chocadeira precisa de ±0,5 °C.
- Interface: sensores analógicos precisam de um pino ADC; sensores digitais precisam de um ou mais pinos digitais e, em geral, de uma biblioteca. O número de pinos livres na sua placa define quantos sensores você pode ligar.
- Comprimento do cabo: se o sensor vai ficar a 5 metros da placa, no jardim ou no fundo de uma caixa d'água, sensores analógicos e I2C sofrem; o 1-Wire e o protocolo de fio único do DHT aguentam longas distâncias muito melhor.
- Tempo de resposta: uma sonda em capa de aço ou um DHT na sua carcaça plástica só percebe uma mudança brusca de temperatura depois de segundos ou até minutos; um NTC pequeno e exposto é bem mais rápido.
- Medições extras: se você também precisa de umidade, um DHT22 ou BME280 resolve; se precisa ainda de pressão e altitude, o BME280 cobre tudo em um só módulo.
- Tensão de alimentação: no ESP32 e no Pico, que funcionam com 3,3 V, cuidado com sensores como o LM35, que pedem no mínimo 4 V, e garanta que não chegue mais de 3,3 V à entrada do ADC.
Tabela comparativa de 8 sensores de temperatura
A primeira tabela resume o desempenho de medição; a segunda, a parte de ligação e custo. Os valores vêm dos datasheets; salvo indicação em contrário, a precisão vale perto da temperatura ambiente e piora nas extremidades da faixa.
| Sensor | Faixa de medição | Precisão | Resolução | Velocidade de leitura |
|---|---|---|---|---|
| DHT11 | 0 … +50 °C | ±2 °C | 1 °C | 1 vez por segundo |
| DHT22 (AM2302) | −40 … +80 °C | ±0,5 °C | 0,1 °C | 1 vez a cada 2 segundos |
| DS18B20 | −55 … +125 °C | ±0,5 °C (de −10 a +85 °C) | 0,0625 °C (12 bits) | 750 ms (12 bits), 94 ms (9 bits) |
| LM35DZ | 0 … +100 °C (LM35: −55 … +150 °C) | Típica ±0,6 °C, garantida ±1,5 °C | 0,49 °C no Uno (ref. 5 V), 0,11 °C (ref. 1,1 V) | Instantânea (velocidade do ADC) |
| NTC 10 kΩ, B 3950 | −40 … +125 °C (encapsulado em vidro ≈ 300 °C) | A 25 °C: ±0,25 °C (1%) … ±1 °C (5%) | ≈ 0,1 °C em temperatura ambiente no Uno | Instantânea (velocidade do ADC) |
| BME280 | −40 … +85 °C | ±0,5 °C (25 °C), ±1 °C (0 … 65 °C) | 0,01 °C | Dezenas por segundo |
| MAX6675 + termopar tipo K | 0 … +1023,75 °C | Alguns °C (conversor ≈ ±2 °C, junção fria até ±3 °C) | 0,25 °C | ≈ 4 por segundo (conversão de 0,22 s) |
| MLX90614 | Objeto −70 … +380 °C, ambiente −40 … +125 °C | ±0,5 °C (perto da temperatura ambiente) | 0,02 °C | Várias vezes por segundo |
| Sensor | Interface | Alimentação | Comprimento do cabo | Medição extra | Preço relativo |
|---|---|---|---|---|---|
| DHT11 | Digital de fio único, 1 pino | 3–5,5 V | Até 20 m | Umidade | Muito baixo |
| DHT22 | Digital de fio único, 1 pino | 3,3–6 V | Até 20 m | Umidade | Médio |
| DS18B20 | 1-Wire, vários sensores em 1 pino | 3,0–5,5 V | Dezenas de metros | Nenhuma | Baixo |
| LM35 | Analógica, 1 pino ADC | 4–30 V | Curto, ≈ 1 m (mais longo exige cuidados) | Nenhuma | Baixo |
| NTC | Analógica, 1 pino ADC via divisor | 3,3 ou 5 V pelo divisor | Alguns metros | Nenhuma | O mais baixo |
| BME280 | I2C (2 pinos) ou SPI | Chip 1,71–3,6 V; módulo com regulador 5 V | Curto, menos de 50 cm | Umidade e pressão | Médio |
| MAX6675 | SPI, 3 pinos (só leitura) | 3,0–5,5 V | O fio do termopar pode ter metros | Nenhuma | Médio |
| MLX90614 | I2C (SMBus), 2 pinos | Versão de 3 V ou 5 V (o módulo pode ter regulador) | Curto (I2C); mede sem contato | Temperatura ambiente | Alto |
DHT11 e DHT22: temperatura e umidade juntas
Dentro da gaiola plástica de um sensor DHT há um elemento de umidade (resistivo no DHT11, capacitivo no DHT22), um termistor e um pequeno controlador que converte as medições em dados digitais. O sensor envia o resultado por uma única linha de dados como um pacote de 40 bits: 16 bits de umidade, 16 bits de temperatura e 8 bits de checksum. Esse protocolo não é 1-Wire, e sim um protocolo de fio único próprio do fabricante, por isso cada DHT precisa do seu próprio pino. O DHT11 é barato e serve para temperatura ambiente, mas a faixa de 0–50 °C e o erro de ±2 °C o deixam fraco para uso externo e trabalhos precisos. Com a mesma ligação, o DHT22 (AM2302) mede de −40 a +80 °C com precisão de ±0,5 °C e informa a umidade de 0–100%; em troca, só consegue fazer uma leitura a cada dois segundos. Os dois têm a mesma fraqueza, a lentidão: mostram a mudança com atraso, porque o ar dentro da gaiola primeiro precisa entrar em equilíbrio com o ambiente. Para ligação, instalação da biblioteca e código, veja Sensor de temperatura e umidade DHT11; o mesmo código funciona no DHT22 trocando uma única palavra.
DS18B20: à prova d'água, robusto e vários sensores em um pino

O DS18B20 mede a temperatura dentro do chip e a envia como um número digital, com resolução selecionável de 9 a 12 bits. Mede de −55 a +125 °C, oferece precisão de ±0,5 °C de −10 a +85 °C e, graças ao protocolo 1-Wire, você pode ligar dezenas de sensores em um único pino de dados; cada um tem um endereço único de 64 bits gravado de fábrica. A versão em sonda à prova d'água, com capa de aço inox, é imbatível para aquários, caixas d'água, tubulação de aquecimento, solo e freezers. A única exigência é um resistor de pull-up de 4,7 kΩ entre a linha de dados e a alimentação; sem ele, a biblioteca retorna −127 °C. No modo de 12 bits uma conversão leva 750 ms, então talvez seja preciso reduzir a resolução para acompanhar uma temperatura que muda rápido. O código com vários sensores e como ler no ESP32 sem bloqueio estão em Sensor de temperatura DS18B20.
LM35: o sensor analógico mais simples, sem biblioteca
O LM35 converte a temperatura diretamente em tensão: a saída sobe 10 mV por grau e dá 250 mV a 25 °C. Não precisa de biblioteca; você obtém o resultado com a fórmula temperatura = analogRead × 5,0 / 1024 × 100. Essa simplicidade o torna um primeiro passo perfeito para aprender o ADC. Os pontos fracos vêm do mesmo lugar: com referência de 5 V, o ADC de 10 bits do Arduino Uno só dá passos de cerca de 0,49 °C, qualquer desvio nos 5 V do USB vai direto para a temperatura e, quanto mais longo o cabo, mais ruído a saída capta. A maioria dos LM35 à venda é LM35DZ, garantido só para 0–100 °C. Ele também precisa de pelo menos 4 V, então no ESP32 e no Pico deve ser alimentado pelo pino de 5 V. Em placas de 3,3 V, uma opção analógica mais prática é o TMP36: funciona com 2,7–5,5 V, mede de −40 a +125 °C e também tem saída de 10 mV/°C, mas como dá 500 mV a 0 °C a fórmula vira temperatura = (V − 0,5) × 100. A precisão típica é de ±1 °C a 25 °C e ±2 °C em toda a faixa. Explicamos passo a passo como reduzir o passo para 0,11 °C com a referência interna de 1,1 V em Sensor de temperatura LM35, e você encontra como o ADC funciona em conversão analógico-digital.
Termistor NTC: o sensor mais barato e mais rápido
Um termistor NTC (Negative Temperature Coefficient, coeficiente de temperatura negativo) é um resistor cuja resistência cai à medida que a temperatura sobe. O tipo mais comum em projetos hobby tem 10 kΩ a 25 °C e coeficiente B de 3950 K. Como o Arduino não mede resistência diretamente, o NTC é ligado como um divisor de tensão junto com um resistor fixo, e a tensão no ponto médio é lida em um pino analógico. Esse circuito tem uma propriedade interessante: quando o divisor é alimentado pelos mesmos 5 V da referência do ADC, a medição é raciométrica, então o resultado não muda mesmo que a alimentação seja 4,8 ou 5,1 V. Você pode calcular facilmente as tensões do divisor com a ferramenta Divisor de tensão.
A resistência de um NTC varia com a temperatura de forma exponencial, não linear, então não dá para obter o resultado com um único multiplicador como no LM35. Na prática se usa a equação Beta: 1/T = 1/T0 + (1/B) × ln(R/R0). Aqui T é a temperatura em kelvin, T0 = 298,15 K (25 °C), R0 = 10 kΩ e B = 3950. A sensibilidade é muito alta em temperatura ambiente: pela fórmula B/T², a resistência varia cerca de 4,4% por grau. Por isso um NTC com tolerância de 1% erra só cerca de ±0,25 °C a 25 °C; nas extremidades da faixa, porém, entra a tolerância do coeficiente B e o erro cresce. Para mais precisão em uma faixa ampla, usa-se a equação de Steinhart-Hart de três pontos; os detalhes estão em termistor NTC.
1const int NTC_PIN = A1; // bölücünün orta noktası / divider midpoint
2const float R_FIXED = 10000.0; // 5V ile A1 arasındaki direnç / resistor between 5V and A1
3const float R0 = 10000.0; // NTC'nin 25 °C'deki direnci / NTC resistance at 25 °C
4const float BETA = 3950.0; // B katsayısı (veri sayfası) / B coefficient (datasheet)
5const float T0 = 298.15; // 25 °C Kelvin cinsinden / 25 °C in kelvin
6const int SAMPLES = 16; // ortalama için ölçüm sayısı / samples to average
7
8void setup() {
9 Serial.begin(9600);
10}
11
12void loop() {
13 long sum = 0;
14 for (int i = 0; i < SAMPLES; i++) {
15 sum += analogRead(NTC_PIN);
16 delay(2);
17 }
18 float adc = sum / (float)SAMPLES;
19
20 if (adc < 1.0 || adc > 1022.0) { // kopuk ya da kısa devre / open or shorted
21 Serial.println(F("NTC baglantisini kontrol et / Check the NTC wiring"));
22 delay(1000);
23 return;
24 }
25
26 float r = R_FIXED * adc / (1023.0 - adc); // NTC direnci (ohm) / NTC resistance (ohm)
27 float invT = 1.0 / T0 + log(r / R0) / BETA; // Beta denklemi / Beta equation
28 float tempC = 1.0 / invT - 273.15; // Kelvin -> °C
29
30 Serial.print(F("R: "));
31 Serial.print(r, 0);
32 Serial.print(F(" ohm Sicaklik / Temp: "));
33 Serial.print(tempC, 1);
34 Serial.println(F(" C"));
35 delay(1000);
36}Neste circuito, o resistor fixo de 10 kΩ fica entre 5V e A1, e o NTC entre A1 e GND. Quando a temperatura sobe, a resistência do NTC cai, e com ela a tensão em A1. O código primeiro calcula a resistência do NTC a partir do valor bruto, depois a temperatura em kelvin com a equação Beta, e converte para Celsius; a média de 16 leituras reduz o ruído do ADC a um quarto. Em temperatura ambiente, um passo do ADC do Uno corresponde a cerca de 0,09 °C, ou seja, a resolução é cinco vezes melhor que a de um LM35 lido com referência de 5 V. Em módulos NTC prontos (o KY-013, por exemplo), o lado em que fica o resistor fixo varia de placa para placa; se a leitura cair quando você encosta algo quente no NTC, inverta a fórmula da resistência: r = R_FIXED × (1023 − adc) / adc.
BME280: temperatura, umidade e pressão em um só módulo
O BME280 da Bosch mede temperatura, umidade relativa e pressão atmosférica em um chip de apenas 2,5 × 2,5 mm, e se comunica por I2C (endereço 0x76 ou 0x77) ou SPI. Na temperatura, oferece resolução de 0,01 °C e precisão de ±0,5 °C a 25 °C e ±1 °C de 0 a 65 °C; faz dezenas de leituras por segundo e consome bem menos de 1 µA em repouso. Isso o torna ideal para estações meteorológicas a bateria. O chip em si não aguenta mais de 3,6 V: os módulos roxos de 6 pinos geralmente são só para 3,3 V, enquanto os módulos de 4 pinos com regulador podem ser ligados em 5 V. Quando mede continuamente, o chip esquenta um pouco e pode marcar alguns décimos de grau a mais; para medições meteorológicas, o modo forçado (forced) com algumas leituras por minuto é suficiente. Explicamos como funciona o barramento I2C em O que é I2C?.
MAX6675 e termopar tipo K: até 1000 °C
Um termopar é feito de dois fios de metais diferentes soldados em uma ponta. A diferença de temperatura entre a solda (a junção quente) e o ponto em que os fios se ligam ao aparelho (a junção fria) gera uma tensão minúscula nos fios; num termopar tipo K, são cerca de 41 µV por grau. O ADC do Arduino não consegue ler uma tensão tão pequena, e ainda é preciso saber a temperatura da junção fria. O MAX6675 faz as duas coisas: amplifica a tensão do termopar, aplica a compensação de junção fria medindo a própria temperatura e entrega o resultado por SPI com 12 bits e resolução de 0,25 °C. A faixa vai de 0 a +1023,75 °C, o que o torna a única opção aqui para lugares onde os outros sensores não sobrevivem, como ferro de solda, forno de pizza, churrasqueira, forno de cerâmica ou escapamento.
Você também deve conhecer os limites do MAX6675: ele não mede abaixo de 0 °C; o erro do próprio conversor é de cerca de ±2 °C entre 0 e 700 °C, e a isso se somam o erro da compensação de junção fria, de até ±3 °C, e a tolerância do fio do termopar. Então espere uma precisão total de alguns graus; num forno a 800 °C essa diferença não importa. Uma conversão leva 0,17–0,22 segundo, então espere pelo menos 250 ms entre duas leituras. Se você também precisa de temperaturas negativas, o MAX31855, mais novo (−200 a +1350 °C, 14 bits), é a melhor escolha. Você encontra como funciona o barramento SPI em O que é SPI?. Depois de instalar a biblioteca MAX6675 library da Adafruit pelo Gerenciador de Bibliotecas da Arduino IDE, carregue o código abaixo:
1#include "max6675.h"
2
3const int thermoDO = 4; // SO: veri çıkışı / data out
4const int thermoCS = 5; // CS: çip seçimi / chip select
5const int thermoCLK = 6; // SCK: saat / clock
6
7MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
8
9void setup() {
10 Serial.begin(9600);
11 delay(500); // ilk ölçümü bekle / wait for the first conversion
12}
13
14void loop() {
15 float c = thermocouple.readCelsius();
16 if (isnan(c)) { // D2 biti: termokupl açık / bit D2: thermocouple open
17 Serial.println(F("Termokupl takili degil / Thermocouple not connected"));
18 } else {
19 Serial.print(F("Sicaklik / Temp: "));
20 Serial.print(c, 2);
21 Serial.println(F(" C"));
22 }
23 delay(500); // en az 250 ms bekle / wait at least 250 ms
24}MLX90614: medindo temperatura sem contato
O MLX90614 é um sensor de temperatura sem contato que detecta, com uma termopilha, a radiação infravermelha emitida pelos objetos. Ele fornece dois valores ao mesmo tempo: a temperatura ambiente, que é a temperatura do próprio corpo do sensor (−40 a +125 °C), e a temperatura do objeto, que é a da superfície para a qual ele aponta (−70 a +380 °C). Perto da temperatura ambiente, oferece precisão de ±0,5 °C e resolução de 0,02 °C; vem calibrado de fábrica, comunica-se por I2C (SMBus) no endereço 0x5A, e a velocidade do barramento não pode passar de 100 kHz. É ideal para medir sem tocar um motor girando, um rolamento, um chip quente numa placa de circuito ou uma panela no fogão.
A medição sem contato tem dois segredos. O primeiro é o campo de visão: o sensor mede a média de tudo o que está dentro do seu cone de visão. A versão mais comum, a MLX90614ESF-BAA, tem campo de visão de 90°; isso significa que, a 5 cm de distância, ela faz a média de uma área de cerca de 10 cm de diâmetro. Para medir um objeto pequeno, aproxime o sensor ou escolha uma versão de ângulo estreito, como 35° (BCC) ou 5° (BCI). O segundo é a emissividade: o sensor vem ajustado de fábrica para 1,0. Para tinta fosca, plástico, madeira, pele e água, o coeficiente fica entre 0,9 e 0,98, então o resultado fica próximo do correto; superfícies metálicas brilhantes, porém, emitem pouquíssima radiação e parecem muito mais frias do que são. Colar um pedaço de fita preta fosca nelas é uma solução simples e eficaz. Instale a biblioteca Adafruit MLX90614 pelo Gerenciador de Bibliotecas e teste este código:
1#include <Wire.h>
2#include <Adafruit_MLX90614.h>
3
4Adafruit_MLX90614 mlx = Adafruit_MLX90614();
5
6void setup() {
7 Serial.begin(9600);
8 if (!mlx.begin()) { // varsayılan adres 0x5A / default address 0x5A
9 Serial.println(F("MLX90614 bulunamadi / not found"));
10 while (true) delay(10);
11 }
12 Serial.print(F("Emisivite / Emissivity: "));
13 Serial.println(mlx.readEmissivity(), 2); // fabrika ayarı 1.00 / factory default 1.00
14}
15
16void loop() {
17 Serial.print(F("Ortam / Ambient: "));
18 Serial.print(mlx.readAmbientTempC(), 2); // sensör gövdesi / sensor body
19 Serial.print(F(" C Nesne / Object: "));
20 Serial.print(mlx.readObjectTempC(), 2); // baktığı yüzey / surface in view
21 Serial.println(F(" C"));
22 delay(500);
23}Resumo de ligação: Arduino Uno, ESP32 e Raspberry Pi Pico
| Sensor e pino | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| DHT11 / DHT22: DATA | D2 | GPIO 27 | GP15 |
| DS18B20: DQ (+ pull-up de 4,7 kΩ) | D3 | GPIO 4 | GP22 |
| LM35: Vout (alimentação 5 V) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| NTC: ponto médio do divisor | A1 (divisor a partir do 5V) | GPIO 35 (ADC1, divisor a partir do 3V3) | GP27 (ADC1, divisor a partir do 3V3) |
| BME280: SDA / SCL | A4 / A5 | GPIO 21 / 22 | GP4 / GP5 |
| MLX90614: SDA / SCL | A4 / A5 (mesmo barramento I2C) | GPIO 21 / 22 | GP4 / GP5 |
| MAX6675: SO / CS / SCK | D4 / D5 / D6 | GPIO 19 / 23 / 18 | GP16 / GP17 / GP18 |
| Alimentação (VCC) | 5V (3.3V para o BME280 de 6 pinos) | 3V3 (5V/VIN para o LM35) | 3V3(OUT) (VBUS para o LM35) |
O ESP32 e o Pico funcionam com 3,3 V; se você alimentar o divisor do NTC pelo 3V3, nenhuma tensão perigosa chega à entrada do ADC. No ESP32, ligue sensores analógicos só nos pinos ADC1 (GPIO 32–39), porque os pinos ADC2 não funcionam com o Wi-Fi ligado; já para linhas de dados bidirecionais como as do DHT e do DS18B20, evite os GPIO 34–39, pois esses pinos são só de entrada. O BME280 (0x76) e o MLX90614 (0x5A) têm endereços diferentes, então podem dividir os mesmos dois fios I2C sem problema. Você encontra todos os pinos da sua placa na ferramenta Pinagem e os códigos de cores dos resistores de pull-up na ferramenta Código de cores.
Teste comparativo com o ESP32: três sensores no mesmo lugar
A melhor forma de ver as diferenças entre sensores é com os próprios olhos. O código para ESP32 abaixo lê um DS18B20, um DHT22 e um BME280 ao mesmo tempo e mostra os resultados como três linhas separadas no Plotter Serial da Arduino IDE. Coloque os sensores lado a lado na protoboard, a pelo menos 10 cm do ESP32; o ESP32 esquenta durante o funcionamento e afeta qualquer sensor ao lado. O código precisa das bibliotecas OneWire, DallasTemperature, DHT sensor library e Adafruit BME280.
1#include <OneWire.h>
2#include <DallasTemperature.h>
3#include <DHT.h>
4#include <Wire.h>
5#include <Adafruit_Sensor.h>
6#include <Adafruit_BME280.h>
7
8const int ONE_WIRE_PIN = 4; // DS18B20 DQ (4,7 kΩ pull-up -> 3V3)
9const int DHT_PIN = 27; // DHT22 DATA
10
11OneWire oneWire(ONE_WIRE_PIN);
12DallasTemperature ds(&oneWire);
13DHT dht(DHT_PIN, DHT22);
14Adafruit_BME280 bme; // I2C: SDA GPIO 21, SCL GPIO 22
15bool bmeOk = false;
16
17void setup() {
18 Serial.begin(115200);
19 ds.begin();
20 dht.begin();
21 bmeOk = bme.begin(0x76) || bme.begin(0x77); // iki adresi de dene / try both addresses
22 if (!bmeOk) Serial.println("BME280 bulunamadi / not found");
23}
24
25void loop() {
26 ds.requestTemperatures(); // 12 bitte ~750 ms sürer / takes ~750 ms at 12-bit
27 float tDs = ds.getTempCByIndex(0); // sensör yoksa -127 / -127 if missing
28 float tDht = dht.readTemperature(); // hata olursa NAN / NAN on error
29 float tBme = bmeOk ? bme.readTemperature() : NAN;
30
31 // Seri Çizici için etiket:değer biçimi / label:value format for the Serial Plotter
32 Serial.printf("DS18B20:%.2f,DHT22:%.1f,BME280:%.2f\n", tDs, tDht, tBme);
33 delay(2000); // DHT22 en fazla 2 sn'de bir / DHT22 at most every 2 s
34}Primeiro espere alguns minutos e veja a distância entre as linhas: diferenças de 0,5–1 °C estão dentro dos limites de precisão desses sensores. Depois coloque um copo de água morna ao lado deles ou sopre de leve nos três. O DS18B20 e o BME280 reagem em poucos segundos, enquanto a linha do DHT22 fica claramente para trás por causa da gaiola plástica. Se o BME280 ficar sempre alguns décimos de grau acima dos outros, é o chip aquecendo a si mesmo. Esse pequeno experimento mostra diferenças que não estão escritas em nenhum datasheet. Para registrar leituras por muito tempo, você pode usar um módulo de cartão SD ou enviar os dados para o Google Sheets.
Medindo temperatura com o Raspberry Pi Pico e MicroPython
O firmware MicroPython do Pico já vem com os módulos dht, onewire e ds18x20 embutidos, então você não precisa copiar nenhum arquivo extra para o Pico para usar o DHT e o DS18B20. O chip RP2040 também tem um sensor de temperatura interno ligado ao canal 4 do ADC. O código abaixo lê os três juntos:
1from machine import Pin, ADC
2import dht, onewire, ds18x20, time
3
4dht22 = dht.DHT22(Pin(15)) # DHT22 DATA -> GP15
5ds = ds18x20.DS18X20(onewire.OneWire(Pin(22))) # DS18B20 DQ -> GP22 (4,7 kΩ pull-up)
6roms = ds.scan() # hattaki sensörler / sensors on the bus
7cpu = ADC(4) # RP2040 dahili sensörü / internal sensor
8
9def cpu_temp():
10 v = cpu.read_u16() * 3.3 / 65535 # ham değer -> volt / raw value -> volts
11 return 27 - (v - 0.706) / 0.001721 # RP2040 veri sayfası formülü / datasheet formula
12
13while True:
14 t_ds = None
15 if roms:
16 ds.convert_temp() # ölçümü başlat / start conversion
17 time.sleep_ms(750) # 12 bit dönüşüm süresi / 12-bit conversion time
18 t_ds = round(ds.read_temp(roms[0]), 2)
19 try:
20 dht22.measure()
21 t_dht, nem = dht22.temperature(), dht22.humidity()
22 except OSError: # okuma hatası / read error
23 t_dht = nem = None
24 print("DS18B20:", t_ds, "DHT22:", t_dht, "Nem / RH:", nem,
25 "Pico:", round(cpu_temp(), 1))
26 time.sleep(2)O sensor interno mede a temperatura do chip, não a do ambiente, e pequenos desvios na referência do ADC podem deslocar o resultado em alguns graus. Então ele não serve para medir o ambiente, mas é útil para verificar se a placa está superaquecendo. Não se esqueça do pull-up de 4,7 kΩ na linha de dados do DS18B20; os resistores de pull-up internos do Pico são fracos demais para o 1-Wire. Se você está começando com o Pico, comece por O que é o Raspberry Pi Pico?.
Qual sensor de temperatura para qual projeto?
| Projeto ou necessidade | Sensor recomendado | Por quê? |
|---|---|---|
| Primeiro projeto, termômetro de ambiente | DHT11 | O mais barato, também mede umidade; ±2 °C basta para um cômodo |
| Estação meteorológica interna e externa | BME280 ou DHT22 | Chega a −40 °C e mede umidade; o BME280 também mede pressão e altitude |
| Aquário, caixa d'água, água do aquecedor | Sonda DS18B20 à prova d'água | Capa de inox, ±0,5 °C, cabo longo |
| Geladeira e freezer | DS18B20 | Mede até −55 °C; o DHT11 não enxerga abaixo de zero |
| Medição em vários pontos (cômodos, estufa, tubulação) | DS18B20 | Dezenas de sensores em um pino, cada um com seu endereço |
| Chocadeira | DHT22 ou BME280 | ±0,5 °C perto de 37,5 °C, mais controle de umidade |
| Forno, churrasqueira, ferro de solda | MAX6675 + termopar tipo K | Aguenta até 1000 °C |
| Hotend de impressora 3D, pack de baterias | Termistor NTC | Pequeno, barato e rápido; impressoras 3D usam NTCs de 100 kΩ encapsulados em vidro |
| Motor, rolamento, placa de circuito, peça móvel | MLX90614 | Mede sem contato |
| Aprender o ADC e medição analógica | LM35 ou NTC | Não precisa de biblioteca, funciona com uma fórmula |
Ideias de projetos com sensores de temperatura
- Estufa inteligente: meça a temperatura e a umidade do ar com um DHT22 e a temperatura do solo com uma sonda DS18B20; controle a ventoinha e a irrigação com um módulo relé. Para o projeto completo, veja o projeto de estufa inteligente.
- Aquecedor de aquário com termostato: mantenha a água entre 25 e 26 °C com um DS18B20 à prova d'água; use 0,5 °C de histerese para o relé não ligar e desligar a cada pequena variação.
- Estação meteorológica a bateria: combine um BME280 com o modo deep sleep do ESP32 e meça a cada dez minutos, para o sistema funcionar por meses com baterias.
- Termômetro para forno de pizza ou churrasqueira: mostre a temperatura do forno em dígitos grandes num display OLED com um MAX6675 e uma sonda tipo K.
- Alarme de temperatura de motor sem contato: monitore a temperatura da superfície de um motor ou da mesa de uma impressora 3D com um MLX90614 e faça um buzzer tocar quando passar de um limite.
- Automação residencial: envie a temperatura de cada cômodo para o Home Assistant via MQTT com um ESP32 e controle o aquecimento de acordo.
- Guardião do freezer: com um DS18B20, dispare um alarme se o interior do freezer passar de −12 °C e mostre o valor num display LCD I2C.
Erros comuns e como resolvê-los
| Sintoma | Causa provável | Solução |
|---|---|---|
| DHT: nan ou “Failed to read from DHT sensor!” (falha na leitura) | Tipo errado no código (DHT11/DHT22), sem pull-up ou leitura frequente demais | Corrija o tipo, adicione um pull-up de 10 kΩ, espere 2 segundos entre leituras |
| DS18B20: −127 °C | Sensor não encontrado: sem pull-up, cabo com defeito ou pino errado | Coloque 4,7 kΩ entre DQ e VCC, confira as ligações |
| DS18B20: sempre 85 °C | Lido antes de a conversão terminar, ou alimentação insuficiente | Espere o tempo de conversão, alimente o VDD diretamente |
| LM35: valor anormalmente alto, sensor esquentando | Pinos de alimentação ligados ao contrário | Corte a alimentação na hora e corrija a ordem dos pinos |
| LM35 ou NTC: valor fica pulando | Ruído do ADC, cabo longo, alimentação USB oscilando | Tire a média das leituras, adicione um capacitor de 0,1 µF, encurte o cabo |
| NTC: temperatura cai quando esquenta | A orientação do divisor não bate com o código | Inverta a fórmula da resistência |
| BME280: “Could not find a valid BME280 sensor” (sensor não encontrado) | Endereço errado (0x76/0x77) ou o chip é na verdade um BMP280 | Mude o endereço, leia o chip ID (0x60 / 0x58) |
| BME280 ou DHT: 1–3 °C acima | Autoaquecimento, ESP32 ou regulador por perto | Afaste o sensor da placa, leia com menos frequência, aplique um offset |
| MAX6675: nan | Termopar não ligado ou fio rompido | Confira os bornes com parafuso e a sonda |
| MAX6675: valor cai quando esquenta | Polaridade do termopar invertida | Troque os terminais + e − de lugar |
| MLX90614: metal brilhante parece muito frio | Emissividade baixa | Cole fita preta fosca ou ajuste a emissividade |
| MLX90614: objeto pequeno medido errado | Campo de visão maior que o objeto | Aproxime o sensor ou use uma versão de ângulo estreito |
Resumindo: um DHT22 ou BME280 para ambientes e clima, um DS18B20 para água e lugares frios, um LM35 ou NTC para aprender medição analógica e ter resposta rápida, um MAX6675 para altas temperaturas e um MLX90614 para superfícies que você não pode tocar são os pontos de partida certos. Se quiser conhecer outros tipos de sensor também, dê uma olhada no guia de sensores para Arduino. No app BlueGrays você encontra esquemas do circuito e código passo a passo para projetos como medição de temperatura e umidade com DHT11, termômetro com NTC e LCD, indicador de temperatura com ESP32, DHT22 e LCD, registrador de temperatura com ESP32 e irrigação inteligente.
Perguntas frequentes
Qual é o sensor de temperatura mais preciso para Arduino?
Entre os sensores hobby, as opções mais precisas perto da temperatura ambiente são o DS18B20, o DHT22, o BME280 (a 25 °C) e o MLX90614, todos com ±0,5 °C. O DS18B20 se destaca em medições com fio e à prova d'água; o DHT22 ou o BME280, quando você também precisa de umidade. Seja qual for a escolha, comparar o sensor uma vez com um termômetro confiável e corrigir o offset no código melhora bastante a precisão.
Devo comprar um DHT11 ou um DHT22?
Se você só quer acompanhar de forma aproximada a temperatura e a umidade de um cômodo, o DHT11 basta. Se precisa de uso externo, temperaturas abaixo de zero ou precisão de ±0,5 °C, compre um DHT22; ele mede de −40 a +80 °C e também dá umidade mais precisa. Os dois funcionam com a mesma biblioteca e o mesmo código; você só muda o tipo do sensor no sketch.
Como medir a temperatura da água com Arduino?
O melhor sensor para água é a sonda DS18B20 à prova d'água, com capa de aço inox. Você mergulha a sonda na água e liga o fio de dados a um pino digital do Arduino com um resistor de pull-up de 4,7 kΩ. O cabo e as emendas geralmente não são feitos para ficar muito tempo em água quente, então coloque só a ponta de aço na água.
O Arduino consegue medir temperaturas altas, como 500 °C?
Sim. Com um termopar tipo K e um módulo MAX6675 você mede de 0 a cerca de 1024 °C. A ponta do termopar vai dentro do forno, enquanto o módulo MAX6675 deve ficar longe do calor. Sempre confira até que temperatura a capa e o cabo da sonda que você comprou aguentam.
Dá para fazer um termômetro sem contato com Arduino?
Você pode montar um termômetro infravermelho sem contato ligado ao Arduino com um MLX90614; a versão padrão oferece precisão de ±0,5 °C perto da temperatura ambiente. Para temperatura corporal, é preciso a versão de precisão médica (±0,2 °C) e a distância de medição correta, e mesmo assim essa montagem não substitui um aparelho médico. Ao medir, garanta que a superfície-alvo preencha totalmente o campo de visão do sensor.
Por que meu sensor de temperatura marca acima do real?
O motivo mais comum é uma fonte de calor perto do sensor: um ESP32, um regulador de tensão ou luz do sol. Sensores como o BME280 também se aquecem um pouco quando medem continuamente. Afaste o sensor 10–15 cm da placa, leia com menos frequência e corrija no código a diferença constante que sobrar, comparando com um termômetro de confiança.
Projetos para montar depois desta leitura
Ver todos os projetos
Temperatura e umidade com DHT11
Qual é a temperatura do seu quarto? O ar está úmido ou seco? O sensor DHT11 mede a temperatura e a umidade, e o Arduino mostra os valores em um display LCD de duas linhas, atualizando a cada poucos se

Medição de temperatura com NTC e display LCD 2x16
Meça a temperatura ao seu redor com um sensor que parece uma pequena conta. Esse componente, chamado NTC, deixa a eletricidade passar com mais facilidade à medida que aquece; o Arduino lê essa mudança

Temperatura e umidade com ESP32 e DHT22 (com display LCD)
Este projeto mede a temperatura e a umidade do ambiente com um sensor DHT22 e exibe os dados em tempo real em um LCD I2C 16x2. Os dados são lidos do sensor pelo protocolo de um fio (one-wire) com a biblioteca Adafruit DHT. Este projeto serve de base para estações meteorológicas IoT, automação residencial ou sistemas de monitoramento ambiental em estufas. A comunicação com o DHT22 é feita pelo pino GPIO 4 do ESP32.

Registrador de temperatura com ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
Monte um registrador de temperatura com data e hora usando ESP32! Leia a temperatura e a umidade do DHT22 a cada minuto, obtenha a hora real do DS1307 RTC e grave os dados em CSV no cartão microSD. O OLED exibe a temperatura atual em letras grandes, a porcentagem de umidade, a data e a hora e o contador de registros. O arquivo /temp_log.csv no cartão SD pode ser aberto no Excel, Google Sheets ou pandas do Python para análise — ideal para monitorar estufas, acompanhar a temperatura de casa ou…

Relógio, calendário e estação meteorológica de matriz de pontos (MAX7219, DS1307)
Um painel com texto em rolagem para sua mesa ou parede que mostra, em sequência, a hora, a data e as condições do ambiente. No display LED 8x32, você vê primeiro a temperatura em Celsius e Fahrenheit,

Estação de irrigação inteligente
Um jardineiro que rega suas plantas sozinho para que elas não sequem enquanto você está de férias. Um sensor de umidade do solo mede o quanto a terra está úmida; quando ela seca, o Arduino aciona a bo

Uso do display LCD com I2C
Dê ao seu Arduino um display próprio e faça-o escrever sua primeira mensagem. O display LCD de duas linhas é conectado com poucos fios; primeiro aparece uma saudação na linha de cima, depois uma segun
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

