Está en la página 1de 30

5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

   Buscar en este sitio …

Estás aquí: Inicio/Blog/Arduino/DS18B20 sensor de temperatura para líquidos con Arduino

DS18B20 sensor de temperatura para líquidos con Arduino


Comentarios(4)
Luis del Valle Hernández

#118. Medir la temperatura en líquidos con Arduino


17 3
Shares

00:00 56:04
5

1
Recuerdo cuando compré mi primer kit de Arduino. Lo primero que hice fue encender un
LED vamos, como todo el mundo. Pero probablemente el segundo programa que hice fue
medir la temperatura con el LM35. Fue una sensación increíble. Ahora, en este punto he
aprendido que hay un componente para cada situación. El sensor de temperatura
DS18B20 es uno de los sensores más versátiles que puedes encontrar en el mercado.

Este sensor es idóneo cuando queremos medir la temperatura en ambientes húmedos e


incluso dentro del agua. Esto es debido a que podemos comprar una versión que viene en
forma de sonda impermeable. A lo largo de este artículo veremos las particularidades,
ventajas y desventajas del DS18B20. No se trata de un sensor de temperatura común,
veremos que es algo más.

Quizás lo más complicado sea la programación ya que utiliza un protocolo poco común
dentro del mundo de Arduino, 1-Wire. No te preocupes, yo te voy a enseñar paso a paso
todo lo que tienes que hacer para conectarlo a tu Arduino y programarlo.

Además, gracias a las librerías la programación resulta muy sencilla, lo podrás comprobar
más adelante.

Por último decirte que este es el sensor que hemos utilizado en el proyecto IoT Fridge
Saver en el que hemos estado trabajando los últimos meses yo, Germán y José Manuel.

Como es norma de este blog, no solo estamos aquí para copiar y pegar, también
queremos aprender. Ponte cómodo y empecemos con el tutorial del sensor de temperatura
DS18B20.
Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 1/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

DS18B20 y Arduino cómo medir la temperatura


PODCAST del agua
¿QUIÉNySOY?
ambientesCONTACTAR
húme…
 ARDUINO CURSOS ARDUINO

  

Indice de contenidos

1 Características técnicas del sensor DS18B20


2 Conexión del DS18B20 con Arduino
3 Programando el sensor de temperatura DS18B20
4 Identificar cada sensor de temperatura DS18B20
5 Accediendo a la temperatura del DS18B20 por su dirección única
6 Funciones más importantes de la librería DallasTemperature
7 Sensor de temperatura DS18B20, conclusiones
8 Otras lecturas del DS18B20

Características técnicas del sensor DS18B20


Si realmente quieres sacar todo el partido a un componente, lo primero que tienes que
hacer es dirigirte a la hoja de características técnicas del DS18B20. En este
documento vas a encontrar todo lo necesario para conectar y programar el componente.

Lo primero que vemos es que hay diferentes formas del sensor DS18B20. A esto se le
llama encapsulado y depende de donde lo utilices (protoboard, PCB, etc…), tendrás que
elegir uno u otro.

Lo más importante de esta parte es la disposición de los pines. Para cada encapsulado
encontramos una disposición diferente. Existen tres encapsulados: TO-92, SO y μSOP. El
más adecuado para prototipar con Arduino es el TO-92 por su fácil conexión en la una
protoboard.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 2/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

Imagen obtenida del Datasheet DS18B20


La única diferencia entre ellos es la forma o encapsulado. Todos tienen tres pines útiles
VDD, GND y DQ.

VDD: es la tensión de alimentación es decir, que voltaje necesita para que el sensor
de temperatura DS18B20 funcione correctamente. Podemos alimentar desde 3V a
5,5V. Ojo con este dato ya que es muy interesante cuando queremos trabajar con
placas como Arduino MKR1000 y NodeMCU que trabajan a 3,3V.
GND: es la toma de tierra. A este pin conectaremos la referencia 0V de nuestro
circuito.
DQ: es el pin de datos. Por este pin es por donde se recibirán todos los datos en el
protocolo 1-Wire. Este protocolo tiene una ventaja. Como su propio nombre indica (1-
Wire significa un cable en español) solo es necesario utilizar un cable para conectar
varios sensores de temperatura DS18B20. Por lo tanto, solo utilizaremos 1 pin de
Arduino para conectar múltiples sensores.

De momento ya hemos avanzado bastante, ya sabríamos como conectar el sensor de


temperatura DS18B20 a un Arduino. Faltaría la programación :). Aún así, es interesante
conocer más aspectos técnicos de este sensor.

Es importante fijarse en el consumo eléctrico si queremos utilizar el DS18B20 con


alguna placa que requiera de baterías o pilas. Eso lo vemos en la segunda página en
los parámetros que se miden en Amperios. Para este artículo no nos hace falta ya que
será alimentado a través de la red eléctrica.

Rango de temperaturas del DS18B20


Algo muy importante es saber qué rango de temperaturas es capaz de medir un sensor de
este tipo. No es lo mismo medir la temperatura ambiente de una casa situada en Alicante
que medir la temperatura de un congelador o frigorífico.

También es importante conocer el error que puede llegar a tener y la resolución del sensor
de temperatura DS18B20. Toda esta información la sacamos de la hoja de características
Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
técnicas. consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 3/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

¿Quieres empezar con


   Arduino?
! Sigue esta guía gratuita !
Apúntate a la lista y recibirás la guía gratuita para dar
los primeros pasos con Arduino.

Nombre Email
Descargar ya

Comenzamos con el rango de temperaturas. El DS18B20 puede medir temperaturas


entre -55ºC y 125ºC. Es un rango muy amplio sin embargo, no en todo el rango tenemos
el mismo error. Ahora te estarás preguntando ¿qué es el error de un sensor de
temperatura?

DS18B20 y el error en la medición


Si viviéramos en un mundo ideal donde todos salimos del trabajo a nuestra hora, nuestros
hijos nos hacen caso y tenemos pagada la hipoteca desde hace años, un sensor de
temperatura nos mediría exactamente la temperatura que hace en un sitio.

Pero no, no vivimos en un mundo idóneo y no salimos a nuestra hora, nuestros hijos no
nos hacen caso y nos queda mucho de hipoteca por pagar. En este mundo, el real, un
sensor de temperatura como el DS18B20 tiene errores debido a factores externos, al
ruido inherente en los circuitos eléctricos y alteraciones en el medio físico.

No todo son noticias malas, aunque los componentes eléctricos tengan errores, estos se
pueden medir. Por lo tanto sabemos más o menos cuanto oscilará la medición entorno a
su valor real. En el caso del DS18B20 el error depende del rango de temperaturas.

Para temperaturas entre -10ºC y 85ºC podemos tener ±0,5ºC. Para el resto de
temperaturas entre -55ºC y 125ºC el error es de ±2ºC.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 4/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

Esto equivale a decir que si el sensor DS18B20 suministra una temperatura de 23ºC el
 valor real
ARDUINO
estará entreCURSOS
22,5ºCARDUINO PODCAST
y 23,5ºC. Si por ¿QUIÉN SOY?
el contrario suministra un valorCONTACTAR
de 90ºC el
valor real estará entre 88ºC y 92ºC.

  
Esto tampoco te debe preocupar a no ser que quieras “cocer metanfetamina” como Walter
White en Breaking Bad :)

Resolución del sensor de temperatura DS18B20


Una de las características más interesantes de este sensor es que podemos trabajar con
diferentes resoluciones. Cuando hablo de resoluciones me refiero a cual es la variación
mínima que podemos medir entre dos temperaturas.

Es lo mismo que nos sucede con los pines analógicos en Arduino o cualquier otra placa de
desarrollo. El DS18B20 admite resoluciones de 9-bit, 10-bit, 11-bit y 12-bit. Por defecto
utiliza la resolución de 12-bit.

Las variaciones para cada resolución las puedes consultar en la siguiente tabla.

RESOLUCIÓN TEMPERATURA

9-bit 0,5ºC

10-bit 0,25ºC

11-bit 0,125ºC

12-bit 0,0625ºC

Elegir una resolución u otra dependerá de la precisión que necesitemos para nuestro
proyecto. A través de la programación podremos cambiar dicha resolución pero todo eso
lo veremos más adelante.

Otras características del sensor de temperatura DS18B20


Además de medir la temperatura, el DS18B20 incorpora una memoria de 64-bit
(equivalente a 8 bytes) para almacenar el identificador o dirección única de cada sensor.

El primer byte identifica el tipo de componente. Por ejemplo para los DS18B20 es el
número 28 en hexadecimal.

Esta dirección única es necesaria dentro del bus 1-Wire para identificar cada uno de los
sensores de temperatura DS18B20 conectados al bus de comunicación.

Gracias a que utiliza este tipo de comunicaciones, se consiguen dos cosas. Por un lado
robustez en la transmisión de los datos ya que trabaja con datos digitales, mucho
menos sensibles a los efectos adversos del ruido que las señales analógicas. Por otro lado
permite conectar muchos sensores de temperatura con un único pin digital.
Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 5/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

Internamente tiene otro tipo de memoria que sirve para diferentes cosas. Utiliza el sistema
 de verificación
ARDUINO CURSOS ARDUINO
de redundancia cíclica CRCPODCAST ¿QUIÉN SOY?
para la detección CONTACTAR
de errores en los datos. El
código CRC se almacena en la memoria.

  
También almacena la temperatura obtenida y dispone de dos alarmas que se disparan si
la temperatura es mayor o menor que un umbral de temperatura máxima o temperatura
mínima.

Con todo estas características, el DS18B20 se convierte en un sensor bastante potente


con unas capacidades superiores a otros en el mismo rango de precios. Estamos
hablando que el precio de este sensor oscila entre 1€ y 3€, casi despreciable.

Resumen de las características técnicas del DS18B20


CARACTERÍSTICA VALOR

Voltaje de alimentación 3V a 5,5V

VDD voltaje de alimentación

GND Tierra

DQ Datos

Rango de temperaturas -55ºC a 125ºC

Error (-10ºC a 85ºC) ±0,5ºC

Error (-55ºC a 125ºC) ±2ºC

Resolución programable 9-bit, 10-bit, 11-bit o 12-bit (default)

Conexión del DS18B20 con Arduino


Una vez que entendemos cómo funciona el sensor de temperatura DS18B20 y, sobre
todo, cuales son sus características técnicas más importantes, vamos a pasar al montaje
eléctrico con Arduino. Como supondrás, todo este montaje se hace entorno al protocolo
1-Wire.

Esto no es único del DS18B20, cualquier otro componente que trabaje con el protocolo 1-
Wire, utilizará la misma configuración eléctrica.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 6/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

Ya hemos visto que podemos trabajar con diferentes encapsulados. En este tutorial voy a
centrarme en el TO-92 y más concreto el que viene en forma de sonda impermeable. Si
tienes otro modelo o incluso el mismo sin sonda los pasos serán prácticamente los
mismos.

#1 ¿Cómo conectamos los cables de la sonda DS18B20 a una


protoboard o a Arduino?
Estamos acostumbrados a que cualquier componente que compremos venga con
conectores fáciles de utilizar o con algún cable tipo dupont semirigido. En este caso, la
sonda impermeable lleva unos cables normales sin conectores de metal.

En principio esto podría ser un impedimento pero podemos resolverlo de diferentes


formas. Mi opción puede que no sea la más óptima o la más elegante, pero es la que
mejor se adapta a la hora de prototipar con cualquier placa ya sea un Arduino o un
ESP8266.

Simplemente voy a coger un cable dupont hembra (este tipo de cables son los que suelen
venir en casi todos los kit de Arduino) y conectaré cada terminal en cada cable dupont.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 7/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

Es interesante aunque no obligatorio que los cables sean del mismo color, así no te
equivocarás. Ahora seguramente los puristas (entre ellos yo) estarán diciendo, “vaya
chapuza de conexiones :)”. Efectivamente es una chapuza, aunque no es la conexión
definitiva ;)

El objetivo es ponernos en acción lo más rápido posible, no entrar en parálisis por


análisis. Tenemos que ser ágiles y empezar a trabajar ya. Solo así coseguiremos
avanzar y por lo tanto aprender.

Mi opción final ha sido soldar los cables y dejar en el extremo un conector de metal para
prototipar rápido.

#2 Identificando los cables y pines del DS18B20


La distribución de los pines dependerá del encapsulado. En cualquier caso siempre
vamos a trabajar con tres pines. Un pin para alimentación VDD, un pin para tierra GND
y un pin para la transmisión de datos DQ.

Con el modelo TO-92 no vamos a tener ningún problema. Estos serían los pines.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 8/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

Sin embargo, cuando compramos un DS18B20 en una sonda impermeable no vemos el


propio sensor, solo vemos los cables.

Tenemos diferentes configuraciones de colores en los cables. En concreto vamos a


encontrar tres.

El tipo clave 1 donde:

Cable rojo: VDD


Cable negro: GND
Cable amarillo: DQ

Imagen obtenida del Datasheet Waterproof


El tipo clave 2 donde:

Cable rojo: VDD


Cable verde: GND
Cable amarillo: DQ Aceptar
Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 9/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

El tipo clave 3 donde:

Cable rojo: VDD


Cable verde: DQ
Cable amarillo: GND

Si tenemos el tipo A, no tendremos problema solo hay una configuración. Si tenemos


alguno de los otros, tendremos un problema :(

No sabemos como se debe de conectar así que la recomendación es primero buscar el


fabricante
Utilizamos (tareaymuy
cookies propios complicada
de terceros si lo has
para mejorar comprado
nuestros serviciosen Aliexpressdeousuario.
y experiencia algunaSiotra tienda
continua de
navegando,
China). Laconsideramos
segunda opción es probar
que acepta su uso.las dos conexiones
Políticapara ver cual yes
de privacidad la que funciona.
cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 10/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

Elige primero el tipo 2, es la configuración mas habitual y lo mismo tienes suerte como yo
 :) ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

 Para finalizar
 esta sección te dejo un resumen de todas las conexiones.

SENSOR TIPO 1 SENSOR TIPO 2 SENSOR TIPO 3 PIN DS18B20

Negro Verde Amarillo GND

Rojo Rojo Rojo Vdd

Amarillo Amarillo Verde DQ

Aunque los colores más típicos son los que he comentado aquí, también puedes
encontrarte otras configuraciones de colores. He podido comprobar como hay sondas
impermeables del DS18B20 donde el cable verde es de color azul. Sigue los mismos
pasos expuestos anteriormente para identificar cada conector.

#3 Conexión de los pines del sensor de temperatura DS18B20


con Arduino
Ya estamos preparados para comenzar a conectar el DS18B20 a Arduino. Sin embargo,
antes de hacerlo tenemos que conocer que existen dos formas de alimentar el
DS18B20. La primera sería la más simple y sería a través del pin VDD. La segunda
opción sería hacerlo a través del propio pin de datos DQ, en modo parásito.

En los dos modos posibles, siempre se pone una resistencia pull-up con el pin DQ. El
motivo de esta resistencia es debido a la electrónica para controlar el bus de
comunicación. Utiliza un FET de drenaje abierto que se comporta como una puerta AND.

Cuando todos los sensores conectados al bus 1-Wire no envíen datos, la línea de datos
será igual a la tensión que suministremos (puede ser de 3V a 5,5V) debido a la resistencia
pull-up. En el momento que un sensor empieza a transmitir, la línea cambia de estado y ya
sabemos que hay un sensor transmitiendo datos.

Lo único que nos quedaría es determinar la resistencia pull-up. Como ya te he


comentado nos servirá para tener en pin DQ siempre un modo alto o HIGH. La resistencia
que se vaya a utilizar dependerá de la longitud del cable. Por norma general utilizaremos
siempre una de 4,7 kΩ.

En la siguiente tabla puedes ver la resistencia más adecuada dependiendo de la longitud


del cable de datos.

RESISTENCIA PULL-UP DISTANCIA DEL CABLE (METROS)

4,7 kΩ De 0 m a 5 m

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
3,3 kΩ De 5 m a 10 m
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 11/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 RESISTENCIA
ARDUINO PULL-UP
CURSOS ARDUINO DISTANCIA
PODCASTDEL CABLE
¿QUIÉN(METROS)
SOY? CONTACTAR

2,2 kΩ De 10 m a 20 m
  
1,2 kΩ De 20 m a 50 m

Modo alimentación por el pin VDD


Recuerda que la alimentación por este pin es desde 3V a 5,5V. No sobrepases el máximo
valor o dañarás el sensor de temperatura DS18B20.

El esquema de conexión para Arduino UNO sería el siguiente.

En el circuito he conectado dos sensores DS18B20. Da lo mismo los que conectes, todos
ellos comparten la resistencia pull-up del pin de datos. Luego una de las patillas va a tierra
(GND) y la otra va a alimentación (VDD). Es relativamente sencillo y no tiene mayor
complicación :)

Modo alimentación parásito por el pin DQ


El otro modo nos permite alimentar el sensor de temperatura DS18B20 a través del pin de
datos DQ. A esta configuración se le llama modo parásito.

El esquema de conexión para Arduino UNO sería el siguiente.


Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 12/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

La conexiones del pin DQ y de GND son las mismas que en el ejemplo anterior. La
diferencia está en que el pin VDD lo conectamos a tierra. Asegúrate de que todos los
sensores tienen este pin a tierra (GND).

Con este último ejemplo ya tenemos el circuito preparado para empezar a programar. Da
lo mismo el modo que utilices, las dos configuraciones se programan igual.

Programando el sensor de temperatura DS18B20


Quizás sea una de las tareas más complejas del DS18B20 debido al protocolo 1-Wire que
utiliza este sensor. Pero gracias a las librerías de Arduino, nuestras grandes amigas, va
a resultar muy sencillo.

La primera parte es hacernos un esquema de lo que queremos hacer. Esto siempre ayuda
a programar.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 13/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

Librerías y variables del programa


 En ARDUINO CURSOS ARDUINO PODCAST
la primera parte del programa vamos a incluir las librerías OneWire y
¿QUIÉN SOY? CONTACTAR

DallasTemperature. Solo tienes que buscar e instalar la librería a través del Gestor de
 Librerías.
 

El código de esta parte sería el siguiente.

1 #include <OneWire.h>
2 #include <DallasTemperature.h>
3
4 // Pin donde se conecta el bus 1-Wire
5 const int pinDatosDQ = 9;
6
7 // Instancia a las clases OneWire y DallasTemperature
8 OneWire oneWireObjeto(pinDatosDQ);
9 DallasTemperature sensorDS18B20(&oneWireObjeto);

Lo primero es incluir las librerías en el código tanto OneWire, es la que implementa el


protocolo 1-Wire, como DallasTemperature, implementa el código para enviar los
comandos adecuados a los sensores y obtener la temperatura.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 14/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

Por norma siempre utilizamos una variable (se aconseja que sea una constante) para
 indicar ARDUINO CURSOS ARDUINO
el número del pin PODCAST
donde tenemos conectado ¿QUIÉN SOY?
los sensores. Este pin esCONTACTAR
el marcado
como DQ.

  
Por último declaramos dos objetos de las clases OneWire y DallasTemperature. Como
veremos posteriormente, solo utilizaremos este último que es el que nos da acceso a los
sensores de temperatura DS18B20.

¿Quieres empezar con


Arduino?
! Sigue esta guía gratuita !
Apúntate a la lista y recibirás la guía gratuita para dar
los primeros pasos con Arduino.

Nombre Email
Descargar ya

Cuando una variable la pasamos con el símbolo &nombreVariable, estamos pasando la


posición de memoria donde se almacenan los datos y no su valor. A esto se le llama
paso por referencia. Esto es lo que hacemos al pasar el argumento al constructor de la
clase DallasTemperature.

Función setup()
El código de la función setup() es muy sencillo.

1 void setup() {
2 // Iniciamos la comunicación serie
3 Serial.begin(9600);
4 // Iniciamos el bus 1-Wire
5 sensorDS18B20.begin();
6 }

Lo primero que hacemos es iniciar la comunicación con el monitor serie indicando la


velocidad de transmisión con Serial.begin(). Luego iniciamos el bus de comunicación 1-
Wire llamando a la función sensorDS18B20.begin() que no admite ningún parámetro.

Función loop()
En esta función accederemos a los sensores a través del bus 1-Wire y mostraremos los
datos por el monitor serie.

1 void loop() {
2 // Mandamos comandos para toma de temperatura a los sensores
3 Serial.println("Mandando comandos a los sensores");
4 sensorDS18B20.requestTemperatures();
5
6 // Leemos y mostramos los datos de los sensores DS18B20
Utilizamos cookiesSerial.print("Temperatura
7 sensor
propios y de terceros para mejorar 0: ");
nuestros servicios y experiencia de usuario. Si continua navegando,
8 Serial.print(sensorDS18B20.getTempCByIndex(0));
9 consideramos que C");
Serial.println(" acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 15/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

10 Serial.print("Temperatura sensor 1: ");


11 Serial.print(sensorDS18B20.getTempCByIndex(1));
12 ARDUINO CURSOS
Serial.println(" C"); ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR
13
14 delay(1000);
15 }
  
Lo primero mostramos un mensaje para indicar que estamos enviando los comandos
necesarios a los sensores para que empiecen a leer la temperatura. Luego llamamos a la
función sensorDS18B20.requestTemperatures() que envía dichos comandos.

Una vez que los sensores lo han recibido, ya han tomado la temperatura y la tienen lista
para enviarla a Arduino. Para solicitar dicha temperatura hacemos una llamada a la
función sensorDS18B20.getTempCByIndex(indice_sensor).

Vamos a parar a analizar esta función. Si tenemos varios sensores conectados en serie
con Arduino, los podemos identificar de diferentes maneras. La más rápida es a través de
un índice. A cada uno de ellos se le asigna un número en orden secuencial.

Si tenemos 2 sensores, sus índices serán 0 y 1. Si tuviéramos 5 sensores sus índices


serían 0, 1, 2, 3 y 4. Así sucesivamente. Si tenemos solo un sensor, el índice que
debemos utilizar es el 0.

Además esta función nos devuelve la temperatura en grados Celsius. Esto viene indicado
por TempC.

Código completo
Aquí te dejo todo el código completo. Puedes copiarlo y utilizarlo en tus proyectos.

1 #include <OneWire.h>
2 #include <DallasTemperature.h>
3
4 // Pin donde se conecta el bus 1-Wire
5 const int pinDatosDQ = 9;
6
7 // Instancia a las clases OneWire y DallasTemperature
8 OneWire oneWireObjeto(pinDatosDQ);
9 DallasTemperature sensorDS18B20(&oneWireObjeto);
10
11 void setup() {
12 // Iniciamos la comunicación serie
13 Serial.begin(9600);
14 // Iniciamos el bus 1-Wire
15 sensorDS18B20.begin();
16 }
17
18 void loop() {
19 // Mandamos comandos para toma de temperatura a los sensores
20 Serial.println("Mandando comandos a los sensores");
21 sensorDS18B20.requestTemperatures();
22
23 // Leemos y mostramos los datos de los sensores DS18B20
24 Serial.print("Temperatura sensor 0: ");
25 Serial.print(sensorDS18B20.getTempCByIndex(0));
26 Serial.println(" C");
27 Serial.print("Temperatura sensor 1: ");
28 Serial.print(sensorDS18B20.getTempCByIndex(1));
29 Serial.println(" C");
30
31 delay(1000);
32 }

Si cargas este código te deberá aparecer algo parecido a esto en el monitor serie.
Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 16/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

Ahora surge una duda. Imagínate que quieres monitorizar un frigorífico tanto la parte de
arriba como el congelador. Te gustaría saber cual es cada sensor. Si recuerdas,
anteriormente te he dicho que cada uno de los sensores está identificado con un número
de 64-bit, el identificador o dirección única.

Lo ideal sería identificar cada uno de los sensores que hemos conectado a Arduino, eso
es lo que vamos a ver a continuación.

Identificar cada sensor de temperatura DS18B20


Para identificar un único sensor vamos a partir del siguiente esquema eléctrico donde solo
tenemos un sensor conectado. Esto lo tendrás que repetir con cada sensor. Voy a utiliza la
configuración de alimentación modo parásito, alimentación por el pin de datos DQ.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 17/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

Podemos optar por otras opciones como diferenciar los sensores a través de la
temperatura. Por ejemplo, pones uno en una estufa y el otro lo pones en temperatura
ambiente, verás como notas las diferencias. Sin embargo, a nivel de código esto puede
resultar más complicado.

Lo importante de esta sección es identificar la dirección única de 64-bit (8 bytes) de cada


sensor. Esto es debido a que la implementación de la librería DallasTemperature es más
rápida cuando trabajamos con estos identificadores y no con los índices que asigna
de forma automática.

Programando la identificación del DS18B20


Como hemos hecho en el ejercicio anterior, vamos a mostrar un diagrama de lo que
vamos a programar con este circuito. Normalmente no es necesario hacer esto, sobre todo
si ya tienes experiencia programando Arduino.

Pero si estás empezando es más que recomendable hacerte un esquema de lo que tienes
que hacer antes de empezar. En este caso vamos a hacer los siguiente.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 18/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

Librerías y variables del programa


La primera parte es la misma que en el ejemplo anterior. Incluimos las librerías OneWire y
DallasTemperature y declaramos las variables y clases.

1 #include <OneWire.h>
2 #include <DallasTemperature.h>
3
4 // Pin donde se conecta el bus 1-Wire
5 const int pinDatosDQ = 9;
6
7 // Instancia a las clases OneWire y DallasTemperature
8 OneWire oneWireObjeto(pinDatosDQ);
9 DallasTemperature sensorDS18B20(&oneWireObjeto);

Función setup()
En este caso vamos a hacer todo en la función setup(). Solo queremos saber la dirección
única que tiene el sensor que hemos conectado a nuestro Arduino.

1 void setup() {
2 // Iniciamos monitor serie y sensor de temperatura DS18B20
3 Serial.begin(9600);
4 sensorDS18B20.begin();
5
6 // Buscamos los sensores conectados
7 Serial.println("Buscando dispositivos...");
8 Serial.print("Encontrados: ");
9 int numeroSensoresConectados = sensorDS18B20.getDeviceCount();
10 Serial.print(numeroSensoresConectados);
11 Serial.println(" sensores");
12
13 // Si hemos encontrado uno mostramos su dirección
14 if(numeroSensoresConectados==1){
15
16 // Tipo definido como una array de 8 bytes (uint8_t)
17 DeviceAddress sensorTemperatura;
18 // Obtenemos dirección
19 sensorDS18B20.getAddress(sensorTemperatura, 1);
20
21 // Mostamos por el monitor serie
22 Serial.print("Sensor encontrado: ");
23
24 // Recorremos los 8 bytes del identificador único
25 for (uint8_t i = 0; i < 8; i++)
26 {
27 // Si solo tiene un dígito rellenamos con un cero a la izquierda
28 if (sensorTemperatura[i] < 16) Serial.print("0");
29
30 // Mostramos los datos que van en HEXADECIMAL
31 Serial.print(sensorTemperatura[i], HEX);
32 }
33 }
34 }

Lo primero es iniciacilizar el monitor serie y el bus de comunicación 1-Wire con


Serial.begin() y sensorDS18B20.begin(). No es nada nuevo.

Una
Utilizamos vez que
cookies estéy de
propios todo correcto
terceros para comenzamos
mejorar nuestroscomprobando si hayde
servicios y experiencia algún sensor
usuario. conectado
Si continua navegando,
al bus 1-Wire. Esto loque
consideramos hacemos
acepta su con
uso. el método sensorDS18B20.getDeviceCount().
Política de privacidad y cookies Este
https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 19/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

método nos devuelve un número entero con los sensores conectados al bus.
 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

Puede ser muy útil para saber que todo está funcionando correctamente. Imagínate que

 tienes  
3 sensores conectados a Arduino. Lo primero que haces en tu programa es
comprobar que estén conectados si no lo estuvieran podrías parar la ejecución y alertar de
que algo está mal.

Lo siguiente es comprobar que solo tengamos conectado un único sensor a través de la


sentencia de control if(…). Te recuerdo que este programa solo nos va a servir para
detectar la dirección de un único sensor.

¿Quieres empezar con


Arduino?
! Sigue esta guía gratuita !
Apúntate a la lista y recibirás la guía gratuita para dar
los primeros pasos con Arduino.

Nombre Email
Descargar ya

Una vez comprobado declaramos una variable del tipo DeviceAddress que no es más que
un array de 8 bytes. Si recuerdas, la dirección única tiene 64-bit (8 bytes) y la
almacenaremos en esta variable. Cada byte en un elemento del array.

La propia librería ya incorpora un tipo de dato específico para esta dirección,


DeviceAddress. Es conveniente utilizarlas así no tendremos ningún error y quedará todo
bastante más claro.

Todo esto lo mostramos a través del monitor serie. Debido a que es un array de 8
elementos, tenemos que recorrerlo con un bucle for(…). Luego mostramos cada dígito en
el monitor serie teniendo en cuenta de que si un número es menor que 16, lo rellenaremos
con un cero a la izquierda.

Esto es debido a que en el sistema hexadecimal, los primeros 16 números solo tienen 1
dígito (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F).

Ejecutando el código de identificador del DS18B20


Este sería el código completo de la aplicación.

1 #include <OneWire.h>
2 #include <DallasTemperature.h>
3
4 // Pin donde se conecta el bus 1-Wire
5 cookies
Utilizamos const propios
int pinDatosDQ = 9;
y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
6
consideramos
7 // Instancia a lasque aceptaOneWire
clases su uso. y DallasTemperature
Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 20/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

8 OneWire oneWireObjeto(pinDatosDQ);


9 DallasTemperature sensorDS18B20(&oneWireObjeto);
10 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR
11 void setup() {
12 // Iniciamos monitor serie y sensor de temperatura DS18B20
13 Serial.begin(9600);
 14
15
 
sensorDS18B20.begin();

16 // Buscamos los sensores conectados


17 Serial.println("Buscando dispositivos...");
18 Serial.println("Encontrados: ");
19 int numeroSensoresConectados = sensorDS18B20.getDeviceCount();
20 Serial.print(numeroSensoresConectados);
21 Serial.println(" sensores");
22
23 // Si hemos encontrado uno mostramos su dirección
24 if(numeroSensoresConectados==1){
25
26 // Tipo definido como una array de 8 bytes (uint8_t)
27 DeviceAddress sensorTemperatura;
28 // Obtenemos dirección
29 sensorDS18B20.getAddress(sensorTemperatura, 1);
30
31 // Mostamos por el monitor serie
32 Serial.print("Sensor encontrado: ");
33
34 // Recorremos los 8 bytes del identificador único
35 for (uint8_t i = 0; i < 8; i++)
36 {
37 // Si solo tiene un dígito rellenamos con un cero a la izquierda
38 if (sensorTemperatura[i] < 16) Serial.print("0");
39
40 // Mostramos los datos que van en HEXADECIMAL

Si cargas el código anterior en tu Arduino y tienes todo bien conectado te deberá aparecer
algo parecido a esto en el monitor serie.

1 Buscando dispositivos...
2 Encontrados: 1 sensores
3 Sensor encontrado: 28A8F8E708000091

La dirección única será diferente para cada sensor de temperatura DS18B20. Esa es la
información importante que tendrás que guardar y relacionar con el sensor. Lo puedes
pegar con una etiqueta o como quieras hacerlo. Luego en el código lo utilizaremos para
obtener la temperatura de ese sensor.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 21/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

Incluso como ves en la foto, puedes poner algo descriptivo que te indique donde vas a
poner ese sensor.

Una vez que tengas identificado el sensor ya puedes conectar otro e ir identificando cada
uno de ellos. En mi caso tengo cuatro que voy a utilizar para el proyecto IoT Fridge Saver.
Dos sondas van al frigorífico y al congelador. Otras dos van a tomar la temperatura de la
parte delantera y trasera del electrodoméstico.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 22/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

  

Por último, vamos a ver cómo accederíamos a los datos de temperatura a través de la
dirección única de cada sensor de temperatura DS18B20.

Accediendo a la temperatura del DS18B20 por su


dirección única
Hasta ahora lo que hemos hecho es acceder a la temperatura del DS18B20 a través del
índice que ocupa en el bus de comunciación. Esto es un poco peligroso ya que no
tenemos control sobre ese orden, podría variar con alguna modificación en el circuito.

Por eso es importante conocer la dirección única. En la sección anterior ya hemos


identificado cada sensor, ahora ya podemos programar y ser conscientes de la
temperatura que nos da cada uno de ellos.

Librerías y variables del programa


1 #include <OneWire.h>
2 #include <DallasTemperature.h>
3
4 // Pin donde se conecta el bus 1-Wire
5 const int pinDatosDQ = 9;
6
7 // Instancia a las clases OneWire y DallasTemperature
8 OneWire oneWireObjeto(pinDatosDQ);
9 DallasTemperature sensorDS18B20(&oneWireObjeto);
10
11 // Variables con las direcciones únicas de los 4 sensores DS18B20
12cookies
Utilizamos DeviceAddress sensorFrigorifico
propios y de = {0x28,
terceros para mejorar nuestros0xA8, 0xF8,
servicios 0xE7, 0x08,
y experiencia 0x00, Si
de usuario. 0x00, 0x91};
continua navegando,
13 DeviceAddress sensorCongelador = {0x28, 0x6F, 0xB6, 0xC6, 0x08, 0x00, 0x00, 0x3F};
consideramos
14 DeviceAddress que acepta su
sensorDelante = uso.
{0x28, 0xA4, 0x29, Política
0xE6,de0x08,
privacidad
0x00,y 0x00,
cookies0xF0};

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 23/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

15 DeviceAddress sensorAtras = {0x28, 0x45, 0x92, 0xE6, 0x08, 0x00, 0x00, 0xD1};

 Las librerías
ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR
ya las conoces OneWire y DallasTemperature. También tienes que declarar
una constante para el pin DQ e instanciar las dos clases OneWire y DallasTemperature.
 Nada nuevo
 por ahora.

En la parte final, declaramos 4 variables del tipo DeviceAddress. Como ya te he
comentado, este tipo representa un array de 8 elementos. Cada uno de ellos es 1 byte.
Ahora tienes que rescatar las direcciones únicas que hemos sacado anteriormente.

Para asignar el valor a cada variable tienes que hacer grupos de dos. Cada grupo irá en
un elemento del array y en total son 8 elementos que equivalen a 8 bytes (64-bit como
hemos visto en la parte de las características técnicas).

Fíjate bien en los nombres, aquí se pone de manifiesto la utilidad de las variables. Le
vamos a dar a cada dirección un descriptivo. Esta variable almacenará la dirección única,
pero será fácilmente recordada gracias la nombre de la variable.

Nombrar variables es algo muy personal. Mi consejo es que te acostumbres a poner


nombres lo más descriptivo posible.

Función setup()
1 void setup() {
2 // Iniciamos la comunicación serie
3 Serial.begin(9600);
4 // Iniciamos el bus 1-Wire
5 sensorDS18B20.begin();
6
7 // Buscamos los sensores conectados
8 Serial.println("Buscando dispositivos...");
9 Serial.println("Encontrados: ");
10 Serial.print(sensorDS18B20.getDeviceCount());
11 Serial.println(" sensores");
12 }

Comenzamos la función setup() iniciando el monitor serie con Serial.begin() y el protocolo


1-Wire con sensorDS18B20().

Luego como hemos visto en el ejemplo de identificación buscamos todos los dispositivos
conectados al bus con la función sensorDS18B20.getDeviceCount(). En mi caso me
debería dar 4 sensores, si fueran menos es que hay algún error de conexión.

En las pruebas realizadas he tenido problemas con las conexiones. En el momento que
falla alguno de los sensores, tira el bus 1-Wire abajo y se desconectan todos los
sensores.

Función loop()
1 void loop() {
2 // Mandamos comandos para toma de temperatura a los sensores
3 Serial.println("Mandando comandos a los sensores");
4 sensorDS18B20.requestTemperatures();
5
6 // Leemos y mostramos los datos de los sensores DS18B20 por dirección única
7 Serial.print("Temperatura sensor frigorifico: ");
Utilizamos
8 cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
Serial.print(sensorDS18B20.getTempC(sensorFrigorifico));
9 Serial.println("
consideramos que C");
acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 24/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

10 Serial.print("Temperatura sensor congelador: ");


11 Serial.print(sensorDS18B20.getTempC(sensorCongelador));
12 ARDUINO
Serial.println("CURSOS
C"); ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR
13 Serial.print("Temperatura sensor delante: ");
14 Serial.print(sensorDS18B20.getTempC(sensorDelante));
15 Serial.println(" C");
 16
17
 
Serial.print("Temperatura sensor detras: ");
Serial.print(sensorDS18B20.getTempC(sensorAtras));
18 Serial.println(" C");
19
20 delay(1000);
21 }

En la función loop() vamos a acceder a la temperatura de los cuatro sensores DS18B20.


Comenzamos enviando los comandos pertinentes para que los sensores empiecen a
medir. Esto lo hacemos con la función sensorDS18B20.requestTemperatures().

Luego mostramos la temperatura de cada sensor. Como ya tenemos identificados cada


uno de ellos, mostramos dónde es esa temperatura. Para acceder a la temperatura ya no
utilizamos la función getTempCByIndex(). Ahora utilizamos sensorDS18B20.getTempC() al
que pasamos como argumento el array de 8 bytes definido por el tipo DeviceAddress.

Por último hacemos una pausa de 1 segundo para cada medición.

Si quieres almacenar la temperatura en una variable debe ser del tipo float.

1 float temperaturaCongelador = sensorDS18B20.getTempC(sensorCongelador);

Funciones más importantes de la librería


DallasTemperature
Para terminar este extenso artículo, voy a numerar y explicar las funciones más
importantes (a mi entender) de la librería DallasTemperature. Hay muchas más que
puedes inspeccionar en el código de la librería en GitHub.

uint8_t getDeviceCount(void)
Devuelve el número de dispositivos conectados al bus 1-Wire en un entero sin signo de 8-
bit.

1 // Buscamos los sensores conectados


2 Serial.println("Buscando dispositivos...");
3 Serial.println("Encontrados: ");
4 Serial.print(sensorDS18B20.getDeviceCount());
5 Serial.println(" sensores");

bool getAddress(uint8_t*, uint8_t)


Obtiene la dirección única de un dispositivo dado un índice en el bus 1-Wire. Devuelve
verdadero (true) si se encuentra el dispositivo.

1 // Tipo definido como una array de 8 bytes (uint8_t)


2 DeviceAddress sensorTemperatura;
3 // Obtenemos dirección
4 sensorDS18B20.getAddress(sensorTemperatura, 0);

bool isConnected(const uint8_t*)


Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 25/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

Comprueba si un sensor está conectado al bus 1-Wire dado una dirección única.
 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

1 // Tipo definido como una array de 8 bytes (uint8_t)


2 DeviceAddress sensorTemperatura = {0x28, 0xA8, 0xF8, 0xE7, 0x08, 0x00, 0x00, 0x91};

 3
4  
// Obtenemos dirección
if(sensorDS18B20.isConnected(sensorTemperatura)){
5 // Obtener temperatura
6 float temperatura = sensorDS18B20.getTempC(sensorTemperatura);
7 }

uint8_t getResolution()
Obtiene la resolución global de todos los sensores. Devuelve un valor entero sin signo de
8-bit con la resolución. Recuerda que ésta puede ser de 9-bit, 10-bit, 11-bit o 12-bit.

1 // Obtenemos la resolución global


2 uint8_t resolucionGlobal = sensorDS18B20.getResolution();

void setResolution(uint8_t)
Establece la resolución de un sensor dado su índice en el bus 1-Wire. No devuelve ningún
valor.

1 // Establecemos al resolución del sensor con índice 0


2 sensorDS18B20.setResolution(0);

uint8_t getResolution(const uint8_t*)


Obtiene la resolución de un sensor dado su dirección única. Devuelve el valor de la
resolución.

1 // Obtenemos la resolución global


2 uint8_t resolucionGlobal = sensorDS18B20.getResolution(sensorCongelador);

Si te das cuentas hay dos funciones con el mismo nombre getResolution(). A esto se le
llama sobrecargar un método y la clase que lo implementa es lo suficientemente lista
como para saber cual tiene que ejecutar dependiendo del número de argumentos que
pases a la función.

void requestTemperatures(void)
Envía los comandos a los sensores para que hagan la lectura de la temperatura.

1 // Mandamos comandos para toma de temperatura a los sensores


2 Serial.println("Mandando comandos a los sensores");
3 sensorDS18B20.requestTemperatures();

bool requestTemperaturesByAddress(const uint8_t*)


Igual que la función anterior pero este solo envía los comandos para que un solo
dispositivo haga la lectura de temperatura dado una dirección única.

1 // Mandamos comandos para toma de temperatura del sensor del congelador


2 Serial.println("Mandando comandos a los sensores");
3 sensorDS18B20.requestTemperaturesByAddress(sensorCongelador);

bool requestTemperaturesByIndex(uint8_t)
Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 26/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

Igual que los dos anteriores pero dado el índice del sensor de temperatura DS18B20
 dentro del
ARDUINO
bus 1-Wire. CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR

 12  
// Mandamos comandos para toma de temperatura del sensor 0
Serial.println("Mandando comandos a los sensores");
3 sensorDS18B20.requestTemperaturesByIndex(0);

float getTempC(const uint8_t*)


Obtiene la temperatura en grados Celsius dada la dirección única del sensor. Devuelve la
temperatura en un tipo de dato float.

1 Serial.print("Temperatura sensor congelador: ");


2 float temperaturaCongeladorCelsius = sensorDS18B20.getTempC(sensorCongelador);
3 Serial.print(temperaturaCongeladorCelsius);
4 Serial.println(" C");

float getTempF(const uint8_t*)


Obtiene la temperatura en grados Fahrenheit dada la dirección única del sensor. Devuelve
la temperatura en un tipo de dato float.

1 Serial.print("Temperatura sensor congelador: ");


2 float temperaturaCongeladorFahrenheit = sensorDS18B20.getTempC(sensorCongelador);
3 Serial.print(temperaturaCongeladorFahrenheit);
4 Serial.println(" F");

float getTempCByIndex(uint8_t)
Obtiene la temperatura en grados Celsius dado el índice del sensor dentro del bus 1-Wire.
Devuelve la temperatura en un tipo de dato float.

1 Serial.print("Temperatura sensor 0: ");


2 float temperaturaCongeladorCelsius = sensorDS18B20.getTempCByIndex(0);
3 Serial.print(temperaturaCongeladorCelsius );
4 Serial.println(" C");

float getTempFByIndex(uint8_t)
Obtiene la temperatura en grados Fahrenheit dado el índice del sensor dentro del bus 1-
Wire. Devuelve la temperatura en un tipo de dato float.

1 Serial.print("Temperatura sensor 0: ");


2 float temperaturaCongeladorFahrenheit = sensorDS18B20.getTempCByIndex(0);
3 Serial.print(temperaturaCongeladorFahrenheit);
4 Serial.println(" F");

Sensor de temperatura DS18B20, conclusiones


Quizás no sea el sensor más preciso que hay en el mercado, ni el más sencillo. Sin
embargo, el sensor de temperatura DS18B20 tiene tres características que lo hacen un
componente muy deseable.

Su bajo precio, entre 1€ y 3€, junto con la precisión de 0,5ºC en el rango de vida humana,
son factores importantes a la hora de elegir el DS18B20 para nuestros proyectos. Además,
permite la conexión en serie de bastantes sensores gracias al bus 1-Wire que viene
implementado en el dispositivo.
Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 27/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

Si a esto le añadimos que podemos comprar la versión que viene en forma de sonda
 impermeable,
ARDUINO CURSOS ARDUINO
definitivamente PODCAST
tenemos un sensor ¿QUIÉN SOY?
muy versátil CONTACTAR
que puede llegar a medir
temperaturas en entornos muy húmedos e incluso dentro de líquidos.

  
¿Dónde utilizarías el sensor DS18B20?
¿Conoces algún modelo más del sensor de temperatura
DS18B20?
Cualquier comentario te agradecería que lo dejaras en este artículo.

Te recomiendo que leas los artículos que te dejo a continuación para profundizar más en
este sensor.

Otras lecturas del DS18B20


Librería OneWire
Wiki librería Dallas Temperature Control
Luis Llamas artículo DS18B20
Polaridad artículo DS18B20
OneWire GitHub
DallasTemperature GitHub

Puedes escuchar este programa en, iVoox, iTunes y en Spreaker. Si lo haces, por
favor valora y comenta, así podremos llegar a más gente.

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 28/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

4 Comentarios Programar Fácil con Arduino 


1 Acceder
 ARDUINO CURSOS ARDUINO PODCAST ¿QUIÉN SOY? CONTACTAR
Ordenar por los mejores
 Recomendar ⤤ Compartir
  
Únete a la conversación...

INICIAR SESIÓN CON


O REGISTRARSE CON DISQUS ?

Nombre

Juanjo Aguirre • hace un mes


Gracias amigos es un gran aporte! sigan adelante, muy buen trabajo!
△ ▽ • Responder • Compartir ›

Luis del Valle Moderador > Juanjo Aguirre • hace un mes


Gracias a ti Juanjo ;)
△ ▽ • Responder • Compartir ›

jose ramon • hace 2 meses


Genial Luis, gran trabajo. La mención a las funciones más importantes de la librería
DallasTemperature es un dato importante, porque sabemos que están ahí, pero cuesta interpretarlas,
por lo menos en mi caso ;)
△ ▽ • Responder • Compartir ›

Luis del Valle Moderador > jose ramon • hace 2 meses


Muchas gracias José Ramón. Tienes toda la razón, al final muchas veces las librerías no están
documentadas y hay que meterse en el código para averiguar qué hacen.
△ ▽ • Responder • Compartir ›

TAMBIÉN EN PROGRAMAR FÁCIL CON ARDUINO

6 proyectos con ESP8266 orientados a la Cómo programar NodeMCU con el IDE de


tecnología del IoT Arduino
16 comentarios • hace 9 meses 16 comentarios • hace 7 meses
Luis del Valle — Con un ESP8266 puedes hacer Luis del Valle — Hola DanielEsta placa es la ideal
prácticamente lo mismo que con un Arduino. La para lo que estás planteando. No se si conoces el
ventaja que tiene el ESP8266 es que tiene un curso que tengo en el Campus, seguro que te
É
#111 Lean Startup y el movimiento Maker con Geolocalización WiFi con Arduino NodeMCU
Néstor Guerra Firebase y Google Maps
9 comentarios • hace 6 meses 24 comentarios • hace 6 meses
Juan — El ataque masivo de Ransomware ha Luis del Valle — Hola AntonioMe lo apunto todo
venido que ni pintado al tema de la seguridad. para investigarlo cuando regrese de las
Este artículo va en la línea que te vacaciones, yo también tengo mucha curiosidad

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 29/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino

Historia del movimiento Maker en Flora y LilyPad cómo crear proyectos


 con Juan
España ARDUINO
Manuel CURSOS
Amuedo ARDUINO PODCAST ¿QUIÉN SOY?
para wearables CONTACTAR
con Arduino
@Colepower En este artículo te voy a hablar de wearables y
  
En el artículo de esta semana traigo una cómo crear tecnología que se integre con
entrevista a un invitado muy especial. El es alguna parte de nuestro cuerpo o con prendas
Ingeniero Informático y Técnico Superior de de vestir. Todo …
Desarrollo de …
[+ info...]
[+ info...]

SCT-013 mide el consumo eléctrico en


tu casa con Arduino
Mi punto fuerte siempre ha sido la
programación. Para mi ha sido una pasión y,
durante muchos años, mi profesión. Sin
embargo, la electrónica es algo …

[+ info...]

COPYRIGHT © 2017 · PROGRAMAR FÁCIL · AVISO LEGAL

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando,
consideramos que acepta su uso. Política de privacidad y cookies

https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 30/30

También podría gustarte