KY-001 DS18B20 con Arduino: guía y proyecto | Electricneill

KY-001 DS18B20 con Arduino: guía y proyecto | Electricneill

Serie Aprende Electrónica · Módulo 01 · KY-001

El termómetro que habla en binario

Teoría, conexión y un proyecto completo con el KY-001 (DS18B20): cómo entrega la temperatura ya convertida en número por un solo cable, cómo saber si tu placa trae la pull-up y cómo armar un termómetro con alarma que no parpadea. Todo con simuladores que puedes tocar.

  • Nivel inicial → medio
  • 3,0 a 5,5 V
  • Salida digital 1-Wire
  • 9 simuladores
¡Envíos sobre $5.000! Escríbenos y te damos cupones de descuento hasta agotar stock. Despacho desde San Felipe a todo Chile. Pedir cupón por WhatsApp
Lectura≈ 35 min + práctica
RequisitosArduino UNO, protoboard
Interactivo9 simuladores y animaciones

Las etiquetas del artículo te dicen de dónde sale cada número, igual que en el ebook: Dato documentado hoja de datos del DS18B20 · Verifica en tu módulo cambia según el fabricante · Hipótesis didáctica valor supuesto para el ejemplo · Resultado calculado obtenido con la fórmula indicada.

Parte A · 1Qué es el DS18B20

El KY-001 es una placa pequeña que lleva un DS18B20, un termómetro digital diseñado por Dallas Semiconductor (después Maxim Integrated, hoy parte de Analog Devices). Por fuera parece un transistor de tres patas en encapsulado TO-92. Por dentro tiene un sensor de temperatura, un convertidor analógico-digital, memoria y la lógica para comunicarse.

Esa es la gran diferencia con un sensor analógico: el DS18B20 mide, convierte y entrega la temperatura como un número binario. El Arduino no lee un voltaje; recibe el dato listo por un solo cable, con un protocolo llamado 1-Wire.

Simulador 1 · Analógico vs. digitalKY-013 vs KY-001

Mueve la temperatura y mira qué recibe el Arduino en cada caso. El termistor entrega un voltaje que tu programa debe convertir; el DS18B20 entrega el número ya hecho.

KY-013 · termistor → A0

2,50 V
analogRead(A0) = 512

Luego tu código aplica la ecuación de Steinhart-Hart. La exactitud depende de las resistencias y del ADC del Arduino. Curva NTC 10 kΩ, β = 3950 Hipótesis

KY-001 · DS18B20 → D2

0190h
getTempCByIndex(0) = 25.00

Sin cálculos en tu programa: la librería entrega °C. ±0,5 °C entre −10 y +85 °C Dato documentado

KY-013 · termistor KY-001 · DS18B20
Qué entrega Un voltaje que cambia con la temperatura Un número binario con la temperatura
Pin del Arduino Entrada analógica (A0–A5) Cualquier pin digital
Cálculo en el programa Ecuación del termistor (Steinhart-Hart) Ninguno: la librería entrega °C
Varios sensores Un pin analógico por sensor Muchos sensores en un mismo pin
Exactitud Depende de las resistencias y del ADC ±0,5 °C entre −10 y +85 °C Dato documentado

Para recordar

Un sensor analógico entrega una magnitud eléctrica que hay que medir e interpretar. Un sensor digital como el DS18B20 hace ese trabajo adentro y entrega el resultado: tu programa solo lo pide y lo lee.

Dónde se usa: termostatos, salas de servidores, invernaderos, acuarios (con la versión en sonda de acero), control de procesos y registro de temperatura en varios puntos de un edificio, aprovechando que muchos sensores comparten un mismo cable.

Parte A · 2Ficha técnica verificada

Los valores del chip vienen de la hoja de datos oficial del DS18B20 (Maxim Integrated, documento 19-7487, rev. 6, julio de 2019). Los del módulo dependen del fabricante: compruébalos en tu placa.

Parámetro Valor Fuente
Chip y encapsulado DS18B20 · TO-92 de 3 patas Documentado
Tensión de alimentación 3,0 a 5,5 V Documentado
Rango de medición −55 a +125 °C (−67 a +257 °F) Documentado
Exactitud ±0,5 °C entre −10 y +85 °C · ±1 °C entre −30 y +100 °C · ±2 °C en todo el rango Documentado
Resolución 9 a 12 bits (0,5 a 0,0625 °C); al encender usa 12 bits Documentado
Tiempo de conversión Hasta 750 ms a 12 bits Documentado
Comunicación 1-Wire: un pin de datos (DQ) más GND Documentado
Dirección Código único de 64 bits grabado de fábrica Documentado
Corriente al medir 1 mA típico · 1,5 mA máximo (a 5 V) Documentado
Pull-up del bus 4,7 kΩ entre DQ y la alimentación Documentado
Alarma interna Límites TH y TL en memoria no volátil Documentado
Tamaño del módulo ≈ 18 × 15 mm Verifica
Resistencia R1 de la placa 331 (330 Ω) o 472 (4,7 kΩ), según la versión Verifica
Orden de los pines Guíate por los rótulos «S» y «−» impresos Verifica

¿Mito o dato? Toca cada tarjeta

Al revisar guías y fichas de este módulo encontramos errores que se repiten mucho.

Parte A · 3Pines y resistencia pull-up

Simulador 2 · Explora la placatoca un pin
DS18B20 331 R1 S − S → D2 +V → 5V − → GND módulo ≈ 18 × 15 mm · vista superior (dibujo propio)
Toca un pin de la placa o un botón para ver su función. El pin central no tiene rótulo: es la alimentación.
Simulador 3 · ¿Tu placa trae la pull-up?multímetro virtual

El bus 1-Wire necesita unos 4,7 kΩ entre la línea de datos y la alimentación. Hay KY-001 que la traen y otros que no. Elige lo que dice R1 en tu placa y mide entre S y el pin central (con el módulo desconectado).

R1 dice:
0.000 Ω
El multímetro está listo. Presiona «Medir».

Código 331 = 33 × 10¹ = 330 Ω (resistencia del LED). Código 472 = 47 × 10² = 4.700 Ω. Verifica en tu módulo

Lo que necesitas para la conexión simpleVer todos los sensores de temperatura →

Parte A · 4Cómo funciona el bus 1-Wire

En 1-Wire un solo cable lleva los datos en ambos sentidos. Ni el Arduino ni el sensor ponen 5 V en la línea: solo pueden tirarla a 0 V. Cuando nadie la tira, la resistencia pull-up la devuelve a nivel alto. Por eso esa resistencia es obligatoria: sin ella la línea queda flotando y la lectura falla.

Simulador 4 · Una lectura, paso a pasoseñal en el cable DQ

Recorre los cinco pasos de una lectura. La línea naranja es cuando el Arduino tira la línea a 0 V; la verde, cuando la tira el sensor. Los tiempos están estilizados para que se vean.

Simulador 5 · Muchos sensores, un solo pindirecciones de 64 bits

Cada DS18B20 sale de fábrica con un código único: 8 bits de familia (28h), 48 bits de número de serie y 8 bits de verificación (CRC) Dato documentado. Agrega sensores al bus y prueba qué pasa si quitas la pull-up.

Monitor Serie · 9600 baudiossensores.begin()
Míralo en video: «DS18B20 Sensor temperatura ideal para Arduino» · Cambatronics Online · 10:01 · en español. Presenta el sensor y su comunicación de un solo cable.

Modo parásito

El DS18B20 también puede alimentarse desde la línea de datos usando solo DQ y GND. En este artículo usamos siempre alimentación normal por el pin central: es más simple y confiable.

Parte A · 5Del dato binario a los grados

El sensor entrega la temperatura en 16 bits, en complemento a dos. A 12 bits de resolución, cada unidad vale 0,0625 °C. La librería hace esta conversión, pero entenderla te ayuda a leer la hoja de datos.

Simulador 6 · Conversor binario ⇄ °Cregistro de temperatura
signo (5 bits)parte entera (7 bits)fracción (4 bits)
Dato en hexadecimal
0191h
Cálculo

Ejemplo resuelto A.1 · positiva

Dato leído: 0191h Documentado (tabla 1 de la hoja de datos).
0191h = 1·256 + 9·16 + 1 = 401
401 × 0,0625 = 25,0625 °C Calculado

Ejemplo resuelto A.2 · negativa

Dato leído: FF5Eh Documentado. El bit más alto es 1: es negativo.
FF5Eh = 65.374 → 65.374 − 65.536 = −162
−162 × 0,0625 = −10,125 °C Calculado

Simulador 7 · Resolución vs. velocidadsetResolution()

Más bits = más detalle, pero cada lectura demora más. Elige la resolución y mira la barra de conversión.

Paso · tiempo máx.
0,0625 °C
750 ms por lectura
Lecturas por segundo
1,3
Lectura actual: 25,0625 °C

Tiempos de la hoja de datos Documentado; lecturas por segundo = 1 ÷ tiempo Calculado. Para un termómetro de sala, 12 bits es suficiente.

Compatibilidad

  • Arduino UNO, Nano, Mega: alimenta con 5 V.
  • ESP32 y ESP8266: alimenta con 3,3 V para que la línea y la pull-up queden a 3,3 V.
  • Raspberry Pi: 3,3 V y GPIO4, activando 1-Wire.

Hipótesis y dominio de validez

±0,5 °C es la exactitud del chip. La lectura es la temperatura de su encapsulado: tarda en seguir cambios rápidos y la afectan el LED cercano, tu mano o el sol. Para líquidos usa la versión en sonda de acero.

Parte BConexión simple y código

Tres cables y un programa corto para leer la temperatura en el computador. Alimentación: 5 V por el cable USB.

Pin del KY-001 Arduino UNO Color del cable
S D2 ■ Azul · señal digital
Centro (+V) 5V ■ Rojo · 5 V
− GND ■ Negro · GND
Resistencia 4,7 kΩ (si R1 no dice 472) Entre S y el pin central —
Simulador 8 · Conéctalo túprueba antes de armar

Elige a dónde va cada pin y presiona «Probar». El simulador te dice qué mostraría el Monitor Serie y, si algo está mal, qué revisar.




Configura los tres cables y prueba.

Instala las librerías

  1. Abre el IDE de Arduino 2 y entra a Herramientas → Administrar bibliotecas (Ctrl + Mayús + I).
  2. Busca OneWire e instala la de Paul Stoffregen.
  3. Busca DallasTemperature e instala la de Miles Burton.
  4. Selecciona Herramientas → Placa → Arduino UNO y el puerto COM correspondiente.
// KY-001 · Conexión simple: leer la temperatura en el Monitor Serie
// Electricneill Chile SpA · Ebook KY-001 · Placa: Arduino UNO
// Librerías: OneWire (Paul Stoffregen) y DallasTemperature (Miles Burton)

#include <OneWire.h>
#include <DallasTemperature.h>

const byte PIN_SENSOR = 2;             // S del KY-001 va al pin digital 2

OneWire bus(PIN_SENSOR);               // crea el bus 1-Wire en el pin 2
DallasTemperature sensores(&bus);      // la librería usa ese bus

void setup() {
  Serial.begin(9600);
  sensores.begin();                    // busca sensores en el bus
  Serial.print("Sensores encontrados: ");
  Serial.println(sensores.getDeviceCount());
}

void loop() {
  sensores.requestTemperatures();          // ordena medir (espera hasta 750 ms)
  float t = sensores.getTempCByIndex(0);  // lee el primer sensor del bus

  if (t == DEVICE_DISCONNECTED_C) {       // la librería devuelve -127
    Serial.println("Error: sensor no detectado");
  } else {
    Serial.print("Temperatura: ");
    Serial.print(t, 2);                     // 2 decimales
    Serial.println(" °C");
  }
  delay(1000);                             // una lectura por segundo
}

Compilado para Arduino UNO con OneWire 2.3.8 y DallasTemperature 4.0.6: usa 7.490 bytes de memoria de programa (22,9 %).

Míralo en video: «¿Cómo programar el DS18B20 con Arduino?» · David Portilla · 13:29 · en español. Mismo montaje y misma librería DallasTemperature que esta parte.
Líneas Qué hace
5–6 Incluye las dos librerías: OneWire maneja el bus y DallasTemperature habla con el sensor.
8 Guarda el pin de la señal en una constante. Si cambias el cable de pin, cambias solo esta línea.
10–11 Crea el bus en el pin 2 y le dice a la librería que use ese bus.
14–17 Inicia el Monitor Serie, busca sensores y muestra cuántos encontró (debe decir 1).
21–22 Ordena medir y lee el primer sensor del bus (índice 0) en grados Celsius.
24–30 Si la librería devuelve −127, avisa la falla; si no, muestra la temperatura con 2 decimales.
31 Espera un segundo antes de la siguiente lectura.

Parte BMonitor Serie y diagnóstico

Simulador 9 · Monitor Serie virtualel código de arriba, corriendo

Mantén presionado «Tomar con los dedos» y mira cómo sube la lectura de a poco: el encapsulado necesita tiempo para calentarse. Después provoca las fallas típicas.

COM3 · 9600 baudios● RX

Gráfico tipo Serial Plotter de las últimas 40 lecturas. Valores ilustrativos Hipótesis: los tuyos dependen de la sala.

Lo que ves Causa probable Qué hacer
«Sensores encontrados: 0» y luego −127 Falta la pull-up, el cable S está suelto o en otro pin Revisa R1, agrega 4,7 kΩ y confirma el pin D2
85.00 °C fijo 85 °C es el valor de fábrica del registro al encender Documentado: se leyó antes de terminar una conversión o la alimentación es inestable Revisa +V y GND; no acortes la espera de conversión
Símbolos raros Velocidad distinta en el Monitor Serie Ajústala a 9600 baudios
El sensor se calienta solo +V y GND invertidos Desconecta de inmediato y revisa los rótulos

Alternativa sin hardware

Arma el circuito en Wokwi (wokwi.com), que incluye el DS18B20 y permite fijar la temperatura simulada. Rotula esos datos como simulación, no como medición. Y cuando quieras pasar al banco de trabajo, el kit de 37 sensores trae el KY-001 y los otros tres módulos del proyecto.

Parte C · 1La histéresis: una alarma que no parpadea

Si la alarma se enciende en 30,0 °C y se apaga apenas baja de 30,0 °C, una lectura que oscila entre 29,9 y 30,1 °C la haría encenderse y apagarse en cada lectura. La solución es usar dos umbrales: uno para encender y otro, más bajo, para apagar. La diferencia entre ambos se llama histéresis.

Fórmula

enciende si T ≥ Talarma · apaga si T ≤ Talarma − H

Simulador 10 · Con y sin histéresiscuenta los parpadeos

Lecturas generadas para el ejemplo Hipótesis didáctica. Cada punto es una lectura; las barras inferiores muestran la alarma encendida.

Ejemplo resuelto C.1

Con Talarma = 30,0 °C y H = 1,0 °C Hipótesis, la alarma se apaga en 30,0 − 1,0 = 29,0 °C Calculado. Para las lecturas 29,8 → 30,0 → 29,9 → 29,4 → 29,0 → 29,6 °C: apagada → enciende (llegó a 30,0) → sigue (29,9 no es ≤ 29,0) → sigue → apaga (llegó a 29,0) → sigue apagada (29,6 no llega a 30,0).

Parte C · 2Proyecto: termómetro con alarma, máximos y mínimos

Usamos cuatro módulos del kit más una pantalla LCD I2C. El Arduino pide una medición al KY-001 y, mientras el sensor convierte, sigue revisando el botón. A los 750 ms recoge el resultado y pide la siguiente. Con cada lectura actualiza máximo y mínimo, elige el color del KY-016, hace sonar el KY-012 durante la alarma y muestra todo en la LCD.

ENTRADAS SALIDAS KY-001temperatura · D2 KY-004botón reinicio · D4 Arduino UNOdecide y muestra LCD 1602 I2Ctexto · A4/A5 KY-016semáforo · D9–D11 KY-012alarma · D8

Diagrama de bloques animado: las entradas alimentan la decisión y el Arduino maneja tres salidas.

Simulador 11 · Banco de pruebas del proyecto completomisma lógica que el código

Este es el programa completo funcionando: lectura cada 750 ms sin detener el programa, histéresis, semáforo, pitido de 150 ms cada segundo y botón de reinicio de máximo y mínimo.

KY-016
KY-012
KY-004

KY-001
Normalsala 22,0 °C
1526 aviso30 alarma35 °C
Monitor Serie · 9600 baudiosprocesarLectura()
Estado Condición LED KY-016 Zumbador LCD
Normal T < 26,0 °C ● Verde Apagado Temperatura, mín. y máx.
Aviso 26,0 °C ≤ T, sin alarma ● Amarillo (R + G) Apagado Temperatura, mín. y máx.
Alarma Desde 30,0 °C hasta bajar a 29,0 °C ● Rojo Pitido de 150 ms cada 1 s «ALARMA» en la línea 1
Falla La librería devuelve −127 ● Azul Apagado «Sensor no detectado»

Conexiones del proyecto

Dispositivo Pin del dispositivo Conecta a Cable
Arduino UNO 5V / GND Riel + / riel − de la protoboard Rojo / negro
KY-001 S · VCC · GND D2 · riel + · riel − Amarillo · rojo · negro
KY-004 S · VCC · GND D4 · riel + · riel − Azul · rojo · negro
KY-012 S · NC · GND D8 · sin conectar Verifica · riel − Gris · — · negro
KY-016 R · G · B · GND D9 · D10 · D11 · riel − Morado · verde · celeste · negro
LCD I2C GND · VCC · SDA · SCL Riel − · riel + · A4 · A5 Negro · rojo · verde · naranja

Verifica en tus módulos

  • KY-012: en muchos módulos el pin central no se usa. Si tu placa lo rotula «+», conéctalo al riel +.
  • KY-016: revisa si trae tres resistencias pequeñas. Si no, pon 220 Ω en serie en R, G y B.
  • KY-004: el programa lee el estado de reposo al encender. No lo presiones mientras arranca.
  • LCD: la dirección I2C suele ser 0x27 o 0x3F. Si no ves texto, ajusta el contraste del adaptador.

Errores de montaje que dañan componentes

  • Invertir + y − en cualquier módulo: el KY-001 se calienta y puede dañarse.
  • Unir el riel + con el riel −: es un cortocircuito del USB.
  • Conectar el LED RGB sin resistencias si tu módulo no las trae.
Ver el código completo del proyecto (155 líneas, compilado)
// KY-001 · Proyecto: Termómetro con alarma, máximos y mínimos
// Electricneill Chile SpA · Ebook KY-001 · Placa: Arduino UNO
// Módulos del kit: KY-001 (temperatura), KY-016 (LED RGB),
//   KY-012 (zumbador activo), KY-004 (botón)
// Complemento: pantalla LCD 1602 con adaptador I2C
// Librerías: OneWire, DallasTemperature, LiquidCrystal_I2C

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// ---------- Pines ----------
const byte PIN_SENSOR = 2;   // S del KY-001 (bus 1-Wire)
const byte PIN_BOTON  = 4;   // S del KY-004
const byte PIN_BUZZER = 8;   // S del KY-012
const byte PIN_R = 9;        // R del KY-016
const byte PIN_G = 10;       // G del KY-016
const byte PIN_B = 11;       // B del KY-016

// ---------- Ajustes (cámbialos a tu gusto) ----------
const float TEMP_AVISO  = 26.0;  // desde aquí el LED pasa a amarillo
const float TEMP_ALARMA = 30.0;  // desde aquí: rojo + zumbador
const float HISTERESIS  = 1.0;   // la alarma se apaga en 29,0 °C o menos
const unsigned long T_CONVERSION = 750; // ms que tarda una lectura a 12 bits

OneWire bus(PIN_SENSOR);
DallasTemperature sensor(&bus);
LiquidCrystal_I2C lcd(0x27, 16, 2);  // si no ves texto, prueba 0x3F

float tMax = 0, tMin = 0, ultimaT = 0;
bool hayLectura = false;   // todavía no llega la primera lectura válida
bool alarma = false;
bool reposoBoton;           // nivel del botón sin presionar
unsigned long inicioConversion;

// Enciende el LED RGB: cada argumento es true (encendido) o false (apagado)
void color(bool r, bool g, bool b) {
  digitalWrite(PIN_R, r);
  digitalWrite(PIN_G, g);
  digitalWrite(PIN_B, b);
}

// Reinicia máximo y mínimo al presionar el botón (con antirrebote)
void revisarBoton() {
  static bool anterior = false;
  static unsigned long tPulsacion = 0;
  bool presionado = (digitalRead(PIN_BOTON) != reposoBoton);

  if (presionado && !anterior && millis() - tPulsacion > 200) {
    tPulsacion = millis();
    if (hayLectura) {
      tMax = ultimaT;
      tMin = ultimaT;
    }
    Serial.println(F("Maximo y minimo reiniciados"));
  }
  anterior = presionado;
}

// Muestra la temperatura, el estado y los extremos en la pantalla
void mostrarLCD(float t) {
  lcd.setCursor(0, 0);
  lcd.print(F("T:"));
  lcd.print(t, 1);
  lcd.print((char)223);          // símbolo de grado en la LCD
  lcd.print(F("C  "));          // espacios: borran restos de la lectura anterior
  lcd.setCursor(10, 0);
  lcd.print(alarma ? F("ALARMA") : F("      "));

  lcd.setCursor(0, 1);
  lcd.print(F("m:"));
  lcd.print(tMin, 1);
  lcd.print(F(" M:"));
  lcd.print(tMax, 1);
  lcd.print(F("  "));
}

// Decide el color del semáforo y la alarma a partir de una lectura
void procesarLectura(float t) {
  if (t == DEVICE_DISCONNECTED_C) {   // -127: sensor desconectado
    alarma = false;
    color(false, false, true);         // azul = falla del sensor
    lcd.setCursor(0, 0);
    lcd.print(F("Sensor no       "));
    lcd.setCursor(0, 1);
    lcd.print(F("detectado       "));
    Serial.println(F("Error: sensor no detectado"));
    return;
  }

  ultimaT = t;
  if (!hayLectura) {                   // primera lectura válida
    tMax = t;
    tMin = t;
    hayLectura = true;
  }
  if (t > tMax) tMax = t;
  if (t < tMin) tMin = t;

  // Alarma con histéresis: enciende en 30,0 y apaga recién en 29,0
  if (!alarma && t >= TEMP_ALARMA) alarma = true;
  if (alarma && t <= TEMP_ALARMA - HISTERESIS) alarma = false;

  if (alarma) color(true, false, false);                 // rojo
  else if (t >= TEMP_AVISO) color(true, true, false);   // amarillo (R + G)
  else color(false, true, false);                      // verde

  mostrarLCD(t);

  Serial.print(F("T="));
  Serial.print(t, 2);
  Serial.print(F(" C  min="));
  Serial.print(tMin, 2);
  Serial.print(F("  max="));
  Serial.print(tMax, 2);
  Serial.println(alarma ? F("  ALARMA") : F("  normal"));
}

void setup() {
  Serial.begin(9600);
  pinMode(PIN_BUZZER, OUTPUT);
  pinMode(PIN_R, OUTPUT);
  pinMode(PIN_G, OUTPUT);
  pinMode(PIN_B, OUTPUT);
  pinMode(PIN_BOTON, INPUT);
  reposoBoton = digitalRead(PIN_BOTON);  // el botón no debe estar presionado al encender

  lcd.init();
  lcd.backlight();
  lcd.print(F("KY-001 DS18B20"));
  lcd.setCursor(0, 1);
  lcd.print(F("Iniciando..."));

  sensor.begin();
  sensor.setResolution(12);              // 0,0625 °C por paso
  sensor.setWaitForConversion(false);    // no detener el programa mientras mide
  sensor.requestTemperatures();          // primera medición
  inicioConversion = millis();
}

void loop() {
  revisarBoton();

  // Cuando termina una conversión: leer, pedir la siguiente y procesar
  if (millis() - inicioConversion >= T_CONVERSION) {
    float t = sensor.getTempCByIndex(0);
    sensor.requestTemperatures();
    inicioConversion = millis();
    procesarLectura(t);
  }

  // Zumbador: pitido de 150 ms cada segundo mientras dure la alarma
  digitalWrite(PIN_BUZZER, alarma && (millis() % 1000 < 150));
}

Compilado para Arduino UNO con OneWire 2.3.8, DallasTemperature 4.0.6 y LiquidCrystal_I2C 1.1.4: 10.780 bytes de programa (32,9 %) y 539 bytes de RAM (26,3 %). Necesita la librería LiquidCrystal I2C de Frank de Brabander.

Míralo en video: «DS18B20 Temperature Sensor With Arduino LCD» · DPV Technology · 6:51 · en inglés. Muestra la lectura en una LCD 16×2, como en este proyecto.

Medir sin detener el programa

En la parte B, requestTemperatures() dejaba el programa esperando hasta 750 ms. Aquí usamos setWaitForConversion(false): el Arduino da la orden, sigue trabajando y vuelve por el resultado cuando ya pasó el tiempo de conversión, controlado con millis(). Por eso el botón responde al instante.

Arma este proyecto completo4 módulos sueltos = $8.000 · el kit trae 37 por $14.990

RefuerzoVideos recomendados

Seleccionamos videos que muestran el DS18B20 funcionando en el banco de trabajo. Toca la miniatura para verlo aquí mismo o abre el enlace en YouTube. Los videos son de sus autores; los recomendamos como apoyo y no forman parte de Electricneill.

¿Cómo programar el DS18B20 con Arduino? (módulo HW-506)David Portilla · Programación y Electrónica

Conexión con Arduino UNO y lectura en °C con DallasTemperature. Complementa la parte B.

DS18B20 Sensor temperatura ideal para ArduinoCambatronics Online

Presentación del sensor y de la comunicación 1-Wire. Complementa la parte A.

Sensor DS18B20: termómetro resistente a líquidos con LabVIEW y ArduinoLabVIEW Para Todos

Usa la versión en sonda de acero para medir líquidos, la que recomendamos en la FAQ.

1-Wire DS18B20 Temperature Sensor · Arduino tutorial #6Bas on Tech

Explicación del bus 1-Wire, el circuito y el código para principiantes. Activa los subtítulos en español.

Inglés · subtítulosAbrir en YouTube →
Arduino DS18B20 Temperature Sensor Tutorial · Wiring + CodeDuinaBytes

En 5 minutos: la resistencia pull-up y las librerías OneWire y DallasTemperature.

Inglés · subtítulosAbrir en YouTube →
DS18B20 Temperature Sensor With Arduino LCDDPV Technology

Lectura en pantalla LCD 16×2: el punto de partida del proyecto de la parte C.

Inglés · subtítulosAbrir en YouTube →

CierrePonte a prueba

1. ¿Por qué el bus 1-Wire necesita una resistencia pull-up?

2. Con TEMP_ALARMA = 28,0 y HISTERESIS = 1,5, ¿a qué temperatura se apaga la alarma?

3. ¿Qué ventaja tiene setWaitForConversion(false) en el proyecto?

4. El Monitor Serie muestra 85.00 °C fijo. ¿Qué pasó?

Reto de ampliación

  • Dos zonas: agrega un segundo DS18B20 en el mismo pin D2 y muestra «interior» y «exterior».
  • Gráfico en vivo: abre el Serial Plotter del IDE mientras calientas el sensor.
  • Ventilador: usa el relé KY-019 para encender un ventilador de 5 V en alarma (solo baja tensión).

Combínalo con

  • KY-013: compara el termistor con el DS18B20.
  • KY-006: cambia el pitido por una melodía.
  • KY-019: controla una carga de baja tensión.
  • KY-040: ajusta el umbral girando el encoder.

Logro desbloqueado

Ya sabes leer un sensor digital 1-Wire, mostrar datos en una LCD por I2C y programar una alarma con histéresis que no parpadea.

FAQPreguntas frecuentes

¿El KY-001 sirve para medir agua o líquidos?

El módulo no: el TO-92 queda expuesto y la placa no es estanca. Para líquidos usa el DS18B20 en sonda de acero; el código es el mismo.

¿Funciona con ESP32?

Sí. Aliméntalo con 3,3 V para que la línea de datos y la pull-up queden a 3,3 V; el chip funciona desde 3,0 V. Usa cualquier GPIO digital y cambia PIN_SENSOR.

¿Cuántos sensores puedo poner en el mismo pin?

Varios: cada uno tiene una dirección única de 64 bits. En cables cortos de protoboard no tendrás problema con unos pocos; para tramos largos baja la pull-up y usa cable trenzado.

¿Cuál es la diferencia entre KY-001 y KY-028?

El KY-001 entrega la temperatura digital exacta por 1-Wire. El KY-028 usa un termistor con un comparador: su salida digital solo dice «sobre o bajo el umbral» que fijas con el potenciómetro.

¿Te quedó alguna duda o quieres armarlo en clase?

Somos profesores de electrónica en el Valle de Aconcagua. Te asesoramos para elegir los módulos correctos y armamos packs para liceos TP y talleres.

Sigue explorando

Créditos y transparencia. Datos técnicos: hoja de datos DS18B20, Maxim Integrated (hoy Analog Devices), documento 19-7487, rev. 6, julio de 2019; los valores con la etiqueta «Dato documentado» provienen de ella. Referencias consultadas para comparar datos: guía KY-001 de Joy-IT (SensorKit X40, CC BY-NC-SA 3.0) y ficha del kit de UNIT Electronics; el texto, los diagramas, los simuladores y el código son propios. Videos de apoyo (de sus respectivos autores, enlazados desde YouTube): David Portilla, Cambatronics Online, LabVIEW Para Todos, Bas on Tech, DuinaBytes y DPV Technology. Código compilado para Arduino UNO sin errores ni advertencias; no se probó en hardware para esta edición. Los simuladores reproducen la lógica del programa con lecturas ilustrativas. Todas las prácticas usan 5 V CC por USB: no conectes ningún circuito a la red eléctrica.

Basado en el Ebook KY-001: sensor de temperatura DS18B20 con Arduino, módulo 01 de la serie Aprende Electrónica · Electricneill Chile SpA · San Felipe, Valle de Aconcagua, Región de Valparaíso.

Regresar al blog

Deja un comentario