LCD
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() { }
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() { }
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.
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);
}