Citolab
Proyecto de tecnología · Laboratorio

Estación de Inclusión IoT

Construyan un dispositivo que registra, de forma trazable, quién incluye cada cassette, cuál y cuándo — conectado a la plataforma del laboratorio.

Benjamín & EmilioDesarrolladores
Camilo EspinozaMentor técnico
v1.0 · 19-06-2026Guía del proyecto
11
Etapas con hitos verificables (0 → 10)
$600K
Premio total si lo logran ($300K c/u)
3
Mundos: firmware, redes y diseño 3D
0
Escaneos que se pueden perder
El objetivo

# ¿Qué vamos a construir?

Un dispositivo IoT para las estaciones de inclusión. El Tecnólogo Médico (TM) se identifica escaneando su credencial y luego escanea cada cassette antes de incluirlo. Cada evento queda registrado en la plataforma del laboratorio. Y si se cae el WiFi, nada se pierde.

Lo importante es que aprendan 🚀

Más que el aparato, lo valioso es que resuelvan problemas reales: programar el ESP32, integrar un lector, hablar con una API, diseñar e imprimir una carcasa y depurar lo que falle. El premio es el incentivo; el aprendizaje es el premio mayor.
El recorrido

# Cómo funciona

Escanea
credencial
→
Inicia sesión
(identifica al TM)
→
Escanea
cassettes
→
Envía a la
plataforma
→
Confirma
en pantalla

El cerebro es un ESP32 con pantalla OLED. La idea clave: tratar el escaneo como “llega un texto” — da igual si viene del lector real o se escribe a mano para probar. Por eso casi todo el proyecto se puede avanzar sin el lector físico.

El dato que viaja

# Qué dice cada cassette

El DataMatrix grabado en un cassette codifica texto plano con el formato {informe}-{muestra}.{cassette}: el número de informe (el caso), un guion, y el subíndice que dice de qué frasco (muestra) salió y qué cassette de ese frasco es. Si una muestra grande se divide, el subíndice gana niveles (ej. 2.3.1). Las láminas usan el mismo código más un número al final — la estación debe distinguirlas y no registrarlas como inclusión. Estos cuatro códigos son reales en formato (los números son inventados):

1234567-1.1Informe 1234567, muestra 1, cassette 1. El caso típico.
1234567-1.2Mismo informe y muestra, segundo cassette.
1234567-2.3.1Muestra 2, cassette 3, subdividido: el subíndice puede tener más niveles.
1234567-1.1-2¡Ojo! El -2 final es número de lámina: esto es una lámina, no un cassette. Hay que rechazarlo.

Pruébenlos de verdad 🔬

  • Con el lector USB en un PC: impriman esta página (o el PDF) y escaneen los códigos — el lector debería “tipear” el texto tal cual. Así validan lector y formato antes de escribir una línea de firmware.
  • En la Etapa 4 (escaneo simulado): escriban estos mismos textos en el monitor serial. Son sus datos de prueba oficiales.
  • En el firmware: un cassette válido calza con la expresión regular ^\d+-\d+(\.\d+)+$; una lámina es lo mismo más -\d+ al final.
  • La credencial del TM: su formato se define con Camilo (algo como TM-…); mientras tanto, simúlenla.
Paso a paso

# El plan: 11 etapas

De fácil a difícil. Cada etapa termina con algo que funciona y se puede mostrar. Toca un recurso para abrirlo. Las etapas 0–5 y 7–8 no necesitan el lector: ¡pueden empezar ya!

0

Setup + Blink

Sin lector

Instalar Arduino IDE y los drivers, y hacer parpadear un LED. El “hola mundo” del hardware.

1

Pantalla OLED

Sin lector

Escribir texto y estados en la pantalla SSD1306 integrada (I²C en GPIO21/22).

2

WiFi + hora

Sin lector

Conectarse a la red, mostrar el estado en pantalla y obtener la hora real por NTP.

3

Enviar datos

Sin lector

Hacer un POST a un servidor de prueba. Aquí aprenden HTTP y a armar JSON.

4

Escaneo simulado

Sin lector

La lógica de sesión: login → cassettes. Se prueba escribiendo el código por el monitor serial, sin lector. Aquí nace la máquina de estados.

5

Conexión real

Sin lector

Enviar el evento real a la plataforma, autenticando con la clave y manejando errores.

6

Lector físico

Con lector

Conectar el lector por UART (con divisor de nivel 5V→3.3V) y leer escaneos reales. Aquí decidimos lector TTL (SH-400) o GM65.

7

Buffer offline

Sin lector

Guardar los escaneos en la memoria del ESP32 y reintentar al volver la red. Que nada se pierda.

8

Config sin recompilar

Sin lector

Un portal para configurar WiFi y la estación sin tener que tocar el código cada vez.

9

Carcasa 3D

Diseño

Medir los componentes, modelar la caja, imprimirla y montar todo dentro.

10

Prueba en terreno 🎉

Con lector

Probarlo en una estación real, ajustar los detalles y entregar. ¡Premio!

Todos los links en un lugar

# Caja de herramientas

Accesos directos a todo lo que van a necesitar, ordenados por tema.

La meta

# Cómo se gana el premio

Se considera logrado cuando…

  • Un TM inicia sesión escaneando su credencial y ve su identidad en la pantalla.
  • Al escanear un cassette, el evento (quién/qué/cuándo/estación) queda registrado en la plataforma.
  • Si se cae el WiFi, los escaneos no se pierden y se sincronizan al volver la red.
  • El dispositivo vive en una carcasa 3D impresa por ustedes.
  • Funciona en una prueba real en una estación de inclusión.