LCD

LCD 

 ÍNDICE:
0.- TEORÍA: PANTALLAS LCD
1.- LCD+KEYPAD 
2.- LCD 16X2 Y TEXTOS SIMPLES.



 0.- TEORÍA: PANTALLAS LCD

Una pantalla de cristal líquido o LCD (sigla del inglés liquid crystal display) es una pantalla delgada y plana formada por un número de píxeles en color o monocromos colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos electrónicos de pilas, ya que utiliza cantidades muy pequeñas de energía eléctrica.
 Cada píxel de un LCD típicamente consiste en una capa de moléculas alineadas entre dos electrodos transparentes, y dos filtros de polarización, los ejes de transmisión de cada uno que están (en la mayoría de los casos) perpendiculares entre sí. Sin cristal líquido entre el filtro polarizante, la luz que pasa por el primer filtro sería bloqueada por el segundo (cruzando) polarizador.

 las pantallas LCD que es una tecnología que se usa en algunos smartphones, monitores y TVs. Lo genial es que pueden mostrar muchos colores y se refrescan rápidamente para poder ver animaciones y demás contenido visual como los vídeos o los juegos, por ejemplo. Por esta razón, la batería de una tablet dura mucho menos tiempo que la de un eReader. Además, las LCD tienen una luz en el fondo que es la que las ilumina.



1.- EL MÓDULO "LCD CON KEYPAD"



 http://arduinolearning.com/code/bmp085-temperature-readings-lcd.php


TEXTOS SIMPLES 
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0,1);
lcd.write("Hola MUNDO!");
}
void loop() { }


LCD+KEYPAD COMO CONTADOR
#include <LiquidCrystal.h>
//Ejemplo reeditado por Carlos Vela en Guadamur-Toledo a fecha del 29/09/16
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);  //indicamos los pins del lcd 16x2
void setup() {
  lcd.begin(16, 2);     // establecemos el numero de columnas y filas del display
  lcd.print("IES Carlos iii");  // enviamos el mensaje FIJO a mostrar en el display
}
void loop() {
  lcd.setCursor(0, 1); // la linea 1 es la segunda fila, empieza a contar en 0
  lcd.print(millis()/1000); //dentro del bucle contamos segundos
}

LCD+KEYPAD Y DHT11
#include <LiquidCrystal.h>
#include <DHT.h>
//Codigo creado por Carlos Vela a fecha del 29/09/16 en Guadamur-Toledo
//librería LiquidCrystal.h directamente de arduino.cc
//librería DHT.h  descargable en arduino.cc
#define DHTPIN 2 //pin de entrada digital
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
void setup() {
lcd.begin(16, 2); //establecemos filas y columnas del display
dht.begin(); //Se inicia el sensor
}
void loop(){
  float h = dht.readHumidity(); //se lee la humedad
  float t= dht.readTemperature(); // se lee la temperatura
  lcd.setCursor(0, 0);
  lcd.print("Humd.: ");
  lcd.print(h);
  lcd.setCursor(0, 1);
  lcd.print("Temp. :");
  lcd.print(t);
}


ESCRITURA CON SU KEYPAD
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
int adc_key_val[5] = {50, 200, 400, 600, 800 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
boolean luzEncendida=true;
boolean cursorActivo=false;
unsigned long time;
int x=0;
char caracterActual = 'A';
void setup() {
  lcd.clear();
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("IES Carlos iii");
  time = millis();
  //  pinMode(10, OUTPUT);
}

void loop(){
  if (millis()-time > 10000) {  // Si han pasado mas de 10 segundos apagamos la luz
    pinMode(10, OUTPUT);
    digitalWrite(10, LOW);
    luzEncendida=false;
  }
  if (millis()-time > 5000) {  // Si han pasado mas de 5 segundos apagamos el cursor
    lcd.noBlink();
    cursorActivo=false;
  }

  adc_key_in = analogRead(0);    // Leemos el valor de la pulsacion
  key = get_key(adc_key_in);    // Obtenemos el boton pulsado
  if (key != oldkey)   // if keypress is detected
  {
    delay(50);  // Espera para evitar los rebotes de las pulsaciones
    adc_key_in = analogRead(0);    // Leemos el valor de la pulsacion
    key = get_key(adc_key_in);    // Obtenemos el boton pulsado
    if (key != oldkey)  
    {
      time = millis();  // TODO: falta la comprobacion de si se ha desbordado el tiempo
      if (!luzEncendida) {  // Al pulsar cualquier tecla encendemos la pantalla
        pinMode(10, INPUT);
        luzEncendida=true;
      }
      else {  // si la pantalla esta encendida seguimos funcionando normalmente
        lcd.setCursor(x, 1);
        oldkey = key;
        if (key >=0){  // Si se ha pulsado cualquier tecla
          lcd.blink();  // Mostramos el cursor parpadeando
          cursorActivo=true;
        }
        if (key == 0){  // Se ha pulsado la tecla derecha
          x++;
          if (x>15) x=15;
          caracterActual='A';
        }
        if (key == 1) {  // Se ha pulsado la tecla arriba
          caracterActual++;
          if (caracterActual > 'Z') caracterActual='Z';
          lcd.write(caracterActual);
        }
        if (key == 2) {  // Se ha pulsado la tecla abajo
          caracterActual--;
          if (caracterActual < 'A') caracterActual='A';
          lcd.write(caracterActual);
        }
        if (key == 3) {  // Se ha pulsado la tecla izquierda
          x--;
          if (x<0) x=0;
          caracterActual='A';
        }
        if (key == 4){  // Se ha pulsado la tecla de seleccion
        }
        lcd.setCursor(x, 1);
      }
    }
  }
  delay(100);
}
// Convertimos el valor leido en analogico en un numero de boton pulsado
int get_key(unsigned int input){
  int k;
  for (k = 0; k < NUM_KEYS; k++)  {
    if (input < adc_key_val[k])  {
      return k;
    }
  }
  if (k >= NUM_KEYS)k = -1;  // Error en la lectura
  return k;
}


CODIGO CON TEMPERATURA BMP085
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <LiquidCrystal.h>
Adafruit_BMP085 bmp;
// Connections: Sainsmart LCD/Keypad shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
//Serial.begin(9600);
delay(1000);
//setup the LCD
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0);
lcd.print(“Temperature”);
//debug the bmp085 sensor
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println(“Could not find a BMP085 sensor!”);
while (1) {}
}
}
void loop()
{
//read temperature and output via LCD
lcd.setCursor(0,1);
lcd.print(bmp.readTemperature());
delay(1000);
}




3.- LCD 16X2 Y TEXTOS SIMPLES POR ARDUINO.


CONEXIÓN LCD 16X2 CON ARDUINO:
  • VSS que es el pin de negativo o masa o 0 volts o GND.
  • VDD es la alimentación principal de la pantalla y el chip, lleva 5 voltios (recomendable ponerle en serie una resistencia para evitar daños, con una de 220 ohmnios es suficiente).
  • VO es el contraste de la pantalla, debe conectarse con un potenciometro de unos 10k ohms o una resistencia fija una vez que encontremos el valor deseado de contraste. Tengan en cuenta que si no conectan esto, no verán nada.
  • RS es el selector de registro (el microcontrolador le comunica a la LCD si quiere mostrar caracteres o si lo que quiere es enviar comandos de control, como cambiar posición del cursor o borrar la pantalla, por ejemplo).
  • RW es el pin que comanda la lectura/escritura. En nuestro caso siempre estará en 0 (conectado a GND) para que escriba en todo momento.
  • E es enable, habilita la pantalla para recibir información.
  • D0~D3 no los vamos a utilizar. Como pueden ver la pantalla tiene un bus de datos de 8 bits, de D0 a D7. Nosotros solamente utilizaremos 4 bits, de D4 a D7, que nos servirán para establecer las líneas de comunicación por donde se transfieren los datos.
  • A y K son los pines del led de la luz de fondo de la pantalla. A se conectará a 4 o 5 volts y K a gnd.

PRIMER PASO: ENCENDIDO
Primero que todo, la pantalla necesitará ser alimentada.
Conexión: Arduino GND   >> PIN1 LCD (VSS)
Conexión: Arduino 5V   >> PIN2 de la LCD (VDD)
Conexión: Arduino 5V   --> PIN15 de la LCD (A)
Conexión: Arduino  GND --> PIN16 de la LCD (K)

Para probar la correcta conexión, encenderemos la placa Arduino UNO mediante el cable USB al ordenador y veremos que la pantalla LCD se ilumina.

SEGUNDO PASO: POTENCIÓMETRO.
El siguiente paso es la introducción del potenciómetro, para ajustar el contraste de la pantalla. En mi caso he utilizado un potenciómetro de 50Kohmnios, pero uno de 10k también es válido.
Conexión: primer pin del potenciómetro---> GND de  Arduino.

Conexión: pin de en medio potenciómetro --> PIN3 de la pantalla LCD (VO)

Conexión: tercer pin del potenciómetro---> 5Vde Arduino.

Cuando la placa Arduino esté alimentada (conexión USB-PC), se verá por pantalla caracteres en forma de cuadrado en la fila de arriba. Prueba a ajustar con el potenciómetro y verificar que todo funciona correctamente.

TERCER PASO: TEXTOS
Vamos a conectar la pantalla LCD a la placa Arduino UNO para que se pueda mostrar el mensaje de texto que queramos.
Conexión: pin 4 de la LCD (RS)---> pin 7 del arduino (salida digital, PWM)

Conexión: pin 5 de la LCD (RW) --> GND
Conexión: pin 6 de la LCD (E)--> pin 8 de la placa Arduino UNO (PWM)
Conexión: pin 11 de la LCD (D4)--> pin 9 de la placa Arduino UNO (PWM)
Conexión: pin 12 de la LCD (D5)--> pin 10 de la placa Arduino UNO (PWM)
Conexión: pin 13 de la LCD (D6)--> pin 11 de la placa Arduino UNO (PWM)

Conexión: pin 14 de la LCD (D7)--> pin 12 de la placa Arduino UNO (PWM)


 

CÓDIGO PARA TEXTOS SIMPLES:
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0,1);
lcd.write("El cajon de Ardu ");
}
void loop() { }

  •  Si  los caracteres no son  legibles revisa las conexiones del potenciómetro.
  • Se pueden cambiar los pines digitales que se van a usar de arduino (en nuestro caso hemos utilizado del 7 al 12).
  • En la orden "lcd.begin()" definimos el tamaño de nuestra pantalla LCD, en nuestro caso 16x2.
  • En la orden "lcd.setCursor()" escogemos dónde escribimos, siendo (0,0) para escribir en la fila de arriba y (0,1) en la fila de abajo.
  • En la orden "lcd.witre(" ")", escribimos el texto a mostar en pantalla.



LCD 16X2 Y VISUALIZACIÓN DE LA TEMPERATURA.


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.

Utilizaremos las conexiones de datos del LCD del ejemplo anterior. Y el montaje del sensor de temperatura según  el siguiente  gráfico.


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



CÓDIGO
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);  //LCD con los pines de entrada información
void setup() {
lcd.begin(16,2);            //definimos las celdas y filas  de nuestro LCD
lcd.setCursor(0,0);       //posicionamos el cursor donde queremos que escriba
lcd.print("Temperatura:");
lcd.setCursor(0,1);
lcd.print("C=      K=");
}
void loop() {
  float Centigrados = centi();
  float Kelvin = kelvin (Centigrados);
  lcd.setCursor(2,1);
  lcd.print(Centigrados,1); //con un decimal
  lcd.setCursor(10,1);
  lcd.print(Kelvin,1);  //con un decimal
  delay(2000);
 }
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.
  //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: 200mv=0,2V=20ºC o 265mV=0.265V=26,5ºC
  //Luego, 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);
  }