Pantalla TFT LCD táctil con Arduino

En este proyecto, trabajaremos con una pantalla TFT LCD de 3.5 pulgadas, en donde probaremos su capacidad gráfica y táctil, así como posibles aplicaciones en diversos proyectos con Arduino.

Esta es una Shield táctil fabricada por la gente de MCUFRIEND, tiene una resolución de 480x320, utiliza el controlador ILI9481 y es muy versátil ya que se puede conectar tanto al Arduino Uno como al Mega de forma directa. Adicionalmente cuenta con un puerto para leer tarjetas Micro SD.


Para hacer funcionar la pantalla, necesitaremos las siguientes librerías:
Componentes utilizados:
  • Shield TFT táctil de 3.5'' con controlador ILI9481 y resolución 480x320
  • Servomotor TowerPro SG90
  • LED
  • Display 7 segmentos tipo cátodo común
  • Resistencias de 220 ohms
  • Protoboard o breadboard
  • Cables
  • Tarjeta Arduino

Luego de descargar la librería de Adafruit GFX, debemos descomprimir el archivo y renombrar la carpeta a "Adafruit_GFX". Lo mismo con la librería TouchScreen library, luego de descargarla, se descomprime el archivo y se renombra la carpeta a "TouchScreen". Finalmente, copiamos las 3 carpetas de las librerías en donde están instaladas las demás librerías de Arduino. Cerramos y volvemos a abrir el IDE de Arduino. Con esto ya tenemos para hacer funcionar nuestra Shield.

La librería de MCUFRIEND tiene algunos ejemplos que son bastantes útiles para familiarizarnos con el código y funcionamiento de la pantalla. Conectamos la pantalla directamente al Arduino, y en el IDE vamos donde dice: Archivo > Ejemplos > MCUFRIEND_kbv. Allí podemos ver los ejemplos disponibles para esta librería. Como nuestra Shield LCD es de 480x320, escogemos el ejemplo llamado "GLUE_DEMO_480x320" y le damos en subir. Veremos cómo la pantalla muestra diferentes animaciones, círculos, rectángulos, etc.

Detallando el código del ejemplo, podemos ver los comandos que nos permiten dibujar diferentes animaciones. La siguiente tabla muestra los más utilizados:

Comando Parámetros Descripción
InitLCD()
0 para orientación vertical
1 para orientación horizontal
Inicializa la pantalla en modo horizontal o vertical
clrScr() No recibe Limpia la pantalla. El color de fondo cambia a negro
fillScr(r,g,b) Componentes rojo, verde y azul de un color RGB Llena la pantalla con el color especificado en el parámetro
setColor(r,g,b) Componentes rojo, verde y azul de un color RGB Especifica el color para dibujar formas como círculos, rectángulos, líneas, etc.
drawLine(x1,y1,x2,y2)
x1 y y1 son el punto inicial, x2 y y2 son el punto final
Dibuja una línea entre dos puntos
drawRect(x1,y1,x2,y2) x1 y y1 son el punto inicial (esquina superior izquierda), x2 y y2 son el punto final (esquina inferior derecha) Dibuja un rectángulo entre dos puntos
drawRoundRect(x1,y1,x2,y2)
x1 y y1 son el punto inicial (esquina superior izquierda), x2 y y2 son el punto final (esquina inferior derecha)
Dibuja un rectángulo con las esquinas redondeadas, entre dos puntos
fillRect(x1,y1,x2,y2) x1 y y1 son el punto inicial (esquina superior izquierda), x2 y y2 son el punto final (esquina inferior derecha) Dibuja un rectángulo coloreado entre dos puntos
fillRoundRect(x1,y1,x2,y2) x1 y y1 son el punto inicial (esquina superior izquierda), x2 y y2 son el punto final (esquina inferior derecha) Dibuja un rectángulo coloreado entre dos puntos, con las esquinas redondeadas
drawCircle(x,y,radio) Coordenadas X y Y del centro del círculo, radio es la longitud del radio del círculo Dibuja un círculo con un centro y radio especificado
fillCircle(x,y,radio) Coordenadas X y Y del centro del círculo, radio es la longitud del radio del círculo Dibuja un círculo coloreado con un centro y radio especificado
print(texto,x,y) /
print(texto,x,y,grados)
Texto a escribir, coordenadas X y Y para escribir el texto, ángulo de rotación (opcional) Escribe un texto en las coordenadas especificadas. Opcionalmente se puede rotar el texto si se escriben los grados en el parámetro
drawPixel(x,y) Coordenadas X y Y del pixel Dibuja un pixel en las coordenadas especificadas

Aquí un archivo con todos los comandos que soporta este tipo de pantallas de MCUFRIEND: http://www.rinkydinkelectronics.com/resource/UTFT/UTFT.pdf

Usando los anteriores comandos, he realizado unas animaciones para probar la capacidad gráfica de la pantalla, las cuales se ven así


El código de este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZV1F5N0thZWZVWDA

Ahora pasamos a probar la parte táctil de la pantalla. Usando los comandos descritos anteriormente, se puede crear una interfaz desde la cual se controla un servomotor, se modifica el brillo de un LED y también podemos escribir un dígito en un display 7 segmentos de tipo cátodo común. El funcionamiento de este programa se basa en detectar las coordenadas X y Y en donde el usuario presiona la pantalla para realizar una determinada acción. Los valores de las barras de progreso son convertidos en valores para el servo y el LED, según sea el caso.


El código de este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZZDZiX0ZwUXdfMnM

Otro ejemplo es crear una interfaz parecida al famoso programa Paint, en donde podemos dibujar libremente en la pantalla y utilizando diversos colores. En este caso, también necesitamos una función para obtener las coordenadas X y Y donde el usuario toca la pantalla. Básicamente, el funcionamiento de este programa consiste en dibujar un pequeño círculo de un determinado color en el lugar donde se presiona la pantalla


El código de este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1Zb25SWU90NkhucU0

Comentarios

  1. como puedo aumentar el brillo de la pantalla

    ResponderBorrar
  2. Hola, en el siguiente pdf que tambien esta publicado en el tutorial dice como modificar brillo y contraste:
    http://www.rinkydinkelectronics.com/resource/UTFT/UTFT.pdf

    setBrightness(5); //puede ir de 0 a 16 (valor por default 16).
    setContrast(55); //puede ir de 0 a 64 (valor por default 64).

    Saludos

    ResponderBorrar
  3. Hola.

    Podéis decirme el modelo de pantalla y donde comprarla.

    Saludos

    ResponderBorrar
  4. hola ,gracias sus ejemplos son los unicos que funcionan,apreciaria mucho algunos ejemplos mas . como un simple boton para encender y otro para apagar , o cambiar pantallas,muchas gracias

    ResponderBorrar
  5. Hola! estuve buscando librerias para hacer funcionar la pantalla y ninguna me daba, esta si! muchas gracias por tu aporte!

    ResponderBorrar
  6. Buenos dyas.Soy Anghel Valentin de Grao de Castellon y necesito alluda.Tengo de poner en marcha un invento reconosido de Oficina de Inventos y Marcas registradas (tengo la documentacion)y necesito una pantalla TFT con sus componentes donde se pone la hora lacal y que puedo haser la programacion que la una hora del dia o de noche enciende una LED para 2-3 segundos. Puedo enviar la esquema electrica .Si alguen me puede alludar me puede llamar a 687 933 963.Gracias.

    ResponderBorrar
    Respuestas
    1. Buenos días Angel, te puedo ayudar con tu proyecto, en realidad es muy sencillo utilizar un modulo RTC conectado al modulo Arduino que tengas, las librerias para su uso son bastante sencillas de entender. Para más información me puedes contactar por el número 584141533893 vía whatsapp, un saludo cordial desde Venezuela.

      Borrar
  7. Hola, me gustaría saber cómo puedo mostrar en 2,8" TFT LCD SHIELD + Arduino Mega la lectura de una sonda NTC. Todos los ejemplos que he encontrado son para mostrar datos en el monitor serie, pero soy nuevo en esto y no consigo hacer lo comentado. Si pudiera alguien ayudarme se lo agradecería. Gracias de antemano.

    ResponderBorrar
    Respuestas
    1. Buenos días encaboyebra, podría darte soporte para tu proyecto, lo que en realidad necesitas hacer es un termómetro digital, el manejo de la pantalla TFT tiene sus bemoles, pero en realidad no es tan complicado. Para ayudarte mejor, me puedes contactar por el 584141533893 vía whatsapp. Un saludo cordial desde Venezuela.

      Borrar
  8. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  9. Hola buenas tardes, estoy programando con la misma librería y tengo el problema cuando hago la barra de progreso si baja se queda el rectángulo trabado y no baja, cómo puedo hacer para que de actualice sin borrar toda la pantalla? Saludos

    ResponderBorrar
  10. Gracias. una explicacion muy completa. Tengo dos preguntas, ojala me puedas ayudar. Como puedo agregar graficos tipo .jpg o .bmp. y otra, para que se utiliza la ranura microsd.? Saludos desde México.

    ResponderBorrar
  11. Hola buenas tardes, excelente, funciona perfectamente el screen y el touch, pero no he logrado leer la memoria microsd, algún tutorial o guía que funcione con este modelo de pantalla con lector de microsd integrado?

    ResponderBorrar
  12. alguien tiene la libreria UTFTGLUE.h no la he encontrado, se los agradezco

    ResponderBorrar
  13. Hola se puede utilizar las librerías para la pantalla TFT 2.8

    ResponderBorrar
  14. Hola, me vino sin el shield, podrias hacer un diagrama con los numeros de PIN de la pantalla a PIN de arduino mega ?

    ResponderBorrar

Publicar un comentario