Tipos de sensores de temperatura para Arduino: comparativa
Tipos de sensores de temperatura para Arduino: DHT11, DHT22, DS18B20, LM35, NTC, BME280, MAX6675 y MLX90614 comparados por precisión, rango, cable y precio.
Elegir bien entre los distintos tipos de sensores de temperatura para Arduino importa más de lo que parece: un DHT11 y un DS18B20 en la misma habitación pueden diferir 2 °C, y es perfectamente posible derretir un sensor por intentar medir un horno a 300 °C con el modelo equivocado. En la electrónica de afición dominan ocho sensores de temperatura: DHT11, DHT22, DS18B20, LM35, el termistor NTC, BME280, MAX6675 (termopar tipo K) y MLX90614 (infrarrojo sin contacto). Cada uno tiene un rango de medida, una precisión, una forma de conexión y un precio diferentes. Cuál es el adecuado depende de lo que vayas a medir: ¿el aire de una habitación, agua, un horno o un motor girando que no puedes tocar?
En esta guía ponemos los ocho sensores lado a lado en dos grandes tablas: rango de medida, precisión, resolución, velocidad de lectura, interfaz, tensión de alimentación, longitud de cable y precio relativo. Después verás cómo funciona cada uno, sus puntos fuertes y débiles, las conexiones para Arduino Uno, ESP32 y Raspberry Pi Pico, código de ejemplo para el NTC, el MAX6675 y el MLX90614, un montaje de prueba que enfrenta a tres sensores entre sí y cuál elegir para cada proyecto. Para la mayoría de estos sensores también tenemos tutoriales detallados; encontrarás los enlaces en cada sección.





¿En qué fijarte al elegir un sensor de temperatura?
Antes de comparar sensores tienes que leer bien los términos de las hojas de datos. La pareja que más se confunde es precisión y resolución. La precisión indica lo cerca que está tu lectura de la temperatura real; la resolución es el paso más pequeño que el sensor puede distinguir. El BME280 da la temperatura en pasos de 0,01 °C, pero su precisión ronda ±1 °C; así que las dos últimas cifras de los 23,47 °C de tu pantalla sirven para seguir cambios pequeños, pero no te dicen la temperatura real con esa exactitud. Al elegir, fíjate en estos siete criterios:
- Rango de medida: El sensor debe cubrir con holgura la temperatura más baja y la más alta que quieras medir. El DHT11 no ve por debajo de cero; para una nevera necesitas un DS18B20 y para un horno, un termopar.
- Precisión: Para un termómetro de habitación vale ±2 °C, pero un acuario o una incubadora necesitan ±0,5 °C.
- Interfaz: Los sensores analógicos necesitan un pin del ADC; los digitales, uno o varios pines digitales y casi siempre una librería. Los pines libres de tu placa determinan cuántos sensores puedes conectar.
- Longitud del cable: Si el sensor va a estar a 5 metros de la placa, en el jardín o en el fondo de un depósito, los sensores analógicos e I2C sufren; 1-Wire y el protocolo de un solo hilo de los DHT aguantan mucho mejor las distancias largas.
- Tiempo de respuesta: Una sonda con funda de acero o un DHT con su carcasa de plástico tardan segundos o incluso minutos en reflejar un cambio brusco; un NTC pequeño y desnudo es mucho más rápido.
- Medidas adicionales: Si también necesitas la humedad, te sirve un DHT22 o un BME280; si además necesitas presión y altitud, el BME280 lo hace todo en un solo módulo.
- Tensión de alimentación: En el ESP32 y la Pico, que funcionan a 3,3 V, ten cuidado con sensores como el LM35, que necesitan al menos 4 V, y evita que llegue más de 3,3 V a la entrada del ADC.
Tabla comparativa de 8 sensores de temperatura
La primera tabla resume el rendimiento de medida y la segunda, la conexión y el coste. Los valores proceden de las hojas de datos; salvo que se indique lo contrario, la precisión es la de alrededor de la temperatura ambiente y empeora hacia los extremos del rango.
| Sensor | Rango de medida | Precisión | Resolución | Velocidad de lectura |
|---|---|---|---|---|
| DHT11 | 0 … +50 °C | ±2 °C | 1 °C | 1 por segundo |
| DHT22 (AM2302) | −40 … +80 °C | ±0,5 °C | 0,1 °C | 1 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, garantizada ±1,5 °C | 0,49 °C en el Uno (ref. 5 V), 0,11 °C (ref. 1,1 V) | Instantánea (velocidad del ADC) |
| NTC 10 kΩ, B 3950 | −40 … +125 °C (encapsulados en vidrio ≈ 300 °C) | A 25 °C: ±0,25 °C (1 %) … ±1 °C (5 %) | ≈ 0,1 °C a temperatura ambiente en el Uno | Instantánea (velocidad del ADC) |
| BME280 | −40 … +85 °C | ±0,5 °C (25 °C), ±1 °C (0 … 65 °C) | 0,01 °C | Decenas por segundo |
| MAX6675 + termopar tipo K | 0 … +1023,75 °C | Unos pocos °C (convertidor ≈ ±2 °C, unión fría hasta ±3 °C) | 0,25 °C | ≈ 4 por segundo (conversión de 0,22 s) |
| MLX90614 | Objeto −70 … +380 °C, ambiente −40 … +125 °C | ±0,5 °C (cerca de la temperatura ambiente) | 0,02 °C | Varias veces por segundo |
| Sensor | Interfaz | Alimentación | Longitud de cable | Medida adicional | Precio relativo |
|---|---|---|---|---|---|
| DHT11 | Digital de un hilo, 1 pin | 3–5,5 V | Hasta 20 m | Humedad | Muy bajo |
| DHT22 | Digital de un hilo, 1 pin | 3,3–6 V | Hasta 20 m | Humedad | Medio |
| DS18B20 | 1-Wire, muchos sensores en 1 pin | 3,0–5,5 V | Decenas de metros | Ninguna | Bajo |
| LM35 | Analógica, 1 pin del ADC | 4–30 V | Corta, ≈ 1 m (más larga requiere precauciones) | Ninguna | Bajo |
| NTC | Analógica, 1 pin del ADC con divisor | 3,3 o 5 V a través del divisor | Unos pocos metros | Ninguna | El más bajo |
| BME280 | I2C (2 pines) o SPI | Chip 1,71–3,6 V; módulo con regulador 5 V | Corta, menos de 50 cm | Humedad y presión | Medio |
| MAX6675 | SPI, 3 pines (solo lectura) | 3,0–5,5 V | El cable del termopar puede medir varios metros | Ninguna | Medio |
| MLX90614 | I2C (SMBus), 2 pines | Versión de 3 V o 5 V (el módulo puede llevar regulador) | Corta (I2C); mide sin contacto | Temperatura ambiente | Alto |
DHT11 y DHT22: temperatura y humedad a la vez
Dentro de la rejilla de plástico de un sensor DHT hay un elemento de humedad (resistivo en el DHT11, capacitivo en el DHT22), un termistor y un pequeño controlador que convierte las medidas en datos digitales. El sensor envía el resultado por una única línea de datos como un paquete de 40 bits: 16 bits de humedad, 16 bits de temperatura y 8 bits de suma de comprobación. Este protocolo no es 1-Wire sino uno propio del fabricante, por eso cada DHT necesita su propio pin. El DHT11 es barato y basta para la temperatura de una habitación, pero su rango de 0–50 °C y su error de ±2 °C lo dejan corto para exteriores y trabajos precisos. Con el mismo cableado, el DHT22 (AM2302) mide de −40 a +80 °C con ±0,5 °C de precisión y da la humedad entre el 0 y el 100 %; a cambio, solo puede hacer una lectura cada dos segundos. Ambos comparten un punto débil, la lentitud: muestran los cambios con retraso porque el aire de la rejilla tiene que equilibrarse antes con el entorno. Para el cableado, la instalación de la librería y el código, consulta Sensor de temperatura y humedad DHT11; el mismo código funciona con el DHT22 cambiando una sola palabra.
DS18B20: sumergible, resistente y muchos sensores en un pin

El DS18B20 mide la temperatura dentro del chip y la envía como un número digital con una resolución seleccionable de 9 a 12 bits. Mide de −55 a +125 °C, ofrece ±0,5 °C de precisión entre −10 y +85 °C y, gracias al protocolo 1-Wire, puedes conectar decenas de sensores a un único pin de datos; cada uno tiene una dirección única de 64 bits grabada de fábrica. Su versión de sonda sumergible con funda de acero inoxidable no tiene rival para acuarios, depósitos de agua, tuberías de calefacción, tierra y congeladores. Su único requisito es una resistencia pull-up de 4,7 kΩ entre la línea de datos y la alimentación; sin ella, la librería devuelve −127 °C. En modo de 12 bits una conversión tarda 750 ms, así que quizá tengas que bajar la resolución para seguir una temperatura que cambia rápido. El código para varios sensores y la lectura sin bloqueo en el ESP32 están en Sensor de temperatura DS18B20.
LM35: el sensor analógico más sencillo, sin librería
El LM35 convierte la temperatura directamente en tensión: su salida sube 10 mV por grado y da 250 mV a 25 °C. No necesita librería; obtienes el resultado con la fórmula temperatura = analogRead × 5,0 / 1024 × 100. Esa sencillez lo convierte en un primer paso perfecto para aprender el ADC. Sus puntos débiles vienen del mismo sitio: con referencia de 5 V, el ADC de 10 bits del Arduino Uno solo da pasos de unos 0,49 °C, cualquier desviación de los 5 V del USB pasa directamente a la temperatura y, cuanto más largo es el cable, más ruido capta la salida. La mayoría de los LM35 del mercado son LM35DZ, garantizados solo para 0–100 °C. Además necesita al menos 4 V, así que en el ESP32 y la Pico debe alimentarse desde el pin de 5 V. En placas de 3,3 V, una opción analógica más práctica es el TMP36: funciona con 2,7–5,5 V, mide de −40 a +125 °C y también da 10 mV/°C, pero como entrega 500 mV a 0 °C la fórmula pasa a ser temperatura = (V − 0,5) × 100. Su precisión típica es de ±1 °C a 25 °C y ±2 °C en todo el rango. Explicamos paso a paso cómo reducir el paso a 0,11 °C con la referencia interna de 1,1 V en Sensor de temperatura LM35, y cómo funciona el ADC en conversión analógico-digital.
Termistor NTC: el sensor más barato y más rápido
Un termistor NTC (Negative Temperature Coefficient, coeficiente de temperatura negativo) es una resistencia cuyo valor baja cuando sube la temperatura. El más habitual en proyectos de afición es el de 10 kΩ a 25 °C con un coeficiente B de 3950 K. Como Arduino no puede medir resistencias directamente, el NTC se conecta formando un divisor de tensión con una resistencia fija y la tensión del punto medio se lee en un pin analógico. Este circuito tiene una ventaja interesante: cuando el divisor se alimenta de los mismos 5 V que sirven de referencia al ADC, la medida es ratiométrica; el resultado no cambia aunque la alimentación sea de 4,8 o 5,1 V. Puedes calcular las tensiones del divisor fácilmente con la calculadora de divisor de tensión.
La resistencia de un NTC cambia con la temperatura de forma exponencial, no lineal, así que no basta con un solo factor como en el LM35. En la práctica se usa la ecuación Beta: 1/T = 1/T0 + (1/B) × ln(R/R0). Aquí T es la temperatura en kelvin, T0 = 298,15 K (25 °C), R0 = 10 kΩ y B = 3950. A temperatura ambiente la sensibilidad es muy alta: según la fórmula B/T², la resistencia cambia alrededor de un 4,4 % por grado. Por eso un NTC con tolerancia del 1 % solo se equivoca unos ±0,25 °C a 25 °C; hacia los extremos del rango, sin embargo, entra en juego la tolerancia del coeficiente B y el error crece. Para más precisión en un rango amplio se usa la ecuación de Steinhart-Hart con tres puntos; tienes los detalles en 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}En este circuito la resistencia fija de 10 kΩ va entre 5V y A1, y el NTC entre A1 y GND. Al subir la temperatura, baja la resistencia del NTC y con ella la tensión en A1. El código calcula primero la resistencia del NTC a partir del valor bruto, después la temperatura en kelvin con la ecuación Beta, y la pasa a grados Celsius; la media de 16 lecturas reduce el ruido del ADC a la cuarta parte. A temperatura ambiente, un paso del ADC del Uno equivale a unos 0,09 °C, es decir, una resolución cinco veces mejor que la del LM35 con referencia de 5 V. En los módulos NTC ya montados (por ejemplo, el KY-013) el lado en el que está la resistencia fija cambia de una placa a otra; si la lectura baja al tocar el NTC con algo caliente, invierte la fórmula de la resistencia: r = R_FIXED × (1023 − adc) / adc.
BME280: temperatura, humedad y presión en un solo módulo
El BME280 de Bosch mide temperatura, humedad relativa y presión atmosférica en un chip de solo 2,5 × 2,5 mm y se comunica por I2C (dirección 0x76 o 0x77) o SPI. En temperatura ofrece una resolución de 0,01 °C y una precisión de ±0,5 °C a 25 °C y de ±1 °C entre 0 y 65 °C; puede hacer decenas de lecturas por segundo y en reposo consume muy por debajo de 1 µA. Por eso es ideal para estaciones meteorológicas a pilas. El propio chip no admite más de 3,6 V: los módulos morados de 6 pines suelen ser solo de 3,3 V, mientras que los de 4 pines con regulador pueden conectarse a 5 V. Cuando mide de forma continua, el chip se calienta un poco y puede marcar unas décimas de grado de más; para medir el tiempo atmosférico basta el modo forzado con unas pocas lecturas por minuto. Explicamos cómo funciona el bus I2C en ¿Qué es I2C?.
MAX6675 y termopar tipo K: hasta 1000 °C
Un termopar está formado por dos hilos de metales distintos soldados por un extremo. La diferencia de temperatura entre la soldadura (unión caliente) y el punto donde los hilos se conectan al aparato (unión fría) genera una tensión diminuta en los hilos; en un termopar tipo K es de unos 41 µV por grado. El ADC de Arduino no puede leer una tensión tan pequeña y, además, hay que conocer la temperatura de la unión fría. El MAX6675 hace las dos cosas: amplifica la tensión del termopar, aplica la compensación de unión fría midiendo su propia temperatura y entrega el resultado por SPI con 12 bits y 0,25 °C de resolución. Su rango va de 0 a +1023,75 °C, así que es la única opción de esta lista para lugares donde los demás sensores no sobreviven, como un soldador, un horno de pizza, una barbacoa, un horno de cerámica o un escape.
Conoce también los límites del MAX6675: no mide por debajo de 0 °C; el error propio del convertidor es de unos ±2 °C entre 0 y 700 °C, y a eso se suman hasta ±3 °C de error de la compensación de unión fría y la tolerancia del hilo del termopar. Así que espera una precisión global de unos pocos grados; en un horno a 800 °C esa diferencia no importa. Una conversión tarda 0,17–0,22 segundos, por lo que hay que esperar al menos 250 ms entre dos lecturas. Si también necesitas temperaturas negativas, el MAX31855, más moderno (−200 a +1350 °C, 14 bits), es mejor opción. Cómo funciona el bus SPI lo tienes en ¿Qué es SPI?. Instala la librería MAX6675 library de Adafruit desde el Gestor de librerías del Arduino IDE y carga este código:
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: medir la temperatura sin contacto
El MLX90614 es un sensor de temperatura sin contacto que detecta con una termopila la radiación infrarroja que emiten los objetos. Da dos valores a la vez: la temperatura ambiente, que es la de su propio cuerpo (−40 a +125 °C), y la temperatura del objeto, la de la superficie a la que apunta (−70 a +380 °C). Cerca de la temperatura ambiente ofrece ±0,5 °C de precisión y 0,02 °C de resolución; viene calibrado de fábrica, se comunica por I2C (SMBus) en la dirección 0x5A y la velocidad del bus no debe superar los 100 kHz. Es ideal para medir sin tocarlos un motor que gira, un rodamiento, un chip caliente en una placa o una sartén al fuego.
La medida sin contacto tiene dos trucos. El primero es el campo de visión: el sensor mide la media de todo lo que entra en su cono de visión. La versión más común, el MLX90614ESF-BAA, tiene un campo de visión de 90°; eso significa que a 5 cm promedia una zona de unos 10 cm de diámetro. Para medir un objeto pequeño, acerca el sensor o elige una versión de ángulo estrecho como la de 35° (BCC) o 5° (BCI). El segundo es la emisividad: de fábrica, el sensor está ajustado a 1,0. Para pintura mate, plástico, madera, piel y agua este coeficiente está entre 0,9 y 0,98, así que el resultado es casi correcto; las superficies metálicas brillantes, en cambio, emiten muy poca radiación y parecen mucho más frías de lo que están. Pegarles un trozo de cinta negra mate es una solución sencilla y eficaz. Instala la librería Adafruit MLX90614 desde el Gestor de librerías y prueba 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}Resumen de conexiones: Arduino Uno, ESP32 y Raspberry Pi Pico
| Sensor y pin | 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 (alimentación 5 V) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| NTC: punto medio del divisor | A1 (divisor desde 5V) | GPIO 35 (ADC1, divisor desde 3V3) | GP27 (ADC1, divisor desde 3V3) |
| BME280: SDA / SCL | A4 / A5 | GPIO 21 / 22 | GP4 / GP5 |
| MLX90614: SDA / SCL | A4 / A5 (mismo bus I2C) | GPIO 21 / 22 | GP4 / GP5 |
| MAX6675: SO / CS / SCK | D4 / D5 / D6 | GPIO 19 / 23 / 18 | GP16 / GP17 / GP18 |
| Alimentación (VCC) | 5V (3.3V para el BME280 de 6 pines) | 3V3 (5V/VIN para el LM35) | 3V3(OUT) (VBUS para el LM35) |
El ESP32 y la Pico funcionan a 3,3 V; si alimentas el divisor del NTC desde 3V3, no puede llegar una tensión peligrosa a la entrada del ADC. En el ESP32, conecta los sensores analógicos solo a pines del ADC1 (GPIO 32–39), porque los del ADC2 no funcionan con el Wi-Fi activado; en cambio, para líneas de datos bidireccionales como las del DHT y el DS18B20, evita los GPIO 34–39, que son solo de entrada. El BME280 (0x76) y el MLX90614 (0x5A) tienen direcciones distintas, así que pueden compartir sin problema los mismos dos cables I2C. Tienes todos los pines de tu placa en la herramienta Pinout y el código de colores de las resistencias pull-up en la calculadora de código de colores.
Prueba comparativa con el ESP32: tres sensores en el mismo sitio
La mejor forma de ver las diferencias entre sensores es con tus propios ojos. El siguiente código para ESP32 lee a la vez un DS18B20, un DHT22 y un BME280 y muestra los resultados como tres líneas separadas en el Serial Plotter del Arduino IDE. Coloca los sensores uno junto a otro en la protoboard, al menos a 10 cm del ESP32; el ESP32 se calienta al funcionar y afecta a cualquier sensor que tenga al lado. El código necesita las librerías OneWire, DallasTemperature, DHT sensor library y 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}Primero espera unos minutos y observa cuánto se separan las líneas: diferencias de 0,5–1 °C están dentro de los límites de precisión de estos sensores. Después pon un vaso de agua tibia a su lado o sopla suavemente sobre los tres. El DS18B20 y el BME280 reaccionan en pocos segundos, mientras que la línea del DHT22 se queda claramente atrás por su rejilla de plástico. Si el BME280 se mantiene siempre unas décimas por encima de los demás, es el autocalentamiento del chip. Este pequeño experimento te muestra diferencias que no aparecen en ninguna hoja de datos. Para registrar medidas durante mucho tiempo puedes usar un módulo de tarjeta SD o enviar los datos a Google Sheets.
Medir la temperatura con la Raspberry Pi Pico y MicroPython
El firmware MicroPython de la Pico incluye de serie los módulos dht, onewire y ds18x20, así que no tienes que copiar archivos extra a la Pico para el DHT y el DS18B20. Además, el chip RP2040 tiene un sensor de temperatura interno conectado al canal 4 del ADC. El siguiente código lee los tres 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)El sensor interno mide la temperatura del chip, no la de la habitación, y pequeñas desviaciones en la referencia del ADC pueden desplazar el resultado varios grados. Por eso no sirve para medir el ambiente, pero sí para vigilar si la placa se está sobrecalentando. No olvides la pull-up de 4,7 kΩ en la línea de datos del DS18B20; las pull-up internas de la Pico se quedan cortas para 1-Wire. Si acabas de conocer la Pico, empieza por ¿Qué es la Raspberry Pi Pico?.
¿Qué sensor de temperatura elegir para cada proyecto?
| Proyecto o necesidad | Sensor recomendado | ¿Por qué? |
|---|---|---|
| Primer proyecto, termómetro de habitación | DHT11 | El más barato, también da la humedad; ±2 °C basta para una habitación |
| Estación meteorológica interior y exterior | BME280 o DHT22 | Baja hasta −40 °C y da la humedad; el BME280 mide además presión y altitud |
| Acuario, depósito de agua, agua de caldera | Sonda sumergible DS18B20 | Funda inoxidable, ±0,5 °C, cable largo |
| Nevera y congelador | DS18B20 | Mide hasta −55 °C; el DHT11 no ve por debajo de cero |
| Medir muchos puntos (habitaciones, invernadero, tuberías) | DS18B20 | Decenas de sensores en un pin, cada uno con su dirección |
| Incubadora de huevos | DHT22 o BME280 | ±0,5 °C en torno a 37,5 °C y control de humedad a la vez |
| Horno, barbacoa, soldador | MAX6675 + termopar tipo K | Aguanta hasta 1000 °C |
| Hotend de impresora 3D, pack de baterías | Termistor NTC | Pequeño, barato y rápido; las impresoras 3D usan NTC de 100 kΩ encapsulados en vidrio |
| Motor, rodamiento, placa de circuito, pieza móvil | MLX90614 | Mide sin contacto |
| Aprender el ADC y la medida analógica | LM35 o NTC | Sin librería, funciona con una fórmula |
Ideas de proyectos con sensores de temperatura
- Invernadero inteligente: Mide la temperatura y la humedad del aire con un DHT22 y la temperatura de la tierra con una sonda DS18B20; controla el ventilador y el riego con un módulo de relé. Para el proyecto completo, consulta el proyecto de invernadero inteligente.
- Calentador de acuario con termostato: Mantén el agua entre 25 y 26 °C con un DS18B20 sumergible; usa una histéresis de 0,5 °C para que el relé no se active y desactive con cada pequeño cambio.
- Estación meteorológica a pilas: Combina un BME280 con el modo deep sleep del ESP32 y mide cada diez minutos para que el sistema funcione meses con pilas.
- Termómetro para horno de pizza o barbacoa: Muestra la temperatura del horno con números grandes en una pantalla OLED usando un MAX6675 y una sonda tipo K.
- Alarma de temperatura de motor sin contacto: Vigila con un MLX90614 la temperatura superficial de un motor o de la cama de una impresora 3D y haz sonar un zumbador al superar un umbral.
- Domótica: Envía la temperatura de cada habitación a Home Assistant por MQTT con un ESP32 y controla la calefacción en función de ella.
- Vigilante del congelador: Con un DS18B20, lanza una alarma si el interior del congelador sube por encima de −12 °C y muestra el valor en una pantalla LCD I2C.
Errores frecuentes y cómo solucionarlos
| Síntoma | Causa probable | Solución |
|---|---|---|
| DHT: nan o "Failed to read from DHT sensor!" | Tipo equivocado en el código (DHT11/DHT22), sin pull-up o lecturas demasiado seguidas | Corrige el tipo, añade una pull-up de 10 kΩ, espera 2 segundos entre lecturas |
| DS18B20: −127 °C | Sensor no encontrado: sin pull-up, cable defectuoso o pin equivocado | Pon 4,7 kΩ entre DQ y VCC, revisa las conexiones |
| DS18B20: siempre 85 °C | Leído antes de terminar la conversión o alimentación insuficiente | Espera el tiempo de conversión, alimenta VDD directamente |
| LM35: valor anormalmente alto, el sensor se calienta | Patas de alimentación invertidas | Corta la alimentación de inmediato y corrige el orden de las patas |
| LM35 o NTC: el valor no deja de saltar | Ruido del ADC, cable largo, alimentación USB inestable | Promedia lecturas, añade un condensador de 0,1 µF, acorta el cable |
| NTC: la temperatura baja al calentarse | La orientación del divisor no coincide con el código | Invierte la fórmula de la resistencia |
| BME280: "Could not find a valid BME280 sensor" | Dirección equivocada (0x76/0x77) o el chip es en realidad un BMP280 | Cambia la dirección, lee el chip ID (0x60 / 0x58) |
| BME280 o DHT: 1–3 °C de más | Autocalentamiento, ESP32 o regulador cercanos | Aleja el sensor de la placa, mide con menos frecuencia, aplica un offset |
| MAX6675: nan | Termopar sin conectar o hilo roto | Revisa los bornes y la sonda |
| MAX6675: el valor baja al calentarse | Polaridad del termopar invertida | Intercambia los cables + y − |
| MLX90614: el metal brillante parece muy frío | Emisividad baja | Pega cinta negra mate o ajusta la emisividad |
| MLX90614: un objeto pequeño se mide mal | El campo de visión es mayor que el objeto | Acerca el sensor o usa una versión de ángulo estrecho |
En resumen: un DHT22 o un BME280 para habitaciones y meteorología, un DS18B20 para agua y frío, un LM35 o un NTC para aprender la medida analógica y lograr una respuesta rápida, un MAX6675 para altas temperaturas y un MLX90614 para superficies que no puedes tocar son los puntos de partida adecuados. Si quieres conocer también otros tipos de sensores, echa un vistazo a la guía de sensores para Arduino. En la app BlueGrays encontrarás proyectos como la medida de temperatura y humedad con el DHT11, un termómetro con NTC y LCD, un indicador de temperatura con ESP32, DHT22 y LCD, un registrador de temperatura con ESP32 y un riego inteligente, con esquema de circuito y código paso a paso.
Preguntas frecuentes
¿Cuál es el sensor de temperatura más preciso para Arduino?
Entre los sensores de afición, los más precisos cerca de la temperatura ambiente son el DS18B20, el DHT22, el BME280 (a 25 °C) y el MLX90614, todos con ±0,5 °C. El DS18B20 destaca para medidas con cable y sumergibles, y el DHT22 o el BME280 cuando también necesitas la humedad. Elijas el que elijas, compararlo una vez con un termómetro fiable y corregir el desfase en el código mejora mucho la precisión.
¿DHT11 o DHT22: cuál me compro?
Si solo quieres vigilar de forma aproximada la temperatura y la humedad de una habitación, el DHT11 es suficiente. Si necesitas medir en exteriores, bajo cero o con ±0,5 °C de precisión, compra el DHT22; mide de −40 a +80 °C y también da una humedad más precisa. Los dos funcionan con la misma librería y el mismo código; solo cambias el tipo de sensor en el sketch.
¿Cómo mido la temperatura del agua con Arduino?
El mejor sensor para agua es la sonda DS18B20 sumergible con funda de acero inoxidable. Metes la sonda en el agua y conectas el hilo de datos a un pin digital del Arduino con una resistencia pull-up de 4,7 kΩ. El cable y sus empalmes no suelen estar pensados para pasar mucho tiempo en agua caliente, así que sumerge solo la punta de acero.
¿Se pueden medir temperaturas altas como 500 °C con Arduino?
Sí. Con un termopar tipo K y un módulo MAX6675 puedes medir de 0 a unos 1024 °C. La punta del termopar va dentro del horno, mientras que el módulo MAX6675 debe quedarse lejos del calor. Comprueba siempre hasta qué temperatura aguantan la funda y el cable de la sonda que has comprado.
¿Se puede hacer un termómetro sin contacto con Arduino?
Con un MLX90614 puedes construir un termómetro infrarrojo sin contacto conectado a Arduino; la versión estándar ofrece ±0,5 °C de precisión cerca de la temperatura ambiente. Para la temperatura corporal hace falta la versión de precisión médica (±0,2 °C) y la distancia de medida correcta, y aun así este montaje no sustituye a un dispositivo médico. Al medir, asegúrate de que la superficie llene por completo el campo de visión del sensor.
¿Por qué mi sensor de temperatura marca más de la cuenta?
La causa más habitual son fuentes de calor cerca del sensor: un ESP32, un regulador de tensión o la luz del sol. Sensores como el BME280 también se calientan un poco a sí mismos cuando miden de forma continua. Aleja el sensor 10–15 cm de la placa, mide con menos frecuencia y corrige en el código la diferencia constante que quede tras compararlo con un termómetro de confianza.
Proyectos para hacer después de leer esto
Ver todos los proyectos
Temperatura y humedad con DHT11
¿Qué temperatura hace en tu habitación, y el aire está húmedo o seco? El sensor DHT11 mide la temperatura y la humedad, y el Arduino escribe los valores en una pantalla LCD de dos líneas, actualizándo

Medición de temperatura con NTC y pantalla LCD 2x16
Mide la temperatura del ambiente con un sensor que parece una pequeña cuenta. Esta pieza, llamada NTC, deja pasar la electricidad con más facilidad cuanto más se calienta; el Arduino lee ese cambio, l

ESP32 DHT22 Temperatura y humedad (con pantalla LCD)
Se trata de un proyecto que mide la temperatura y la humedad ambientales mediante el sensor DHT22 y las muestra en tiempo real en una pantalla LCD I2C 16x2. Los datos del sensor se leen mediante el protocolo de un solo cable (one-wire) utilizando la biblioteca DHT de Adafruit. Este proyecto constituye la base para estaciones meteorológicas IoT, sistemas de automatización doméstica inteligente o sistemas de monitorización ambiental en invernaderos.

Registrador de Temperatura ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
¡Construye un registrador de temperatura con marca de tiempo con ESP32! Lee temperatura/humedad del DHT22 cada minuto, obtén la hora real del DS1307 RTC y registra en tarjeta microSD como CSV. El OLED muestra en vivo la temperatura (fuente grande), porcentaje de humedad, marca de tiempo y contador de registros. El archivo /temp_log.csv en la tarjeta SD se abre en Excel, Google Sheets o Python pandas para análisis — perfecto para monitoreo de invernadero, seguimiento de temperatura del hog

Reloj matricial, calendario y estación meteorológica (MAX7219, DS1307)
Un panel de texto en movimiento para tu mesa o tu pared que muestra por turnos la hora, la fecha y el clima de la habitación. En la pantalla LED de 8x32 aparece primero la temperatura en grados Celsiu

Estación de riego inteligente
Un jardinero que riega solo tus plantas para que no se sequen mientras estás de vacaciones. Un sensor de humedad mide lo mojada que está la tierra; cuando se seca, el Arduino enciende la bomba de agua

Uso de la pantalla LCD con I2C
Dale a tu Arduino su propia pantalla y haz que escriba su primer mensaje. La pantalla LCD de dos líneas se conecta con solo unos pocos cables; primero aparece un saludo en la línea de arriba, luego un
Más artículos
App BlueGrays
Monta este circuito paso a paso en tu teléfono
Esquema, código y lista de piezas en una sola pantalla. Más de 200 proyectos de Arduino, ESP32 y Pico listos para montar.
Escanea con tu teléfono
Apunta la cámara al código y se abrirá la tienda de apps de tu teléfono.
o ábrela en la tienda

