Uso de Pantallas en Arduino

octubre 19, 2024

¿Por qué usar pantallas en proyectos con Arduino?

Cuando trabajamos con Arduino, es común utilizar el monitor serie para obtener información en tiempo real sobre el estado de nuestro programa o los datos que recibimos de los sensores.

Sin embargo, confiar únicamente en este método nos ata al PC, limitando el potencial de nuestros proyectos. Aquí es donde entra en juego el uso de pantallas como una forma de mostrar información directamente en el dispositivo, sin la necesidad de un ordenador.

Las pantallas nos permiten visualizar datos en tiempo real, como lecturas de sensores, menús interactivos o indicadores visuales de estado. En lugar de depender de un cable USB y del software del ordenador, podemos ver todo de un vistazo, directamente en el dispositivo.

Esto es especialmente útil en proyectos que deben ser autónomos o portátiles, como estaciones meteorológicas, robots o incluso dispositivos para el hogar inteligente.

El uso de pantallas en Arduino también facilita la interacción con el usuario, creando interfaces simples pero efectivas que permiten modificar parámetros, verificar estados del sistema o simplemente mostrar resultados de manera visual y atractiva.

Por lo tanto, añadir una pantalla a tu proyecto no solo incrementa su funcionalidad, sino que también lo hace más accesible y fácil de usar, sobre todo para aquellos que no están familiarizados con la programación o los entornos de desarrollo.

El bus I2C: La conexión simple para tus pantallas

El bus I2C (Inter-Integrated Circuit) es una de las formas más simples y eficaces para conectar periféricos como pantallas a un Arduino.

De este protocolo he hablado ya largo y tendido en esta guía que te dejo enlazada, por lo que en este artículo tocaremos solamente los puntos principales.

Se caracteriza por utilizar solo dos cables, SDA (datos) y SCL (reloj), para establecer la comunicación entre el microcontrolador y varios dispositivos, lo que lo convierte en un método extremadamente eficiente en términos de cableado y simplicidad de implementación.

Una de las grandes ventajas del I2C es que permite conectar múltiples dispositivos en un mismo bus, siempre que cada uno tenga una dirección única. Esto significa que con solo dos pines del Arduino, puedes controlar varias pantallas, sensores y otros componentes sin complicar el esquema de conexiones.

Además, la mayoría de las pantallas compatibles con Arduino ya tienen adaptadores I2C integrados o se les puede añadir uno fácilmente.

Otra razón por la que el bus I2C es ideal para pantallas en proyectos de Arduino es la cantidad de librerías disponibles que simplifican su uso. Librerías como LiquidCrystal_I2C o Adafruit_SSD1306 te permiten configurar y manejar una pantalla en cuestión de minutos, sin necesidad de profundizar en los detalles técnicos del protocolo. Esto hace que el uso de pantallas con I2C sea accesible tanto para principiantes como para desarrolladores más experimentados que buscan resultados rápidos y eficientes.

Pantallas estándar 1602: El clásico fácil de implementar

La pantalla LCD 1602 es, sin duda, una de las opciones más populares cuando se trata de proyectos con Arduino, y personalmente mi favorita por su estética noventera:

Esta pantalla de 16 caracteres por 2 líneas es ampliamente utilizada por su simplicidad, asequibilidad y facilidad de implementación.

No solo es perfecta para mostrar información de manera clara y directa, sino que, al conectarla mediante el bus I2C, puedes reducir la cantidad de cables y pines utilizados, haciendo tu proyecto más ordenado y eficiente.

Con el adaptador I2C, la pantalla 1602 solo requiere dos pines: SDA y SCL, dejando más espacio en tu Arduino para otros componentes o sensores. Esto es particularmente útil en proyectos donde el espacio es limitado o cuando necesitas varios periféricos funcionando al mismo tiempo.

Además, esta pantalla es perfecta para proyectos educativos o prototipos, permitiéndote visualizar datos como temperaturas, niveles de humedad, o mensajes de estado sin la necesidad de un monitor conectado al PC.

Un ejemplo clásico de cómo comenzar a usar esta pantalla es el famoso Hello World, donde mostramos texto básico en la pantalla.

Gracias a la librería LiquidCrystal_I2C, este tipo de pantalla se configura en pocos minutos. Aquí tienes un ejemplo de código para que puedas arrancar tu pantalla 1602 rápidamente:

#include <Wire.h> // Librería para comunicación I2C
#include <LiquidCrystal_I2C.h> // Librería para pantallas LCD I2C

// Inicializa la pantalla con la dirección I2C (generalmente 0x27) y define el tamaño (16 columnas y 2 filas)
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.init(); // Inicializa la pantalla
  lcd.backlight(); // Enciende la luz de fondo de la pantalla
  lcd.setCursor(0, 0); // Posiciona el cursor en la primera columna, primera fila
  lcd.print("Hello, world!"); // Muestra el mensaje en la primera línea
  lcd.setCursor(0, 1); // Posiciona el cursor en la primera columna, segunda fila
  lcd.print("I2C is easy!"); // Muestra un segundo mensaje
}

void loop() {
  // No necesitamos hacer nada aquí
}

En este ejemplo, se utiliza la librería LiquidCrystal_I2C para facilitar la configuración de la pantalla. El código inicializa la pantalla con la dirección I2C (que generalmente es 0x27, aunque esto puede variar dependiendo del módulo) y define las dimensiones de 16 columnas por 2 filas. Luego, el programa coloca un mensaje en la primera línea y otro en la segunda.

Esta configuración básica es ideal para cualquier proyecto donde necesites mostrar información de forma rápida y sencilla. Además, al ser compatible con el bus I2C, puedes integrar esta pantalla fácilmente en cualquier proyecto más complejo, sin necesidad de preocuparte por la gestión de múltiples cables y conexiones.

En resumen, la pantalla LCD 1602 es la opción perfecta para quienes buscan una solución visual rápida, sencilla y altamente confiable. Ya sea que estés empezando o que busques una pantalla simple para un prototipo, esta pantalla sigue siendo una herramienta clave en cualquier kit de Arduino.

Pantallas OLED pequeñas: El toque exótico y minimalista

Las pantallas OLED de pequeño tamaño, como las de 0.96″ o 0.6″, añaden un toque moderno y «exótico» a los proyectos con Arduino.

Ejemplo del uso de estas pantallas. Fuente: opentop.fr

Aunque no son tan comunes como las pantallas 1602, su versatilidad y alta calidad visual las hacen perfectas para aplicaciones específicas donde el espacio es limitado, pero aún se necesita mostrar información clave de forma clara y estilizada.

Estas pantallas OLED, a diferencia de las LCD tradicionales, ofrecen un contraste superior gracias a que cada píxel se ilumina individualmente.

Esto resulta en negros profundos y un alto nivel de nitidez, lo que las hace ideales para proyectos que necesitan una interfaz pequeña pero impactante.

Sin embargo, debido a su tamaño reducido, su uso está más enfocado a proyectos compactos o dispositivos portátiles, como medidores de bolsillo, wearables o mini-estaciones meteorológicas.

El hecho de que estas pantallas se conecten a través del bus I2C, al igual que las pantallas 1602, facilita mucho su integración en proyectos de Arduino. Aunque su tamaño pequeño las limita en algunos casos, son una opción poderosa cuando necesitas una pantalla discreta pero efectiva. Un buen ejemplo es utilizarlas en proyectos donde el espacio es un recurso escaso, pero se requiere mostrar datos como niveles de batería, símbolos o pequeños gráficos.

Aquí tienes un ejemplo básico para empezar con una pantalla OLED de 0.96″ usando la librería Adafruit_SSD1306 y Adafruit_GFX:

#include <Wire.h> 
#include <Adafruit_GFX.h> // Librería para gráficos
#include <Adafruit_SSD1306.h> // Librería para pantallas OLED

#define SCREEN_WIDTH 128 // Ancho de la pantalla OLED
#define SCREEN_HEIGHT 64 // Alto de la pantalla OLED

// Crea un objeto para manejar la pantalla OLED con I2C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  // Inicializa la pantalla OLED
  if(!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) {
    Serial.println(F("No se encontró la pantalla OLED"));
    for(;;); // Detiene el programa si la pantalla no se encuentra
  }

  display.display(); // Muestra el contenido en la pantalla
  delay(2000); // Espera 2 segundos

  display.clearDisplay(); // Limpia la pantalla
  display.setTextSize(1); // Tamaño de texto
  display.setTextColor(SSD1306_WHITE); // Color de texto blanco
  display.setCursor(0, 0); // Posiciona el cursor en la esquina superior izquierda
  display.println(F("Hello, OLED!")); // Muestra el mensaje en la pantalla
  display.display(); // Actualiza la pantalla con el texto
}

void loop() {
  // No necesitamos hacer nada aquí
}

Este código inicializa la pantalla OLED de 0.96″ y muestra el mensaje «Hello, OLED!». Las pantallas OLED suelen tener una resolución mayor que las LCD estándar (en este caso, 128×64 píxeles), lo que te permite mostrar gráficos pequeños, íconos, e incluso texto detallado en un espacio muy reducido. Además, su bajo consumo energético las hace perfectas para proyectos portátiles o que funcionan con baterías.

Aunque su pequeño tamaño puede parecer una limitación, las pantallas OLED ofrecen una excelente relación entre calidad visual y consumo de espacio. Son la elección ideal cuando buscas integrar pantallas en proyectos donde una visualización impactante es esencial, pero el espacio es un lujo.

Conclusión: ¿Qué tipo de pantalla elegir para tu proyecto?

Elegir la pantalla adecuada para tu proyecto con Arduino depende en gran medida de las necesidades específicas de la aplicación y del espacio disponible.

Las pantallas LCD estándar, como la 1602, son perfectas cuando necesitas mostrar información simple de manera clara y sin complicaciones.

Son fáciles de implementar, económicas y, al conectarlas mediante el bus I2C, requieren pocos pines, lo que las hace ideales para proyectos educativos o prototipos que no necesitan una interfaz gráfica compleja.

Por otro lado, las pantallas OLED pequeñas (0.96″, 0.6″) ofrecen una alternativa más avanzada y visualmente impactante.

Si tu proyecto requiere una visualización más sofisticada o trabajas con espacio limitado, estas pantallas son la elección perfecta. Su nitidez, contraste y capacidad para mostrar gráficos en alta resolución las hacen sobresalir en proyectos donde el diseño visual es clave, como en dispositivos portátiles o wearables.

Si buscas simplicidad y fiabilidad, la pantalla 1602 será tu mejor aliada.

Pero si necesitas algo más «exótico», donde el diseño y el impacto visual jueguen un papel importante, las pantallas OLED te ofrecen una opción versátil y llamativa para destacar en tus proyectos.

Recuerda siempre evaluar el espacio disponible, la necesidad de gráficos o texto, y el tipo de interacción que esperas ofrecer al usuario antes de tomar tu decisión final.