lunes, 9 de junio de 2025

PANTALLAS LCD EN ARDUINO

 

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

INTELIGENCIA ARTIFICIAL APLICADA A LA ROBOTICA

  🤖 Inteligencia Artificial Aplicada a la Robótica y Arduino 1. 🧠 ¿Qué es la Inteligencia Artificial (IA)? La Inteligencia Artificia...