PANTALLAS LCD EN ARDUINO
Teoría:
Pantallas LCD para Robótica con Arduino
1.
¿Qué es una pantalla LCD?
LCD
son las siglas de Liquid Crystal Display (Pantalla de Cristal
Líquido). Es un tipo de pantalla plana que utiliza las propiedades de los
cristales líquidos para mostrar información.
·
Principio Básico: Los cristales líquidos no emiten luz por sí mismos. En su lugar,
manipulan la luz que pasa a través de ellos. Al aplicar una pequeña corriente
eléctrica, estos cristales se alinean de una forma específica, bloqueando o
permitiendo el paso de la luz de una fuente trasera (llamada backlight).
·
Tipos Comunes en Arduino: Las más populares son las pantallas de
caracteres, como la 16x2 (16 caracteres, 2 filas) o
la 20x4 (20 caracteres, 4 filas). Estas son ideales para
mostrar texto y datos simples.
2.
¿Por qué son tan útiles en Robótica?
Las
pantallas LCD son un componente fundamental en la robótica por varias razones:
1. Depuración (Debugging): Permiten mostrar en
tiempo real los valores de sensores, el estado de variables o mensajes de error
sin necesidad de tener el robot conectado a un ordenador. Esto es vital cuando
el robot se mueve de forma autónoma.
o
Ejemplo: Puedes ver la distancia exacta que mide un sensor ultrasónico
mientras el robot explora.
2. Interfaz de Usuario (UI): Proporcionan una forma
de comunicación directa entre el robot y el usuario.
o
Ejemplo: Mostrar mensajes como "Batería baja", "Obstáculo
detectado" o "Moviendo adelante".
3. Visualización de Datos: Muestran información
relevante del entorno o del estado interno del robot.
o
Ejemplo: Un robot meteorológico podría mostrar la temperatura y la
humedad actuales.
4. Autonomía: El robot puede informar
sobre su estado y tomar decisiones mostrando menús o pidiendo confirmación al
usuario sin depender de una conexión externa.
3.
Conexión con Arduino: Paralelo vs. I2C
Existen
dos formas principales de conectar una LCD a un Arduino:
·
Conexión en Paralelo:
o
Descripción: Es la forma tradicional. Se conectan directamente varios pines de
la LCD (RS, E, D4, D5, D6, D7, etc.) a los pines digitales del Arduino.
o
Desventaja: ¡Usa muchos pines! Generalmente entre 6 y 11 pines digitales, lo
cual es un problema en proyectos de robótica donde los pines son escasos.
·
Conexión con Módulo I2C (Recomendada):
o
Descripción: Se utiliza un pequeño módulo adaptador que se suelda a la parte
trasera de la LCD. Este módulo se comunica con el Arduino usando el protocolo
I2C.
o
Ventaja: ¡Solo
utiliza 2 pines de datos (SDA y SCL) más la alimentación (5V y GND)! Esto
libera una gran cantidad de pines en el Arduino para otros componentes como
motores y sensores. En la placa Arduino UNO, estos pines son A4 (SDA) y A5
(SCL).
4.
La Librería: LiquidCrystal_I2C
Para
facilitar el uso de estas pantallas, no programamos todo desde cero. Usamos
una librería, que es un conjunto de código preescrito. La más común
para pantallas con módulo I2C es LiquidCrystal_I2C.h.
Funciones
Clave:
·
lcd.init(): Inicia la comunicación con la pantalla.
·
lcd.backlight(): Enciende la luz de fondo.
·
lcd.clear(): Borra todo el contenido de la pantalla.
·
lcd.setCursor(columna, fila): Mueve el cursor a una posición
específica. Importante: La numeración empieza en 0. (Ej: lcd.setCursor(0,
0) es la primera columna de la primera fila).
·
lcd.print("Texto"): Escribe el texto o el valor de una
variable en la posición actual del cursor.
Pequeño
Ejemplo Práctico: Medidor de Distancia para un Robot
Objetivo: Crear un sistema simple
que mida la distancia con un sensor ultrasónico y la muestre en una pantalla
LCD 16x2. Esto simula cómo un robot "ve" y comunica la distancia a un
obstáculo.
Materiales
Necesarios:
·
Arduino UNO (o similar)
·
Pantalla LCD 16x2 con módulo I2C
·
Sensor Ultrasónico HC-SR04
·
Protoboard (placa de pruebas)
·
Cables Jumper
Esquema
de Conexión:
1. Pantalla LCD I2C:
o
GND -> GND del Arduino
o
VCC -> 5V del Arduino
o
SDA -> Pin A4 del Arduino
o
SCL -> Pin A5 del Arduino
2. Sensor Ultrasónico HC-SR04:
o
GND -> GND del Arduino
o
VCC -> 5V del Arduino
o
Trig -> Pin digital 9 del Arduino
o
Echo -> Pin digital 10 del Arduino
Código
Arduino:
Nota: Antes de subir el
código, asegúrate de tener instalada la librería LiquidCrystal_I2C. Puedes
hacerlo desde el Gestor de Librerías del IDE de Arduino (Herramientas >
Administrar Bibliotecas...).
//
Incluir las librerías necesarias
#include
<Wire.h> // Librería para la comunicación I2C
#include
<LiquidCrystal_I2C.h> // Librería para la pantalla LCD I2C
//
--- Configuración de la Pantalla LCD ---
//
La dirección I2C suele ser 0x27 o 0x3F. Si no funciona,
//
puedes usar un "I2C Scanner" para encontrar la dirección correcta.
LiquidCrystal_I2C
lcd(0x27, 16, 2); // Dirección I2C, 16
columnas, 2 filas
//
--- Configuración del Sensor Ultrasónico ---
const
int pinTrig = 9; // Pin para el
disparador (Trigger)
const
int pinEcho = 10; // Pin para el eco (Echo)
//
Variables para almacenar la duración del pulso y la distancia
long
duracion;
int
distancia;
void
setup() {
// Iniciar la pantalla LCD
lcd.init();
lcd.backlight(); // Encender la luz de fondo
// Mostrar un mensaje de bienvenida
lcd.setCursor(0, 0); // Posición (columna 0,
fila 0)
lcd.print("Medidor Robotico");
delay(2000); // Esperar 2 segundos
lcd.clear(); // Limpiar la pantalla
// Configurar los pines del sensor
pinMode(pinTrig, OUTPUT);
pinMode(pinEcho, INPUT);
}
void
loop() {
// 1. Generar el pulso ultrasónico
digitalWrite(pinTrig, LOW);
delayMicroseconds(2);
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrig, LOW);
// 2. Medir el tiempo que tarda en volver el
eco
duracion = pulseIn(pinEcho, HIGH);
// 3. Calcular la distancia en centímetros
// Fórmula: distancia = (duración *
velocidad_del_sonido) / 2
// Velocidad del sonido ~ 0.034
cm/microsegundo
distancia = duracion * 0.034 / 2;
// 4. Mostrar la información en la pantalla
LCD
lcd.setCursor(0, 0); // Ir a la primera línea
lcd.print("Distancia:");
lcd.setCursor(0, 1); // Ir a la segunda línea
lcd.print(distancia); // Imprimir el valor de la
distancia
lcd.print(" cm "); // Imprimir las unidades y espacios
para borrar datos viejos
delay(500); // Esperar medio segundo antes de
la siguiente medición
}
No hay comentarios:
Publicar un comentario