martes, 4 de febrero de 2014

Tutorial - LCD + Sensor de Temperatura (Termómetro de ambiente)






El objetivo de este tutorial es modelar y programar un termómetro de exteriores. Para ello representaremos los datos medidos mediante un sensor de temperatura LM35 en un LCD de 16x2.

Los componentes que vamos a utilizar serán:

1 x Protoboard
1 x Arduino UNO (controlador)
1 x Sensor de temperatura LM35
1 x Potenciómetro (resistencia Variable)
1 x Resistencia de 220 ohmios
1 x LCD de 16 x 2



Cables

Para comenzar nuestro montaje prepararemos la protoboard. Primeramente conectaremos un cable uniendo nuestro polo positivo de la protoboard con el PIN 5V. El negativo de la protoboard lo conectaremos con GND en nuestro controlador. Por último y para evitar problemas futuros realizaremos dos puentes en la mitad de la board para unir las filas de positivos entre sí y de negativos entre sí.

Ahora que ya tenemos la protoboard preparada colocaremos la LCD. Para ello la LCD debe prepararse previamente para poder conectarla a una protoboard. Si te perdiste éste tutorial puedes acceder a él aquí.


Colocaremos la LCD con los pines como en la imagen ajustándola lo máximo posible a la parte derecha dejando espacio para el resto de componentes. Después, colocaremos nuestro potenciómetro y nuestro sensor más o menos como se muestra en la imagen.


Ya hemos colocado todos los componentes en nuestra protoboard, así que nos dispondremos a comenzar con las conexiones.

Comenzaremos conectando el contraste de la pantalla LCD. Esta parte afecta a los componentes Potenciómetro y LCD. Conectaremos la pata de la izquierda del potenciómetro a la fila de positivos de la protoboard (5V). A la pata de la derecha del potenciómetro le conectaremos un cable que una dicha pata con la fila negativa de la protoboard (GND). La pata del centro es la que interacciona con la LCD. Conectaremos la pata central con el PIN tercero de la LCD (empezando por la izquierda mirando el croquis)



Ahora pasaremos a conectar el sensor de temperatura. Para ello, según la disposición del croquis adjunto, conectaremos la pata de la izquierda del sensor con la izquierda del potenciómetro. De igual forma, conectaremos la pata de la derecha del potenciómetro con la pata derecha del sensor de temperatura. Ambos componentes se conectan mediante las patas de los extremos al negativo-positivo de la protoboard respectivamente. En cuanto a la pata central del sensor de temperatura la conectaremos al PIN Analógico de nuestro Arduino UNO A0 dado que el sensor recoge un dato numérico.

Por último nos quedará la conexión del LCD a nuestro controlador. Los pines de la LCD 1, 2, 5, 15 y 16 van conectados a la protoboard (empezando por la izquierda). El 1, 5 y 16 van conectado al negativo de la protoboard (GND). El 2 va conectado mediante un cable a la fila positiva de la protoboard (5V). Por último el 15 va conectado mediante la resistencia de 220 ohmios a la fila positiva (5V). Los pines 4, 6, 11, 12, 13, 14 irán conectados a nuestro Arduino de la siguiente forma:

4 LCD -> PIN 12
6 LCD -> PIN 11 (PWM)
11 LCD -> PIN 5 (PWM)
12 LCD -> PIN 4
13 LCD -> PIN 3 (PWM)
14 LCD -> PIN 2.



Ahora es el turno del Software:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//Hasta aquí hemos declarado la librería para la LCD y los pines por donde le va a entrar la información.

float centi()
{// Funcion para leer el dato analogico y convertirlo a digital:

  int dato;
  float c;
  dato=analogRead(A0);
  
  c = (500.0 * dato)/1023;

  //Esta fórmula sale de la relación del sensor con los grados. Ésta es fácilmente rastreable por la web pero vamos a intentar explicarla un poco: El sensor de temperatura LM35 responde a variaciones de 10 mV por cada grado centígrado. Si el sensor detecta 1 grado centígrado a la salida del sensor obtendríamos 10 mV. Ejemplo: 26,4ºC = 264 mV = 0.264 V.
Tenemos que el convertidor de analógico a digital es de 10 bits de resolución, los valores variarán entre 0 y 1023, entonces Vout= (5V*Dato)/1023 siendo  ( 0 < Dato < 1023 ) y para ajustar la escala a grados centígrados: Vout = ((5V*Dato)*100)/1023
  return (c);
}

float kelvin(float cent)
{
  float k;
  k=cent+273.15;
  return(k);
  
}

float fahren(float cent)
{
  float f;
  f=cent*1.8+32;
  return (f);
  

}

float rankin(float cent)
{
  float r;
  r=(cent + 273.15)*1.8;
  return (r);
}

//Hasta aquí hemos declarado las funciones de conversión del dato analógico de entrada del sensor en grados celsius en sus respectivas equivalencias.

void setup() {
  // Definimos la LCD con dimension 2x16 y definimos los caracteres que deben salir en las filas:
lcd.begin(16,2);
lcd.print("C=      K=");
lcd.setCursor(0,1);
lcd.print("Temperatura");
}

//Hasta aquí hemos definido qué queremos que salga impreso por la pantalla y el tamaño de ésta.
void loop() {
  // put your main code here, to run repeatedly: 
  float Centigrados = centi();
  float Fahrenheit = fahren (Centigrados);
  float Rankin = rankin (Centigrados);
  float Kelvin = kelvin (Centigrados);
  
  lcd.setCursor(2,0);
  lcd.print(Centigrados);
  
  lcd.setCursor(10,0);
  lcd.print(Kelvin);
  
  
  delay(200);
  //Por último, hemos usado la parte activa del programa o bucle para que constantemente para cada variación recalcule los datos. 
  
}

A continuación os dejo un vídeo del funcionamiento del termómetro:



Espero que el tutorial de hoy haya sido de vuestro agrado y ya sabéis, para cualquier duda comentad más abajo.

C.