Un prop de Star Trek que sí hace cosas

Los paneles LCARS (Library Computer Access/Retrieval System) son los displays icónicos de las series modernas de Star Trek (TNG en adelante): grandes botones de colores planos, esquinas redondeadas, tipografía geométrica. Quedan muy bien en una vitrina, pero quedan aún mejor cuando muestran datos reales del ambiente.

Este tutorial te guía para armar un combadge (insignia de pecho) alimentado por ESP32 S3 con pantalla TFT integrada que lee CO2, temperatura y humedad de un sensor I2C y los grafica con la estética LCARS clásica. El proyecto está inspirado en el dispensador de datos de Adafruit: en vez de dispensar nada, muestra la calidad del aire en pantalla.

Combadge LCARS terminado mostrando barras de CO2, temperatura y humedad en la pantalla TFT

Qué hace?

  • Lee CO2 (ppm), temperatura (grados C) y humedad relativa (%) cada 5 segundos.
  • Dibuja tres gráficos rolling con los últimos 60 datos.
  • Pulsa un motor vibrador háptico cuando un valor cruza el umbral (CO2 sobre 1000 ppm = mala ventilación).
  • Imprime los datos sobre la estética LCARS con paleta naranjo, púrpura y cian.
  • Se monta en el pecho con un pin magnético, como un comunicador de la Federación.

Lista de materiales

  • Placa ESP32 S3 con pantalla TFT integrada (formato "reverse TFT" o similar)
  • Sensor I2C de CO2, temperatura y humedad (STCC4 + SHT41, o un BME280 si solo te interesa temperatura y humedad)
  • Driver háptico DRV2605L (I2C)
  • Motor de vibración tipo disco (3V)
  • Batería LiPo 3.7V de 420 a 500 mAh con conector JST
  • Cable USB tipo C para programar y cargar
  • Cable STEMMA QT / JST SH de 4 pines (o Dupont si tu sensor no es STEMMA)
  • Pin magnético tipo solapa para sujeción

Las tres placas del proyecto: sensor STCC4 más SHT41, placa ESP32 S3 con TFT y driver háptico DRV2605L con su motor de disco

Conexiones I2C

Todo el periférico va por I2C, lo que simplifica el cableado a 4 hilos compartidos:

Código
ESP32 S3       Sensor + DRV2605L
  SDA  --------  SDA
  SCL  --------  SCL
  3V3  --------  VCC
  GND  --------  GND

El DRV2605L tiene dos pines extra para conectar el motor háptico (LRA o ERM). Como todo comparte el mismo bus, el sensor y el driver se enganchan en cadena con cables STEMMA QT sin soldar.

Placa ESP32 S3 con pantalla TFT junto al sensor STCC4 más SHT41 y el combadge terminado de fondo

Estilo LCARS

LCARS se reconoce por:

  • Paleta: naranjo (#FF9900), púrpura (#CC99CC), cian (#99CCFF), beige.
  • Esquinas redondeadas grandes con "asas" rectangulares.
  • Tipografía geométrica condensada.
  • Bloques de color sólido como botones.

En CircuitPython usa displayio con RoundRect y Rect para los bloques. Para la fuente, usa una BDF/PCF estilo Swiss911 o Helvetica Condensed (de uso libre).

Código (lectura sensor + dibujo gráfico)

Python
import time
import board
import busio
import displayio
import terminalio
from adafruit_display_text import label
from adafruit_display_shapes.roundrect import RoundRect
from adafruit_display_shapes.rect import Rect

i2c = busio.I2C(board.SCL, board.SDA)

# Inicializar tu sensor: BME280, STCC4 + SHT41, etc.
# from adafruit_bme280 import basic as adafruit_bme280
# bme = adafruit_bme280.Adafruit_BME280_I2C(i2c)

display = board.DISPLAY
splash = displayio.Group()
display.root_group = splash

NARANJO = 0xFF9900
PURPURA = 0xCC99CC
CIAN = 0x99CCFF

splash.append(RoundRect(0, 0, 80, 30, 12, fill=NARANJO))
splash.append(RoundRect(0, 100, 80, 30, 12, fill=PURPURA))

etiqueta_co2 = label.Label(terminalio.FONT, text="CO2", color=NARANJO, x=85, y=15)
splash.append(etiqueta_co2)
valor_co2 = label.Label(terminalio.FONT, text="---", color=0xFFFFFF, x=85, y=35)
splash.append(valor_co2)

historial = []

while True:
    # co2 = sensor.CO2
    co2 = 420  # placeholder; reemplaza con tu sensor real
    valor_co2.text = f"{co2} ppm"
    historial.append(co2)
    if len(historial) > 60:
        historial.pop(0)
    time.sleep(5)

Disparar el motor háptico

Python
import adafruit_drv2605
haptico = adafruit_drv2605.DRV2605(i2c)
haptico.sequence[0] = adafruit_drv2605.Effect(47)  # buzz corto

if co2 > 1000:
    haptico.play()

Montaje físico

  1. Imprime una carcasa con frontal estilo combadge: rectangular con esquinas redondeadas.
  2. Pega el sensor cerca de una rejilla lateral para que respire aire ambiente, no aire interno.
  3. La batería va por detrás y el motor háptico pegado a la carcasa (no flotando: necesita masa para transmitir la vibración).
  4. El imán y el pin de solapa fijan el dispositivo a la ropa.

Combadge LCARS prendido en una camiseta a rayas, listo para usar como insignia de pecho

Casos de uso

  • Monitor de ventilación de oficina: te avisa en silencio cuando el CO2 sube.
  • Demo en convenciones cosplay: "sí, mi combadge mide CO2 y vibra cuando hay que ventilar".
  • Logger ambiental portátil con SD opcional (agregando un módulo SD por SPI).

Variantes y mejoras

  • Manda los datos por WiFi: el ESP32 S3 trae WiFi integrado. Con adafruit_requests puedes publicar cada lectura a un dashboard o a Adafruit IO y ver el histórico de CO2 desde el celular, no solo los últimos 60 puntos en pantalla.
  • Guarda un log en microSD: si quieres registro de largo plazo, conecta un módulo microSD por SPI y escribe una línea CSV por lectura. Después abres el archivo en Excel para graficar la calidad del aire de toda la semana.
  • Pantalla de identificación con código QR: el firmware original incluye un modo de "name badge" con tu nombre, departamento y un QR escaneable. Es ideal para ferias maker, ya que la gente escanea el QR y llega directo a tu proyecto.

Personalización para Chile

En Chile puedes conseguir el control háptico, el motor, la batería y el cable en MechatronicStore. La placa ESP32 S3 con TFT reverse y el sensor de CO2 STCC4 son piezas de nicho de Adafruit; si no las encuentras, cualquier ESP32 S3 con pantalla sirve, y para temperatura y humedad un BME280 cumple (no mide CO2, pero es lo más cercano disponible localmente):

  • Driver háptico DRV2605L (I2C) para manejar el motor de vibración con efectos predefinidos.
  • Motor de vibración 3V tipo disco para la alerta táctil cuando el CO2 cruza el umbral.
  • Batería LiPo / Li ion 3.7V para que el combadge sea autónomo y portátil.
  • Cable USB tipo C para cargar y programar la placa.

Diversión nerd con utilidad real.

Recursos

Versión chilena con componentes en stock local en MechatronicStore.