Un prop de Star Trek que si hace cosas

Los paneles LCARS (Library Computer Access/Retrieval System) son los displays iconicos de las series modernas de Star Trek (TNG en adelante): grandes botones de colores planos, esquinas redondeadas, tipografia geometrica. Quedan muy bien en una vitrina, pero quedan aun mejor cuando muestran datos reales del ambiente.

Este tutorial te guia 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 estetica LCARS clasica. El proyecto esta 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

Que hace?

  • Lee CO2 (ppm), temperatura (grados C) y humedad relativa (%) cada 5 segundos.
  • Dibuja tres graficos rolling con los ultimos 60 datos.
  • Pulsa un motor vibrador haptico cuando un valor cruza el umbral (CO2 sobre 1000 ppm = mala ventilacion).
  • Imprime los datos sobre la estetica LCARS con paleta naranjo, purpura y cian.
  • Se monta en el pecho con un pin magnetico, como un comunicador de la Federacion.

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 haptico DRV2605L (I2C)
  • Motor de vibracion tipo disco (3V)
  • Bateria 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 magnetico tipo solapa para sujecion

Las tres placas del proyecto: sensor STCC4 mas SHT41, placa ESP32 S3 con TFT y driver haptico DRV2605L con su motor de disco

Conexiones I2C

Todo el periferico 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 haptico (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 mas SHT41 y el combadge terminado de fondo

Estilo LCARS

LCARS se reconoce por:

  • Paleta: naranjo (#FF9900), purpura (#CC99CC), cian (#99CCFF), beige.
  • Esquinas redondeadas grandes con "asas" rectangulares.
  • Tipografia geometrica condensada.
  • Bloques de color solido 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).

Codigo (lectura sensor + dibujo grafico)

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 haptico

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

if co2 > 1000:
    haptico.play()

Montaje fisico

  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 bateria va por detras y el motor haptico pegado a la carcasa (no flotando: necesita masa para transmitir la vibracion).
  4. El iman 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 ventilacion de oficina: te avisa en silencio cuando el CO2 sube.
  • Demo en convenciones cosplay: "si, mi combadge mide CO2 y vibra cuando hay que ventilar".
  • Logger ambiental portatil con SD opcional (agregando un modulo 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 historico de CO2 desde el celular, no solo los ultimos 60 puntos en pantalla.
  • Guarda un log en microSD: si quieres registro de largo plazo, conecta un modulo microSD por SPI y escribe una linea CSV por lectura. Despues abres el archivo en Excel para graficar la calidad del aire de toda la semana.
  • Pantalla de identificacion con codigo 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.

Personalizacion para Chile

En Chile puedes conseguir el control haptico, el motor, la bateria 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 mas cercano disponible localmente):

  • Driver haptico DRV2605L (I2C) para manejar el motor de vibracion con efectos predefinidos.
  • Motor de vibracion 3V tipo disco para la alerta tactil cuando el CO2 cruza el umbral.
  • Bateria LiPo / Li ion 3.7V para que el combadge sea autonomo y portatil.
  • Cable USB tipo C para cargar y programar la placa.

Diversion nerd con utilidad real.

Recursos

Version chilena con componentes en stock local en MechatronicStore.