3.-ANALÓGICO: T+H

EL SENSOR DE TEMPERATURA Y HUMEDAD



ÍNDICE
0.-TEORÍA: LOS SENSORES ANALÓGICOS INTEGRADOS
1.- EL LM35
2.- EL DHT11



0.- LOS SENSORES ANALÓGICO INTEGRADOS

Los sensores analógicos normalmente se componen de tres pins: positivo, masa y salida de voltaje analógica. Esta salida de voltaje es directamente proporcional a la variable de medida del sensor (lineal).


Estas salidas de voltaje analógico se pueden conectar a las entradas analógicas de Arduino para poder medir la variable del sensor.

Las placas Arduino disponen de varias entradas analógicas. En el caso del Arduino Uno Rev 3, tiene 6 pins analógicos. Estos pins aceptan un voltaje máximo de 5V. La mayoría de sensores analógicos se pueden alimentar a 5V por lo que su voltaje máximo de salida será este. En la siguiente imagen se puede observar cómo se conecta un sensor analógico en Arduino:






Para poder obtener la variable del sensor en el código Arduino, se deben seguir 3 pasos:
  1. ADC del voltaje analógico procedente del sensor.
  2. Obtener el voltaje del sensor
  3. Obtener la variable del sensor

1) ADC (Analog-to-Digital Converter)

Cuando entra un voltaje analógico en un pin analógico de Arduino, este hace la conversión de analógico a digital (ADC). Quiere decir que convierte el voltaje de entrada 0-5V en valores enteros comprendidos entre 0-1023. Para entender este valor, hay que saber que las entradas analógicas de Arduino son de 10 bits. Tal como sabemos, un bit puede ser 1 o 0 (dual).

Con un nombre n de bits se pueden representar hasta 2n valores digitales. En el caso de las entradas analógicas de Arduino: 2^10 = 1024 valores (de 0 a 1023)


2) Obtener el voltaje del sensor

El siguiente paso es convertir estos valores nuevamente a voltaje en el código de Arduino.
Para esto se tiene que multiplicar el valor leído del pin analógico por 5 (que son los 5V máximo que da el sensor) y dividirlo entre 1023 (que es el valor más grande dentro del rango de 10 bits). 
La fórmula sería la siguiente:

VOLTAJE = (VALOR ADC * 5) /1023

De este modo, tenemos relacionada el voltaje de salida del sensor con los valores digitales de Arduino.

3) Obtener la medida del sensor.

El último paso es obtener la variable de medida del sensor. Para calcular esta, tenemos que saber la relación voltaje/variable del sensor. Esta información la encontraremos en el datasheet del sensor. 








 

1.- EL SENSOR DE TEMPERATURA LM35.




Si por ejemplo usamos el sensor de temperatura LM35, el datasheet nos informa que en su salida da 10mV por 1º.


A través de esta información, tenemos que encontrar la relación de 1V ya que la escala que usamos con Arduino es de voltio en voltio. Como es una conversión lineal, usando una simple regla de tres podemos calcular esta relación. En este caso el resultado es que 1V equivale a 100ºC.


Con esto, tenemos que multiplicar el voltaje obtenido en el paso anterior por el valor de la relación voltaje-variable (en este caso 100) y obtendremos la variable de medida del sensor.

VARIABLE = VOLTAJE * RELACIÓN VOLTAJE/ / VARIABLE

Aunque para este ejemplo hemos usado el sensor de temperatura LM35, estos 3 pasos sirven para cualquier sensor analógico que conectemos al Arduino. Simplemente cambiará la relación Voltaje/Variable del último paso.

Ahora haremos el código de Arduino haciendo cada paso descrito anteriormente usando para este ejemplo el sensor LM35, aunque este código puede servir también como plantilla para conectar cualquier sensor analógico

CÓDIGO (LM35):
#define pin_sensor A5         //Pin del sensor
float adc;                              //Variable para obtener los valores en el 1 paso
float voltaje;                       //Variable para obtener el voltaje en el 2 paso
float variable;                    //Variable final del sensor en el 3 paso
float rel_voltaje_variable = 100.00;             //Relación Voltaje/Variable del sensor LM35
void setup() {
Serial.begin(9600);
}
void loop() {
adc = analogRead(pin_sensor);           
//Paso1, conversión ADC del pin analógico
Serial.println(adc);
voltaje = adc * 5 / 1023;                       
//Paso 2, obtener el voltaje

Serial.println(voltaje);
variable = voltaje * rel_voltaje_variable;            
//Paso3, calcular variable medida

Serial.println(variable);
delay(1000);
}




SENSORES CON MEDICIONES NEGATIVAS
Hay sensores que pueden medir variables con valor negativo. Por ejemplo tenemos un sensor que su gráfica voltaje/variable es la siguiente:

Para poder medir estos valores negativos con Arduino, hay que localizar el offset. El offset se puede apreciar en la gráfica, es el punto que la línea cruza el eje vertical (voltaje). En nuestro sensor, el offset es 1V. El offset lo tenemos que restarlo con el voltaje en el último paso.

Fijaos que hemos tenido que cambiar también el valor de la relación voltaje/variable. En este caso tenemos que 1V equivale a 40… (la variable del sensor). De esta manera, en este ejemplo el Arduino puede medir el rango entre -40 a 160. Esto lo podemos aplicar a cualquier sensor que su gráfica voltaje/variable mida valores negativos.


CÓDIGO:

/*
www.diymakers.es
by A.García
10/08/14
Sensores en entradas analógicas de Arduino
*/
#define pin_sensor A5 //Pin del sensor
float adc; //Variable para obtener los valores en el 1 paso
float voltaje; //Variable para obtener el voltaje en el 2 paso
float variable; //Variable final del sensor en el 3 paso
float rel_voltaje_variable = 40.00; //Relación Voltaje/Variable del sensor
float offset = 1.00; //Offset
void setup(){
Serial.begin(9600);
}
void loop(){
//Paso 1, conversión ADC de la lectura del pin analógico
adc = analogRead(pin_sensor);
Serial.println(adc);
//Paso 2, obtener el voltaje
voltaje = adc * 5 / 1023;
Serial.println(voltaje);
//Paso 3, obtener la variable de medida del sensor
variable = ((voltaje - offset) * rel_voltaje_variable);
Serial.println(variable);
delay(1000);
}


2.- EL SENSOR DE HUMEDAD y TEMPERATURA ATMOSFÉRICA DHT11
Realizar un montaje que mida temperatura y humedad mediante el sensor DHT11.



Tarjeta con sensor de humedad DHT11 resistivo ideal para sistemas de medición climatológicos o para controles de temperatura y humedad. Este sensor además incluye un sensor interno de temperatura NTC. Este módulo tiene una gran relación señal a ruido ante la interferencia y es muy durable. Cada elemento DHT11 se calibra estrictamente en el laboratorio que es extremadamente preciso en calibración de humedad. Los coeficientes de calibración se almacenan como programas en la memoria OTP, que son utilizados por el proceso de detección de la señal interna del sensor.
DataSheet: http://www.micropik.com/PDF/dht11.pdf

Características

  • Voltaje de Alimentación: 3V-5.5V
  • Corriente de Alimentación: en medición de 0.5mA-2.5mA
  • Stand by: 100uA-150uA
  • Alcance de medición: 20-90% humedad/ 0-50°C
  • Temperatura de precisión: ±2°C

Material:

  • Arduino UNO
  • Cables macho-hembra
  • Sensor de Humedad atmosférica DHT11

Librería

Para la utilizar este modulo es necesario descargar una librería llamada “DHT.h” que se puede descargar desde la propia IDE. (También puedes descargar una parecida donde podrás usar los ejemplos que inorpora en este link: DHT11.
Abrirá una nueva ventana en la cual aparecen los archivos relacionados con esta biblioteca. Seleccionas Download ZIP, ya que las descargues agrégala a la carpeta de librerías de Arduino.


Diagrama de conexión

El diagrama de conexión para el sensor DHT11 es muy sencillo basta con alimentarlo y mandar la señal al pin 2 del Arduino UNO
Y con esto el sensor DHT11  haremos un muestreo cada dos segundos de la Humedad y Temperatura

CÓDIGO
#include "DHT.h"          //cargamos la librería DHT
#define DHT_PIN 2         //Pin2 para conectar el el sensor
#define DHTTYPE DHT11     //Se selecciona el DHT11 (hay otros DHT)
DHT dht(DHT_PIN, DHTTYPE); //Se inicia variable para comunicarse con el sensor

void setup() {
Serial.begin(9600);         //Se inicia la comunicación serial
dht.begin();                //Se inicia el sensor
}

void loop() {
float h = dht.readHumidity();      //Leemos y monitorizamos variables
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {   //"OR" este bloque se puede quitar
Serial.println("Fallo al leer el sensor DHT11");
return;
}
Serial.println("Humedad: ");
Serial.println(h);
Serial.println("Temperatura: ");
Serial.println(t);
delay(2000);  //Se espera 2sg para seguir leyendo más datos