Introducción
El Display LCD Color TFT 2.4" Shield Arduino es una pantalla táctil resistiva de alta calidad diseñada específicamente para trabajar con placas Arduino UNO y Mega2560. Este módulo integra un controlador ILI9341 que permite mostrar gráficos, imágenes y texto en una pantalla de 2.4 pulgadas con resolución de 320×240 píxeles y capacidad para mostrar 65,536 colores.
Este shield es ideal para proyectos de electrónica que requieren una interfaz gráfica de usuario, visualización de datos en tiempo real, datalogging con tarjeta SD, y aplicaciones que necesitan interacción táctil.
Características Principales
Especificaciones Técnicas
| Parámetro | Valor |
|---|---|
| Tamaño de pantalla | 2.4 pulgadas |
| Tipo de panel | TFT (Thin Film Transistor) |
| Controlador | ILI9341 |
| Resolución | 320×240 píxeles |
| Área activa | 48.96×36.72 mm |
| Colores | 65,536 (16-bit RGB) |
| Brillo | 500 cd/m² |
| Interfaz | Paralela de 8 bits |
| Tensión de alimentación | 5V / 3.3V |
| Consumo de potencia | 0.67W |
| Temperatura de funcionamiento | -20°C ~ 60°C |
| Temperatura de almacenamiento | -30°C ~ 70°C |
| Peso | 39g (con embalaje) |
| Dimensiones PCB | 72.20×52.7 mm |
Funcionalidades Destacadas
- ✅ Plug & Play: Compatible con Arduino UNO y Mega2560 sin necesidad de cableado adicional
- ✅ Pantalla táctil resistiva: Panel de 4 hilos para interacción directa
- ✅ Ranura para tarjeta MicroSD: Ideal para datalogging y almacenamiento de imágenes
- ✅ Bus de datos paralelo de 8 bits: Mayor velocidad de refresco que interfaces SPI
- ✅ Convertidores de nivel integrados: Compatible con tensiones de 5V y 3.3V
- ✅ Librería Arduino completa: Incluye programas de ejemplo para todas las funcionalidades
- ✅ Estándar militar: Construcción robusta para funcionamiento estable a largo plazo
Pinout y Definición de Pines
Conector Principal (20 pines)
| Número | Etiqueta | Descripción |
|---|---|---|
| 1 | LCD_RST | Señal de reset del bus LCD, reset por nivel bajo |
| 2 | LCD_CS | Señal de selección de chip del bus LCD, habilitado por nivel bajo |
| 3 | LCD_RS | Selección de comando/dato del bus LCD: nivel bajo=comando, nivel alto=dato |
| 4 | LCD_WR | Señal de escritura del bus LCD |
| 5 | LCD_RD | Señal de lectura del bus LCD |
| 6 | GND | Tierra de alimentación |
| 7 | 5V | Entrada de alimentación 5V |
| 8 | 3V3 | Entrada de alimentación 3.3V (pin desconectable) |
| 9 | LCD_D0 | Bit 0 del bus de datos de 8 bits del LCD |
| 10 | LCD_D1 | Bit 1 del bus de datos de 8 bits del LCD |
| 11 | LCD_D2 | Bit 2 del bus de datos de 8 bits del LCD |
| 12 | LCD_D3 | Bit 3 del bus de datos de 8 bits del LCD |
| 13 | LCD_D4 | Bit 4 del bus de datos de 8 bits del LCD |
| 14 | LCD_D5 | Bit 5 del bus de datos de 8 bits del LCD |
| 15 | LCD_D6 | Bit 6 del bus de datos de 8 bits del LCD |
| 16 | LCD_D7 | Bit 7 del bus de datos de 8 bits del LCD |
| 17 | SD_SS | Señal de selección de chip SPI de la tarjeta SD, habilitado por nivel bajo |
| 18 | SD_DI | Señal MOSI del bus SPI de la tarjeta SD |
| 19 | SD_DO | Señal MISO del bus SPI de la tarjeta SD |
| 20 | SD_SCK | Señal de reloj del bus SPI de la tarjeta SD |
Mapeo de Pines con Arduino UNO
| Pin Shield | Pin Arduino UNO | Función |
|---|---|---|
| LCD_D0 | D2 | Datos LCD Bit 0 |
| LCD_D1 | D3 | Datos LCD Bit 1 |
| LCD_D2 | D4 | Datos LCD Bit 2 |
| LCD_D3 | D5 | Datos LCD Bit 3 |
| LCD_D4 | D6 | Datos LCD Bit 4 |
| LCD_D5 | D7 | Datos LCD Bit 5 |
| LCD_D6 | D8 | Datos LCD Bit 6 |
| LCD_D7 | D9 | Datos LCD Bit 7 |
| LCD_RS | D10 | Comando/Dato |
| LCD_WR | D11 | Escritura |
| LCD_RD | D12 | Lectura |
| LCD_CS | D13 | Selección de chip |
| LCD_RST | A0 | Reset |
| SD_SS | A1 | Selección SD |
| SD_DI | A2 | MOSI SD |
| SD_DO | A3 | MISO SD |
| SD_SCK | A4 | Clock SD |
Mapeo de Pines con Arduino Mega2560
| Pin Shield | Pin Arduino Mega | Función |
|---|---|---|
| LCD_D0 | D22 | Datos LCD Bit 0 |
| LCD_D1 | D23 | Datos LCD Bit 1 |
| LCD_D2 | D24 | Datos LCD Bit 2 |
| LCD_D3 | D25 | Datos LCD Bit 3 |
| LCD_D4 | D26 | Datos LCD Bit 4 |
| LCD_D5 | D27 | Datos LCD Bit 5 |
| LCD_D6 | D28 | Datos LCD Bit 6 |
| LCD_D7 | D29 | Datos LCD Bit 7 |
| LCD_RS | D30 | Comando/Dato |
| LCD_WR | D31 | Escritura |
| LCD_RD | D32 | Lectura |
| LCD_CS | D33 | Selección de chip |
| LCD_RST | A0 | Reset |
| SD_SS | A1 | Selección SD |
| SD_DI | A2 | MOSI SD |
| SD_DO | A3 | MISO SD |
| SD_SCK | A4 | Clock SD |
Hardware y Diseño
Controlador ILI9341
El ILI9341 es un controlador de pantalla TFT LCD de bajo consumo integrado en un solo chip. Sus características principales incluyen:
- Interfaz de sistema: Paralela (tipo 8080), SPI (3-wire/4-wire)
- Resolución máxima: 240×320 píxeles
- Paleta de colores: 18-bit (262,144 colores) con selección de 16-bit
- RAM de pantalla: 172KB (240×320×16 bits)
- Área de visualización: Soporta múltiples orientaciones
- Funciones integradas:
- Scroll de pantalla
- Espejo horizontal/vertical
- Rotación de 0°, 90°, 180°, 270°
- Control de brillo y contraste
- Generador de tono (beep)
Pantalla Táctil Resistiva
El módulo incluye un panel táctil resistivo de 4 hilos con las siguientes características:
- Tecnología: Resistiva de 4 hilos
- Superficie: Tratamiento anti-rasguños
- Precisión: ~95% del área activa
- Fuerza de activación: ~50-100g
- Controlador táctil: XPT2046 (comúnmente integrado)
Ranura para Tarjeta MicroSD
- Tipo: Lector MicroSD integrado
- Protocolo: SPI
- Compatibilidad: Tarjetas SD/SDHC hasta 32GB
- Voltaje: 3.3V
- Uso principal: Datalogging, almacenamiento de imágenes, fuentes de datos
Convertidores de Nivel
El shield incorpora convertidores de nivel 5V/3.3V en el bus de datos, permitiendo:
- Compatibilidad con Arduino UNO (5V)
- Compatibilidad con Arduino Due y otros de 3.3V
- Protección de los componentes sensibles
Instalación y Configuración
Requisitos del Sistema
- Arduino IDE: Versión 1.8.x o superior
- Sistema operativo: Windows, macOS, Linux
- Placas compatibles: Arduino UNO, Arduino Mega2560
- Tarjeta MicroSD: Formateada en FAT32 (recomendado)
Pasos de Instalación
Paso 1: Descargar las Librerías
Descarga el paquete de prueba desde el sitio oficial del fabricante. Las librerías necesarias incluyen:
- Adafruit_GFX: Biblioteca gráfica de Adafruit
- Adafruit_ILI9341: Driver específico para el controlador ILI9341
- SD: Biblioteca estándar para tarjetas SD
- SPI: Biblioteca de comunicación SPI
Paso 2: Instalar las Librerías en Arduino IDE
- Abre el Arduino IDE
- Navega a
Programa→Incluir Librería→Gestionar Librerías - Busca e instala:
Adafruit GFX LibraryAdafruit ILI9341
- Para las librerías adicionales:
- Descomprime el paquete descargado
- Copia la carpeta
librariesa tu directorio de proyectos de Arduino - La ruta típica es:
Documentos/Arduino/libraries/
Paso 3: Conectar el Shield
- Apaga tu placa Arduino antes de conectar el shield
- Alinea cuidadosamente los pines del shield con los conectores de la placa Arduino
- Presiona suavemente hasta que el shield quede firmemente conectado
- Nota: El shield también es compatible con Arduino Mega2560
Paso 4: Configurar la Librería
Antes de compilar cualquier ejemplo, debes configurar los pines en la librería:
// En la carpeta de la librería Adafruit_ILI9341
// Abre el archivo "Adafruit_ILI9341.h" o crea un archivo de configuración
// Definición de pines para Arduino UNO
#define TFT_CS 10
#define TFT_DC 9
#define TFT_MOSI 11
#define TFT_SCLK 13
#define TFT_RST 8
// Para modo paralelo (este shield)
// Los pines están definidos internamente en la librería
Paso 5: Compilar y Subir el Programa
- Abre un ejemplo desde
Archivo→Ejemplos→Adafruit_ILI9341 - Selecciona tu placa en
Herramientas→Placa - Selecciona el puerto serial correcto
- Haz clic en
Subir(Ctrl+U)
Programación y Ejemplos
Configuración Básica
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SPI.h>
#include <SD.h>
// Definición de pines (para modo paralelo, usar librería específica)
#define TFT_CS 10
#define TFT_DC 9
#define TFT_RST 8
// Inicializar display
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
void setup() {
Serial.begin(9600);
// Inicializar pantalla
tft.begin();
// Configurar rotación (0, 1, 2, 3)
tft.setRotation(1);
// Rellenar pantalla con color
tft.fillScreen(ILI9341_BLACK);
// Mostrar texto
tft.setCursor(0, 0);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("¡Hola Mundo!");
}
void loop() {
// Código principal
}
Dibujar Formas
void dibujarFormas() {
// Línea
tft.drawLine(0, 0, 239, 319, ILI9341_RED);
// Rectángulo
tft.drawRect(10, 10, 100, 50, ILI9341_BLUE);
// Rectángulo relleno
tft.fillRect(120, 10, 100, 50, ILI9341_GREEN);
// Círculo
tft.drawCircle(160, 160, 50, ILI9341_YELLOW);
// Círculo relleno
tft.fillCircle(160, 250, 40, ILI9341_MAGENTA);
// Triángulo
tft.drawTriangle(50, 100, 100, 50, 150, 100, ILI9341_CYAN);
}
Mostrar Imágenes desde SD
#include <SD.h>
#include <SPI.h>
#define SD_CS 10
void setup() {
Serial.begin(9600);
// Inicializar SD
if (!SD.begin(SD_CS)) {
Serial.println("¡Fallo en SD!");
return;
}
Serial.println("SD inicializada correctamente.");
// Inicializar pantalla
tft.begin();
tft.fillScreen(ILI9341_BLACK);
// Cargar y mostrar imagen
mostrarImagenSD("/imagen.bmp");
}
void mostrarImagenSD(const char* filename) {
File file = SD.open(filename);
if (!file) {
Serial.println("No se pudo abrir la imagen");
return;
}
// Leer y mostrar imagen BMP
// (Implementación específica según formato)
file.close();
}
void loop() {
// Código principal
}
Lectura del Táctil
#include <Adafruit_STMPE610.h> // Para controlador táctil XPT2046
#define TS_CS 8
Adafruit_STMPE610 ts = Adafruit_STMPE610(TS_CS);
void setup() {
Serial.begin(9600);
if (!ts.begin()) {
Serial.println("No se encontró el táctil");
return;
}
tft.begin();
tft.fillScreen(ILI9341_BLACK);
tft.println("Toca la pantalla...");
}
void loop() {
TS_Point p;
if (ts.touched()) {
p = ts.getPoint();
// Mapear coordenadas
int x = map(p.x, 3800, 200, 239, 0);
int y = map(p.y, 3800, 200, 319, 0);
Serial.print("X: ");
Serial.print(x);
Serial.print(" Y: ");
Serial.println(y);
tft.setCursor(0, 20);
tft.printf("X: %d Y: %d", x, y);
}
delay(50);
}
Paleta de Colores Disponibles
// Colores definidos en Adafruit_ILI9341
#define ILI9341_BLACK 0x0000
#define ILI9341_WHITE 0xFFFF
#define ILI9341_RED 0xF800
#define ILI9341_GREEN 0x07E0
#define ILI9341_BLUE 0x001F
#define ILI9341_CYAN 0x07FF
#define ILI9341_MAGENTA 0xF81F
#define ILI9341_YELLOW 0xFFE0
#define ILI9341_ORANGE 0xFD20
#define ILI9341_PURPLE 0x8010
#define ILI9341_NAVY 0x0010
#define ILI9341_LIME 0x07FF
#define ILI9341_DARKGREEN 0x03E0
#define ILI9341_DARKBLUE 0x000F
#define ILI9341_GRAY 0x8410
#define ILI9341_GREY 0x8410
#define ILI9341_BROWN 0xBCA0
// Crear colores personalizados
uint16_t color = tft.color565(r, g, b);
Aplicaciones Prácticas
1. Monitor de Sensores
Crea una interfaz gráfica para mostrar datos de sensores en tiempo real:
void mostrarSensor(int temperatura, int humedad) {
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.setCursor(10, 10);
tft.println("Monitor de Sensores");
tft.setTextSize(1);
tft.setTextColor(ILI9341_RED);
tft.setCursor(10, 40);
tft.print("Temp: ");
tft.print(temperatura);
tft.println(" °C");
tft.setTextColor(ILI9341_BLUE);
tft.setCursor(10, 60);
tft.print("Hum: ");
tft.print(humedad);
tft.println(" %");
// Gráfico de barras
dibujarGraficoBarras(temperatura, 0, 50, 10, 100, 100, 30);
}
2. Menú Táctil Interactivo
const int BOTON_Y = 50;
const int BOTON_ALTO = 40;
void mostrarMenu() {
tft.fillScreen(ILI9341_BLACK);
tft.setTextSize(2);
// Botón 1
tft.fillRect(20, BOTON_Y, 100, BOTON_ALTO, ILI9341_GREEN);
tft.setCursor(30, BOTON_Y + 15);
tft.setTextColor(ILI9341_BLACK);
tft.print("Opción 1");
// Botón 2
tft.fillRect(140, BOTON_Y, 100, BOTON_ALTO, ILI9341_BLUE);
tft.setCursor(150, BOTON_Y + 15);
tft.setTextColor(ILI9341_WHITE);
tft.print("Opción 2");
}
int detectarToque(int x, int y, int ancho, int alto, int posX, int posY) {
if (x >= posX && x <= posX + ancho &&
y >= posY && y <= posY + alto) {
return 1;
}
return 0;
}
3. Datalogger con SD
void guardarDatosSD(float temperatura, float humedad) {
File dataFile = SD.open("datos.csv", FILE_WRITE);
if (dataFile) {
dataFile.print(millis());
dataFile.print(",");
dataFile.print(temperatura);
dataFile.print(",");
dataFile.println(humedad);
dataFile.close();
tft.setTextColor(ILI9341_GREEN);
tft.println("Datos guardados");
} else {
tft.setTextColor(ILI9341_RED);
tft.println("Error al guardar");
}
}
4. Reloj Digital
void mostrarReloj(int horas, int minutos, int segundos) {
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_CYAN);
tft.setTextSize(4);
tft.setCursor(40, 100);
if (horas < 10) tft.print("0");
tft.print(horas);
tft.print(":");
if (minutos < 10) tft.print("0");
tft.print(minutos);
tft.print(":");
if (segundos < 10) tft.print("0");
tft.print(segundos);
}
Solución de Problemas
Problemas Comunes y Soluciones
| Problema | Posible Causa | Solución |
|---|---|---|
| Pantalla en negro | Alimentación incorrecta | Verificar conexión 5V y GND |
| Pantalla parpadea | Voltaje inestable | Usar fuente de alimentación externa |
| Texto ilegible | Configuración de pines incorrecta | Verificar definición de pines en código |
| Táctil no responde | Calibración necesaria | Ejecutar programa de calibración |
| SD no detectada | Formato incorrecto | Formatear SD en FAT32 |
| Imágenes distorsionadas | Orientación incorrecta | Ajustar setRotation() |
| Colores incorrectos | Configuración RGB/_BGR | Cambiar configuración en librería |
Depuración Serial
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("=== Inicialización TFT ===");
if (!SD.begin(SD_CS)) {
Serial.println("¡Fallo SD!");
} else {
Serial.println("SD OK");
}
tft.begin();
Serial.println("TFT inicializado");
tft.fillScreen(ILI9341_GREEN);
delay(500);
tft.fillScreen(ILI9341_RED);
delay(500);
tft.fillScreen(ILI9341_BLUE);
delay(500);
tft.fillScreen(ILI9341_BLACK);
Serial.println("Prueba de colores completada");
}
Consejos y Mejores Prácticas
Optimización de Rendimiento
- Usar colores 565: Los colores están en formato 16-bit (5-6-5 RGB)
- Minimizar llamadas a draw*: Usar
fill*para áreas grandes - Buffer de pantalla: Considerar usar framebuffer para animaciones
- Actualización parcial: Actualizar solo áreas cambiadas
Ahorro de Energía
// Modo sleep (si el controlador lo soporta)
tft.writecommand(ILI9341_SLPIN); // Entrar en sleep
// Despertar
tft.writecommand(ILI9341_SLPOUT); // Salir de sleep
// Control de backlight
digitalWrite(backlightPin, LOW); // Apagar backlight
digitalWrite(backlightPin, HIGH); // Encender backlight
Calibración del Táctil
void calibrarTactil() {
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.setCursor(20, 50);
tft.println("Toca las esquinas");
// Puntos de calibración
int x1, y1, x2, y2;
// Esperar toque en esquina superior izquierda
while (!ts.touched());
TS_Point p1 = ts.getPoint();
x1 = p1.x;
y1 = p1.y;
// Esperar toque en esquina inferior derecha
while (!ts.touched());
TS_Point p2 = ts.getPoint();
x2 = p2.x;
y2 = p2.y;
// Guardar valores de calibración
Serial.print("Calibración: ");
Serial.print(x1); Serial.print(",");
Serial.print(y1); Serial.print(",");
Serial.print(x2); Serial.print(",");
Serial.println(y2);
}
Recursos Adicionales
Librerías Recomendadas
- Adafruit_GFX: Biblioteca gráfica fundamental
- Adafruit_ILI9341: Driver específico
- UTFT: Alternativa con más funciones
- TFT_eSPI: Alta optimización para ESP32/ESP8266
Documentación Oficial
Ejemplos de Código
Especificaciones del Producto
SKU y Identificación
- SKU: MAR2406
- Nombre del producto: 2.4inch Arduino Display
- Fabricante: LCD Wiki / Sistemsoft
Dimensiones
- Módulo PCB: 72.20 × 52.7 mm
- Área activa: 48.96 × 36.72 mm
- Espesor: ~3 mm
Contenido del Paquete
- 1 × Display TFT 2.4" Shield
- 1 × Marco de plástico (opcional)
- Documentación técnica
Conclusión
El Display LCD Color TFT 2.4" Shield Arduino es una solución completa y accesible para agregar interfaz gráfica a tus proyectos Arduino. Con su alta resolución, soporte táctil, capacidad de almacenamiento SD y fácil integración, este shield es ideal tanto para principiantes como para desarrolladores experimentados.
Ventajas Clave
✅ Fácil instalación plug-and-play
✅ Excelente relación calidad-precio
✅ Amplia comunidad y soporte
✅ Librerías bien documentadas
✅ Compatible con múltiples placas Arduino
✅ Ideal para prototipado rápido
Casos de Uso Recomendados
- Estaciones meteorológicas con visualización
- Sistemas de control industrial
- Interfaces HMI para máquinas
- Relojes y calendarios digitales
- Monitores de sensores
- Consolas de juegos retro
- Sistemas de navegación GPS
- Dataloggers con visualización
Notas Finales
Este módulo representa una excelente inversión para cualquier maker o desarrollador que necesite agregar capacidades gráficas a sus proyectos. La combinación de pantalla táctil, almacenamiento SD y compatibilidad directa con Arduino lo convierte en una herramienta versátil para una amplia gama de aplicaciones.
Para más información técnica, consulta la documentación oficial del fabricante o únete a las comunidades de Arduino donde encontrarás miles de proyectos y ejemplos compartidos por la comunidad.
