Skip to Content

Interfaz de Arduino con una pantalla táctil (pantalla TFT a color de 2,8 pulgadas)

Interfaz de Arduino con una pantalla táctil (pantalla TFT a color de 2,8 pulgadas)

En este artículo, vamos a interconectar una pantalla TFT con una interfaz táctil. Este tutorial utiliza una pantalla LCD de 2,8 pulgadas con una interfaz táctil capacitiva.

La opción táctil le permite interactuar con el proyecto de manera eficiente. 

Si tienes la opción de selección de menús, como subir el volumen o encender o apagar una luz, la opción táctil ayuda mucho. 

La pantalla táctil TFT es la más adecuada para las HMI en las que el usuario puede realizar ajustes específicos o hacer algunas selecciones. 

Puede construir un proyecto de temporizador en el que el usuario pueda ajustar la hora directamente en la pantalla LCD. Otros ejemplos incluyen juegos interactivos, control de termostatos, etc. 

Presentaré brevemente la sección táctil, los pines de la pantalla TFT de 2,8 pulgadas y los detalles del diagrama de conexión.

Al final del artículo, compartiré un ejemplo de código de trabajo y un enlace de simulación en línea para el proyecto. 

¡Comencemos!

Componentes necesarios para construir un proyecto con Arduino y una pantalla TFT táctil

Componentes de hardware 

Software

Makerguides.com participa en el Programa de Asociados de Amazon Services LLC, un programa de publicidad de afiliados diseñado para proporcionar un medio para que los sitios ganen honorarios de publicidad mediante la publicidad y los enlaces a productos en Amazon.com.

Fundamentos de la pantalla TFT con interfaz táctil

Este artículo forma parte de nuestra serie sobre los diferentes tipos de pantallas que se pueden utilizar con Arduino, así que si estás sopesando las opciones, echa un vistazo a nuestra guía sobre las mejores pantallas para utilizar con Arduino.

Las pantallas TFT vienen en dos variantes: Con tacto y sin tacto. Los módulos con tacto vienen con una capa adicional de pantalla táctil transparente. 

La detección táctil puede ser de tipo resistivo o capacitivo. Los de tipo resistivo necesitan que se aplique presión sobre la pantalla para detectar el toque.

La pantalla capacitiva es más sensible y basta con un simple toque. 

Dependiendo de la pantalla que utilices, la numeración de los pines cambiará.

Aquí voy a proporcionar los detalles de los pines para dos pantallas: una de tipo resistivo y otra de tipo capacitivo.

Los pinouts para la pantalla y la tarjeta SD siguen siendo los mismos. Sólo cambiarán los pinouts relacionados con el sensor táctil dependiendo de si el módulo tiene un sensor táctil de tipo resistivo o capacitivo.

Fundamentos de la pantalla TFT con interfaz táctil

Controlador táctil resistivo

Debes aplicar presión sobre la pantalla para que el tacto funcione. Encontrarás controladores táctiles resistivos tanto analógicos como digitales.

El tipo analógico le ayuda incluso a detectar la presión al tacto.

Los sensores digitales resistivos sólo pueden decir si hay un toque o no.

El CI del controlador táctil resistivo es el STMPE610
Fuente de la imagen: https: //www.nxp.com/docs/en/application-note/AN4057.pdf

Un ejemplo de controlador táctil resistivo IC es STMPE610. Puede encontrar la hoja de datos aquí.

El CI del controlador es el STMPE610

Las principales características de los CI controladores táctiles resistivos son

  • Controlador táctil de 4 hilos integrado
  • Admite la interfaz SPI e I2C
  • Corriente de reposo ultrabaja
  • Función Wakeup en cada GPIO
  • Expansor GPIO con 6 GPIOs
  • Convertidor analógico-digital de 12 bits

Controlador táctil capacitivo

El toque capacitivo funciona según el principio de cambio de capacitancia. El valor de la capacitancia cambia ligeramente allí donde se toca la pantalla.

El controlador táctil detecta este cambio en la capacitancia. 

El controlador lo declarará como toque en función de los umbrales previamente decididos. 

El campo eléctrico se acopla a través de tu mano cuando tocas la pantalla. Este cambio es el campo eléctrico reflejado como el cambio en la capacitancia.

La vida útil de la pantalla táctil será mejor que la de la pantalla táctil resistiva debido al principio de funcionamiento, aunque son ligeramente más caras. 

Un ejemplo de CI controlador táctil capacitivo que se encuentra en los módulos de pantalla TFT es el FT6206.

Puede encontrar la hoja de datos aquí. El diagrama de bloques se muestra a continuación.

el CI controlador táctil capacitivo FT6206

A continuación se indican las características del CI controlador táctil capacitivo FT6206:

  • Autocalibración para que los cambios en las condiciones ambientales no influyan en la medición capacitiva
  • Admite hasta 28 canales  
  • Interfaz I2C para la comunicación con el host
  • La frecuencia de actualización de 100 Hz (actualización de 10 ms)
  • ADC y filtro internos
  • Múltiples modos de alimentación

El Pinout del controlador táctil TFT

Ejemplo 1 - Pantalla TFT de 2,8 pulgadas con función táctil de Adafruit

Pantalla TFT de 2,8 pulgadas con función táctil de Adafruit
Nombre de la clavijaTipo de clavijaDescripción
GNDClavija de alimentaciónClavija de tierra. Vía de corriente de retorno para toda la potencia y las señales
VINClavija de alimentaciónClavija de entrada de alimentación para el controlador de la pantalla TFT y un controlador táctil
3V0Clavija de alimentación
CLKICSP CLKReloj ICSP SPI. Puedes acceder al pin localizando el pin de la cabecera ICSP en el Arduino. Puedes conectar este pin al pin digital 13 del Arduino utilizando un puente
MISOICSP MISOLínea SPI MISO del hardware ICSP. Puedes acceder al pin localizando el pin de la cabecera ICSP en el Arduino. Puedes conectar este pin al pin digital 12 del Arduino utilizando un puente
MOSIICSP MOSILínea MOSI del hardware ICSP. Puedes acceder al pin localizando el pin de la cabecera ICSP en el Arduino. Puedes conectar este pin al pin digital 11 del Arduino utilizando un puente
CSSelección de chipLínea de selección del chip TFT. Arduino utiliza esta línea para seleccionar el controlador de la pantalla TFT. Pin digital 10 del Arduino
D/CSelección de comandos de datosEl Arduino utiliza esta línea para informar si los datos en el SPI son datos o un comando. Pin digital 9 del Arduino
RSTLínea de reajusteReinicia el controlador táctil
SDALínea de datos I2CLa línea de datos I2C utilizada para comunicarse con el controlador táctil
SCLLínea de reloj I2CLa línea de reloj I2C utilizada para comunicarse con el controlador táctil
X+Clavijas táctilesLínea de pines táctiles resistivos
X-Clavijas táctilesLínea de pines táctiles resistivos
Y+Clavijas táctilesLínea de pines táctiles resistivos
Y-Clavijas táctilesLínea de pines táctiles resistivos

Ejemplo 2 - Pantalla TFT de 2,8 pulgadas con función táctil de ILI9341

Pantalla TFT de 2,8 pulgadas con función táctil de ILI9341
Número de pinNombre de la clavijaDescripción
1VCCClavija de tierra. Vía de corriente de retorno para toda la potencia y las señales
2GNDClavija de entrada de alimentación para el controlador de la pantalla TFT, y un controlador táctil
3CSSelección de chip
4RSTLínea de reinicio
5D/CPin de datos/comando
6MOSIDatos SPI (Master Out Slave In) Este es el pin de entrada del controlador LCD y el pin de salida para el Arduino
7SCKPin de reloj SPI. Este es el pin de salida del Arduino
8LEDTensión para la retroiluminación LED
9MISODatos SPI (Master In Slave Out) Este es el pin de salida del controlador LCD y el pin de entrada para el Arduino
10SCLLínea de Reloj Serial I2C - Interfaz I2C para el controlador táctil.
11SDALínea de datos serie I2C - Interfaz I2C para el controlador táctil

Instrucciones paso a paso para conectar una pantalla TFT táctil a un Arduino

En esta sección, te daré instrucciones paso a paso para completar la conexión necesaria entre el Arduino y la pantalla TFT.

Las conexiones relacionadas con el controlador táctil serán diferentes dependiendo de si se utiliza un controlador táctil capacitivo o resistivo.

Aparte de esto, el resto de las conexiones, como la tarjeta SD o el controlador de la pantalla TFT, siguen siendo las mismas. 

En este ejemplo, utilizaremos una pantalla táctil capacitiva de 2,8 pulgadas y la interconectaremos con un Arduino.

En las secciones posteriores, proporcionaré un código de ejemplo, un enlace de simulación que funciona y preguntas frecuentes sobre la pantalla TFT de Arduino con proyectos táctiles.

¿Cómo conectar la pantalla TFT con el tacto al Arduino UNO?

Aquí están los detalles necesarios para completar el Arduino y la pantalla TFT de 2,8 pulgadas con toque. El resultado final se asemeja a la conexión que se muestra a continuación.

Cómo conectar la pantalla TFT con el tacto al Arduino UNO

Paso 1: Comencemos con la conexión a tierra

Empecemos por la conexión con el suelo

Es una buena práctica comenzar las conexiones con la conexión GND primero. El pin 2 del LCD va al pin GND del Arduino.

Puedes elegir cualquiera de los pines GND disponibles para completar la conexión.

Paso 2: Conectar el pin CS

Conecta el pin CS

Conecte el pin CS del LCD (pin 3) al pin 10 del Arduino. CS puede ser cualquier pin GPIO del Arduino.

Paso 3: Conectar la clavija de alimentación

Conectar la clavija de alimentación

Conecta el pin 1 del LCD al pin VIN del Arduino.

Paso 4: Conexión C/S entre el LCD y el Arduino

Conexión C/S entre el LCD y el Arduino

Conecta el pin 9 del Arduino UNO al pin 5 del módulo LCD.

Paso 5: Conexión MOSI del LCD entre Arduino y el módulo LCD

Conexión MOSI entre Arduino y el módulo LCD

Conecte el pin 6 del LCD al pin 11 del Arduino UNO. Este es el pin MOSI del protocolo SPI. La dirección de los datos es de Arduino a la LCD.

Paso 6: Conexión de la línea SCK SPI del LCD

LCD SCK Conexión de la línea SPI

Completa la conexión entre el pin 13 del Arduino y el pin 7 del módulo LCD (línea SCK). 

Paso 7: Conexión LCD MISO

Conexión LCD MISO

Conecte el pin 9 de la placa LCD al pin 12 del Arduino. El pin SPI MISO es el pin de salida del módulo LCD y el pin de entrada del Arduino.

Paso 8: Conexión del pin I2C SCL

Conexión del pin I2C SCL

El pin SCL del Arduino va al pin 10 del LCD. A5 es el pin SCL del Arduino. 

Paso 9: Conexión del pin I2C SDA

Conexión del pin I2C SDA

El pin SDA del Arduino va al pin 11 del LCD. A4 es el pin SDA del Arduino. 

Paso 10: Resumen de la conexión de Arduino y la pantalla TFT

Resumen completo de la conexión de Arduino y la pantalla TFT

¡Enhorabuena! Has completado la conexión necesaria para interconectar el LCD y el controlador táctil con el Arduino. 

Ejemplo de código de Arduino para la pantalla TFT de 2,8 pulgadas con toque

En esta sección, te llevaré a través de un sencillo programa de Arduino que te permite seleccionar un color de pincel y dibujar en la pantalla.

Esta es una forma fantástica de presentar a alguien las ventajas de tener una pantalla táctil con pantalla en color.

El código Arduino que aparece a continuación ofrece seis opciones de color para elegir. Después, puedes dibujar con el dedo o con un lápiz óptico en la zona vacía. 

El código completo de Arduino

Abre el IDE de Arduino y haz clic en la opción "Archivo". Bajo las opciones de archivo, selecciona "Nuevo".

#include "Adafruit_GFX.h"    // Core graphics library
#include "SPI.h"       // this is needed for display
#include "Adafruit_ILI9341.h"
#include "Wire.h"      // this is needed for FT6206
#include "Adafruit_FT6206.h"
 
// The FT6206 uses hardware I2C (SCL/SDA)
Adafruit_FT6206 ctp = Adafruit_FT6206();
 
// The display also uses hardware SPI, plus #9 & #10
#define TFT_CS 10
#define TFT_DC 9
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
 
// Size of the color selection boxes and the paintbrush size
#define BOXSIZE 40
#define PENRADIUS 3
int oldcolor, currentcolor;
 
void setup(void) {
  while (!Serial);     // used for leonardo debugging
 
  Serial.begin(115200);
  Serial.println(F("Cap Touch Paint!"));
 
  tft.begin();
 
  if (! ctp.begin(40)) {  // pass in 'sensitivity' coefficient
    Serial.println("Couldn't start FT6206 touchscreen controller");
    while (1);
  }
 
  Serial.println("Capacitive touchscreen started");
 
  tft.fillScreen(ILI9341_BLACK);
 
  // make the color selection boxes
  tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED);
  tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
  tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN);
  tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN);
  tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE);
  tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA);
 
  // select the current color 'red'
  tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
  currentcolor = ILI9341_RED;
}
 
void loop() {
  // Wait for a touch
  if (! ctp.touched()) {
    return;
  }
 
  // Retrieve a point  
  TS_Point p = ctp.getPoint();
 
 /*
  // Print out raw data from screen touch controller
  Serial.print("X = "); Serial.print(p.x);
  Serial.print("\tY = "); Serial.print(p.y);
  Serial.print(" -> ");
 */
 
  // flip it around to match the screen.
  p.x = map(p.x, 0, 240, 240, 0);
  p.y = map(p.y, 0, 320, 320, 0);
 
  // Print out the remapped (rotated) coordinates
  Serial.print("("); Serial.print(p.x);
  Serial.print(", "); Serial.print(p.y);
  Serial.println(")");
 
 
  if (p.y < BOXSIZE) {
     oldcolor = currentcolor;
 
     if (p.x < BOXSIZE) {
       currentcolor = ILI9341_RED;
       tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*2) {
       currentcolor = ILI9341_YELLOW;
       tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*3) {
       currentcolor = ILI9341_GREEN;
       tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*4) {
       currentcolor = ILI9341_CYAN;
       tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*5) {
       currentcolor = ILI9341_BLUE;
       tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x <= BOXSIZE*6) {
       currentcolor = ILI9341_MAGENTA;
       tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     }
 
     if (oldcolor != currentcolor) {
        if (oldcolor == ILI9341_RED)
          tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED);
        if (oldcolor == ILI9341_YELLOW)
          tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
        if (oldcolor == ILI9341_GREEN)
          tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN);
        if (oldcolor == ILI9341_CYAN)
          tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN);
        if (oldcolor == ILI9341_BLUE)
          tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE);
        if (oldcolor == ILI9341_MAGENTA)
          tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA);
     }
  }
  if (((p.y-PENRADIUS) > BOXSIZE) && ((p.y+PENRADIUS) < tft.height())) {
    tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor);
  }
}

Nota

  1. Aquí está el enlace a la simulación - donde puedes cambiar activamente el código y ver los resultados en acción. También puedes guardar el proyecto y compartir los enlaces con otras personas. 
  2. Consulte esta guía para instalar las librerías necesarias de Adafruit.

Preguntas frecuentes sobre la pantalla TFT en color de 2,8 pulgadas con toque de Arduino

He recopilado una lista de las preguntas más frecuentes sobre el TFT y el uso táctil con Arduino. Las he respondido en un solo lugar.

Si todavía tienes preguntas, estaré encantado de escucharlas en la sección de comentarios. 

1) ¿Cómo utilizar la pantalla táctil TFT con Arduino?

Algunos controladores dedicados pueden ayudar a Arduino a detectar el tacto de la pantalla fácilmente. Un ejemplo es un FT6206 que puede soportar pantallas pequeñas y medianas con hasta 28 sensores.

Arduino sólo necesita comunicarse con el IC (normalmente a través de I2C o SPI) para entender la posición táctil

En este artículo, he cubierto un ejemplo con la simulación, que puede probar.

Además, consulta la sección de fundamentos para saber más sobre los controladores táctiles (tanto resistivos como capacitivos). 

2) ¿Las pantallas TFT son táctiles?

No. Las pantallas TFT no son táctiles por defecto. Puede tener módulos de visualización con funciones táctiles también.

El panel táctil es una capa dedicada en la parte superior de la pantalla, que es manejada por un IC controlador táctil independiente.

3) ¿Qué significa TFT en pantalla táctil?

TFT son las siglas de Thin Film Technology (tecnología de película fina), una etiqueta que se da a una clase de LCD que admite pantallas monocromáticas y en color.

Aunque hay muchas pantallas táctiles TFT en el mercado, el nombre TFT y la tecnología táctil no tienen ninguna relación. 

4) ¿Es mejor la pantalla TFT que la AMOLED?

Las AMOLED son más brillantes y más eficientes energéticamente que las pantallas TFT. Los ángulos de visión de las AMOLED también son mejores para exteriores. Los TFT son más baratos.

Los últimos avances han hecho que las AMOLED sean más asequibles para los sistemas integrados.  

Conclusión

En este artículo te he explicado los fundamentos del módulo de visualización TFT con pantalla táctil.

Estoy seguro de que estará deseando probar sus aplicaciones de tacto y visualización juntas en sus siguientes proyectos.

Estoy seguro de que el artículo era fácil de seguir. He utilizado la pantalla TFT con el tacto para un proyecto de HMI que controla el termostato en mis proyectos de la manía para aprender más sobre el sistema de OT (Therm abierto)

Siéntase libre de compartir sus proyectos en la sección de comentarios. Estaré encantado de conocer los proyectos que hayas construido con módulos de pantalla táctil TT.

Por favor, deje un enlace a sus proyectos en los comentarios.

¿Qué artículo le gustaría leer a continuación?

Por favor, hágamelo saber en la sección de comentarios.

Comparte los artículos con tus amigos y compañeros entusiastas de Arduino.