lunes, 8 de febrero de 2016

DS18B20 con el Monitor Serie de Arduino


En esta entrada os ofrezco una perspectiva didáctica sobre el uso del sensor de temperatura DS18B20 con Arduino. Este sensor está lleno de bondades, entre las que destaca el uso de un solo cable de datos (y masa) para comunicarse con Arduino, puede medir temperaturas entre -55ºC y 125 ºC (-67 ºF a 257  ºF), manteniendo una precisión entre -10 ºC y 85 ºC de más o menos 0,5%, funciona entre 3 y 5v y dispone de una resolución máxima de 12 bits. En la foto superior distinguiréis los 3 cables de colores de la sonda (DS18B20 tipo sonda): el cable amarillo es el bus de datos, el rojo es el de alimentación y el gris el negativo o masa. El hardware requerido es el siguiente:

GND y Vcc en este caso van unidos, y el bus de datos QD va a la entrada digital D3 (pin 3) de Arduino y a la resistencia R1. La resistencia R1 es de 4700 Ω, y uno de sus extremos va a Vcc 5 v de la placa de Arduino.
Para poder usar la sonda con Arduino UNO tenemos que cargar dos librerías en el entorno de trabajo IDE: Dallas Temperature y One Wire. Las dos las bajáis en formato zip, y se cargan del siguiente modo:
Desde el entorno IDE de Arduino, Programa -> Include Library -> Add.ZIP Library... , seleccionamos los archivos.


Luego, Aceptar


El software consta de un menú para el Monitor Serie del entorno IDE donde podremos elegir entre dos opciones: con 1 seleccionamos la temperatura en  grados Celsius, y con 2 en grados Fahrenheit. En caso de pulsar cualquier otra tecla el software nos recordará que para seleccionar la temperatura en grados Celsius o Fahrenheit debemos enviar un 1 o un 2 a través del Monito Serie.


 Aquí os dejo el programa en formato texto:

//by Nacho 2016. Dominio público
#include <OneWire.h> //Se importan las librerías
#include <DallasTemperature.h>

#define Pin 3 //Se declara el pin donde se conectará el bus de datos

OneWire ourWire(Pin); //Se establece el pin declarado como bus para la comunicación One Wire
DallasTemperature sensors(&ourWire); //Se llama a la librería Dallas Temperature

int elige; // Declaración de variable para menú

void setup() {
delay(250);
Serial.begin(9600);
sensors.begin(); //Inicialización de los sensores
Serial.println();
Serial.println(" El sensor DS18B20 puede medir entre -50 y 125 grados Celsius");
Serial.println(" Introduzca en el recuadro del Monitor Serie el siguiente valor: ");
Serial.println(" 1 para solicitar la lectura en grados Celsius        ");
Serial.println(" 2 para solicitar la lectura en grados Fahrenheit     ");
Serial.println();
}

void loop() {
Serial.flush(); // Vacía el buffer de entrada e inicia el Monitor Serie limpio de contenido
while(Serial.available()>0){ // Disponer lectura del puerto serie, siempre que el valor sea > 0
  sensors.requestTemperatures(); //Prepara el sensor para la lectura
  delay(100);
  elige=Serial.parseInt(); // Lee contenido puerto serie
  switch (elige){
   
    case 1:
    Serial.print(" Hemos elegido la temperatura en grados Celsius: "); // Sin retorno de carro
    Serial.print(sensors.getTempCByIndex(0)); //Se lee e imprime la temperatura en grados Celsius
    Serial.println(" grados Celsius"); // Con retorno de carro
    Serial.println();
    break;

    case 2:
    Serial.print(" Hemos elegido la temperatura en grados Fahrenheit: ");
    Serial.print(sensors.getTempFByIndex(0)); //Imprime la temperatura en grados Fahrenheit
    Serial.println(" grados Fahrenheit");
    Serial.println();
    break;

    default:
    Serial.println();
    Serial.println(" El sensor DS18B20 puede medir entre -50 y 125 grados Celsius");
    Serial.println(" Introduzca en el recuadro del Monitor Serie el siguiente valor: ");
    Serial.println(" 1 para solicitar la lectura en grados Celsius        ");
    Serial.println(" 2 para solicitar la lectura en grados Fahrenheit     ");
    Serial.println();
   
  }
}
} //Fin


En el siguiente vídeo podréis ver cómo funciona:

 Agradecer la música a Miscellaneous CLASS A, DRAXXA. Gracias.

No hay comentarios:

Publicar un comentario en la entrada