Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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
Indice de contenidos
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
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.
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
Nombre Email
Descargar ya
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 :)
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.
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.
GND Tierra
DQ Datos
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
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.
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
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 ;)
Mi opción final ha sido soldar los cables y dejar en el extremo un conector de metal para
prototipar rápido.
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
https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 9/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino
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.
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.
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.
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
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 :)
https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ 12/30
5/11/2017 DS18B20 sensor de temperatura para líquidos con Arduino
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.
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
DallasTemperature. Solo tienes que buscar e instalar la librería a través del Gestor de
Librerías.
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);
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.
Nombre Email
Descargar ya
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 }
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
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.
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
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.
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
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.
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
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 }
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.
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.
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).
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();
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
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
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.
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.
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 }
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
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 }
Si quieres almacenar la temperatura en una variable debe ser del tipo float.
uint8_t getDeviceCount(void)
Devuelve el número de dispositivos conectados al bus 1-Wire en un entero sin signo de 8-
bit.
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
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.
void setResolution(uint8_t)
Establece la resolución de un sensor dado su índice en el bus 1-Wire. No devuelve ningún
valor.
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.
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 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.
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.
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.
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
Nombre
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
[+ info...]
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