Volver al Blog
Electrónica24 de julio de 2026

Guía Completa: Pantalla LCD Color TFT 2.4" con Micro SD Compatible Formato Arduino

Pantalla LCD Color TFT 2.4" con Micro SD Formato Compatible con Arduino

A

Administrador

Equipo de Pixelnova

Guía Completa: Pantalla LCD Color TFT 2.4" con Micro SD Compatible Formato Arduino

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ámetroValor
Tamaño de pantalla2.4 pulgadas
Tipo de panelTFT (Thin Film Transistor)
ControladorILI9341
Resolución320×240 píxeles
Área activa48.96×36.72 mm
Colores65,536 (16-bit RGB)
Brillo500 cd/m²
InterfazParalela de 8 bits
Tensión de alimentación5V / 3.3V
Consumo de potencia0.67W
Temperatura de funcionamiento-20°C ~ 60°C
Temperatura de almacenamiento-30°C ~ 70°C
Peso39g (con embalaje)
Dimensiones PCB72.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úmeroEtiquetaDescripción
1LCD_RSTSeñal de reset del bus LCD, reset por nivel bajo
2LCD_CSSeñal de selección de chip del bus LCD, habilitado por nivel bajo
3LCD_RSSelección de comando/dato del bus LCD: nivel bajo=comando, nivel alto=dato
4LCD_WRSeñal de escritura del bus LCD
5LCD_RDSeñal de lectura del bus LCD
6GNDTierra de alimentación
75VEntrada de alimentación 5V
83V3Entrada de alimentación 3.3V (pin desconectable)
9LCD_D0Bit 0 del bus de datos de 8 bits del LCD
10LCD_D1Bit 1 del bus de datos de 8 bits del LCD
11LCD_D2Bit 2 del bus de datos de 8 bits del LCD
12LCD_D3Bit 3 del bus de datos de 8 bits del LCD
13LCD_D4Bit 4 del bus de datos de 8 bits del LCD
14LCD_D5Bit 5 del bus de datos de 8 bits del LCD
15LCD_D6Bit 6 del bus de datos de 8 bits del LCD
16LCD_D7Bit 7 del bus de datos de 8 bits del LCD
17SD_SSSeñal de selección de chip SPI de la tarjeta SD, habilitado por nivel bajo
18SD_DISeñal MOSI del bus SPI de la tarjeta SD
19SD_DOSeñal MISO del bus SPI de la tarjeta SD
20SD_SCKSeñal de reloj del bus SPI de la tarjeta SD

Mapeo de Pines con Arduino UNO

Pin ShieldPin Arduino UNOFunción
LCD_D0D2Datos LCD Bit 0
LCD_D1D3Datos LCD Bit 1
LCD_D2D4Datos LCD Bit 2
LCD_D3D5Datos LCD Bit 3
LCD_D4D6Datos LCD Bit 4
LCD_D5D7Datos LCD Bit 5
LCD_D6D8Datos LCD Bit 6
LCD_D7D9Datos LCD Bit 7
LCD_RSD10Comando/Dato
LCD_WRD11Escritura
LCD_RDD12Lectura
LCD_CSD13Selección de chip
LCD_RSTA0Reset
SD_SSA1Selección SD
SD_DIA2MOSI SD
SD_DOA3MISO SD
SD_SCKA4Clock SD

Mapeo de Pines con Arduino Mega2560

Pin ShieldPin Arduino MegaFunción
LCD_D0D22Datos LCD Bit 0
LCD_D1D23Datos LCD Bit 1
LCD_D2D24Datos LCD Bit 2
LCD_D3D25Datos LCD Bit 3
LCD_D4D26Datos LCD Bit 4
LCD_D5D27Datos LCD Bit 5
LCD_D6D28Datos LCD Bit 6
LCD_D7D29Datos LCD Bit 7
LCD_RSD30Comando/Dato
LCD_WRD31Escritura
LCD_RDD32Lectura
LCD_CSD33Selección de chip
LCD_RSTA0Reset
SD_SSA1Selección SD
SD_DIA2MOSI SD
SD_DOA3MISO SD
SD_SCKA4Clock 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

  1. Abre el Arduino IDE
  2. Navega a ProgramaIncluir LibreríaGestionar Librerías
  3. Busca e instala:
    • Adafruit GFX Library
    • Adafruit ILI9341
  4. Para las librerías adicionales:
    • Descomprime el paquete descargado
    • Copia la carpeta libraries a tu directorio de proyectos de Arduino
    • La ruta típica es: Documentos/Arduino/libraries/

Paso 3: Conectar el Shield

  1. Apaga tu placa Arduino antes de conectar el shield
  2. Alinea cuidadosamente los pines del shield con los conectores de la placa Arduino
  3. Presiona suavemente hasta que el shield quede firmemente conectado
  4. 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

  1. Abre un ejemplo desde ArchivoEjemplosAdafruit_ILI9341
  2. Selecciona tu placa en HerramientasPlaca
  3. Selecciona el puerto serial correcto
  4. 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

ProblemaPosible CausaSolución
Pantalla en negroAlimentación incorrectaVerificar conexión 5V y GND
Pantalla parpadeaVoltaje inestableUsar fuente de alimentación externa
Texto ilegibleConfiguración de pines incorrectaVerificar definición de pines en código
Táctil no respondeCalibración necesariaEjecutar programa de calibración
SD no detectadaFormato incorrectoFormatear SD en FAT32
Imágenes distorsionadasOrientación incorrectaAjustar setRotation()
Colores incorrectosConfiguración RGB/_BGRCambiar 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

  1. Usar colores 565: Los colores están en formato 16-bit (5-6-5 RGB)
  2. Minimizar llamadas a draw*: Usar fill* para áreas grandes
  3. Buffer de pantalla: Considerar usar framebuffer para animaciones
  4. 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

  1. Adafruit_GFX: Biblioteca gráfica fundamental
  2. Adafruit_ILI9341: Driver específico
  3. UTFT: Alternativa con más funciones
  4. 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.