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.

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

Conexiones I2C
Todo el periferico va por I2C, lo que simplifica el cableado a 4 hilos compartidos:
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.

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)
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
import adafruit_drv2605
haptico = adafruit_drv2605.DRV2605(i2c)
haptico.sequence[0] = adafruit_drv2605.Effect(47) # buzz corto
if co2 > 1000:
haptico.play()
Montaje fisico
- Imprime una carcasa con frontal estilo combadge: rectangular con esquinas redondeadas.
- Pega el sensor cerca de una rejilla lateral para que respire aire ambiente, no aire interno.
- La bateria va por detras y el motor haptico pegado a la carcasa (no flotando: necesita masa para transmitir la vibracion).
- El iman y el pin de solapa fijan el dispositivo a la ropa.

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_requestspuedes 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
- Tutorial original: Star Trek Data Dispenser (Adafruit Learning System)
- Documentacion CircuitPython: librerias
adafruit_display_shapes,adafruit_display_textyadafruit_drv2605.
Version chilena con componentes en stock local en MechatronicStore.








