Hardware
IRTimer usa una única PCB (6 capas, < 50×50 mm) que alberga todos los componentes. Lo que determina su comportamiento no es el hardware, sino el firmware que se carga: la misma placa puede operar en Modo Main o Modo Aux según el software flasheado.
Dos modos, una PCB
| Componente | Modo Main | Modo Aux |
|---|---|---|
| ST7789 TFT 135×240 | ✅ | — |
| Botones (2) | ✅ | — |
| TSSP77038TR (RC5 IR) | ✅ | — |
| Sharp GP2Y0D815Z0F | ✅ | ✅ |
| WS2812B RGB LEDs (2) | ✅ | ✅ |
| ADC batería | ✅ | ✅ |
| Carga LiPo | ✅ | ✅ |
| WiFi | STA+AP | STA (solo escaneo) |
| ESP-NOW | Receptor | Transmisor |
- Modo Main — Host del sistema. Pensado para siguelíneas: se sitúa junto a la línea de meta, detecta el paso del robot con su propio sensor IR, muestra tiempos en la pantalla TFT, monta un servidor web para el overlay OBS, y recibe comandos ESP-NOW de las paredes auxiliares.
- Modo Aux — Sensor de pared para laberinto de micromouse. Sin pantalla, sin botones, sin receptor RC5. Solo el sensor IR para detectar al robot y ESP-NOW para notificar al Main.
Microcontrolador
Ambos modos usan el mismo MCU: un ESP32C3 supermini soldado a la PCB.
| Característica | Detalle |
|---|---|
| Modelo | ESP32-C3 supermini |
| Arquitectura | RISC-V 32-bit single-core |
| Frecuencia | 160 MHz |
| Flash | 4 MB |
| SRAM | 400 KB |
| WiFi | 802.11 b/g/n (2.4 GHz) |
| Bluetooth | BLE 5.0 (no usado) |
| Framework | Arduino (espressif32) |
| Entorno | PlatformIO |
Periféricos usados (Modo Main)
| Periférico | Propósito |
|---|---|
| GPIO | Pines digitales (botones, sensor, LEDs, carga) |
| ADC (12-bit) | Lectura de voltaje de batería |
| SPI (hardware) | Display ST7789 (80 MHz) |
| GPIO Interrupt | Receptor RC5 en pin 7 (modo CHANGE) |
| WiFi STA+AP | Servidor web + ESP-NOW |
| ESP-NOW | Recepción de comandos de módulos Aux |
Periféricos usados (Modo Aux)
| Periférico | Propósito |
|---|---|
| GPIO | Pines digitales (sensor, LEDs, carga) |
| ADC (12-bit) | Lectura de voltaje de batería |
| WiFi STA | Escaneo de canal + ESP-NOW |
| ESP-NOW | Envío de comandos al Main |
PCB
Diseñada en KiCad, es la primera PCB de OPRobots con 6 capas.
| Característica | Detalle |
|---|---|
| Capas | 6 |
| Dimensiones | < 50 × 50 mm |
| Acabado | ENIG (oro) |
| Carga | Vía USB-C del ESP32-C3 |
| Conectores LED | Vertical (modo Main) y horizontal (modo Aux) |
| Librerías | OPRobots/KiCADLibraries (submódulo) |
Nota: La PCB es exactamente la misma para ambos modos. Los conectores LED en vertical/horizontal permiten orientar la tira de NeoPixels según la carcasa usada (Main con pantalla o Aux en poste de laberinto).

Sensores
Sharp GP2Y0D815Z0F
Sensor infrarrojo digital de proximidad. Presente en ambos modos.
| Característica | Detalle |
|---|---|
| Modelo | Sharp GP2Y0D815Z0F |
| Tipo | Digital (on/off) |
| Rango | ~15 cm |
| Salida | Activa-baja (LOW = objeto detectado) |
| GPIO | Pin 1 (SENSOR_PIN) con INPUT_PULLUP |
TSSP77038TR (solo Modo Main)
Receptor de infrarrojos a 38 kHz para decodificar comandos RC5 desde un mando a distancia.
| Característica | Detalle |
|---|---|
| Modelo | TSSP77038TR |
| Frecuencia | 38 kHz |
| Protocolo | RC5 |
| GPIO | Pin 7 (IR_PIN) con interrupción CHANGE |
Pantalla (solo Modo Main)
| Característica | Detalle |
|---|---|
| Driver | ST7789 |
| Resolución | 135 × 240 px (RGB 565) |
| Interfaz | SPI hardware |
| Velocidad SPI | 80 MHz |
| Rotación | 3 (landscape) |
| Pines | MOSI: 8, SCLK: 9, CS: 20, DC: 21, RST: 4 |
La pantalla está montada en vertical en la carcasa del modo Main, formando el panel frontal del cronómetro de siguelíneas.
Alimentación
Común a ambos modos. La carga de la LiPo se realiza a través del conector USB-C del ESP32C3.
| Característica | Detalle |
|---|---|
| Batería | LiPo 1S 1500 mAh 523450 |
| Carga | Vía USB-C del ESP32-C3 (conector integrado) |
| Monitorización | Divisor de tensión + ADC (pin 0) |
| Pines carga | Charging: pin 3, Full: pin 2 |
| LEDs de carga | Integrados en el ESP32C3 (CHG LED) |
Pinout
La PCB expone todos los pines. Qué pines se usan depende del firmware cargado. Los pines no usados por un modo simplemente quedan sin inicializar.
Modo Main (Host + LineFollower)
| Pin | Periférico | Función |
|---|---|---|
| 0 | ADC | BATT_VOLTAGE_PIN — lectura voltaje batería |
| 1 | GPIO | SENSOR_PIN — sensor IR Sharp (INPUT_PULLUP) |
| 2 | GPIO | BATT_FULL_PIN — batería cargada (activo bajo) |
| 3 | GPIO | BATT_CHARGING_PIN — batería cargando (activo bajo) |
| 4 | GPIO | TFT_RST — reset del display |
| 5 | GPIO | BTN_BOTTOM_PIN — botón inferior (INPUT_PULLDOWN) |
| 6 | GPIO | BTN_TOP_PIN — botón superior (INPUT_PULLDOWN) |
| 7 | GPIO | IR_PIN — receptor RC5 (interrupción CHANGE) |
| 8 | SPI MOSI | TFT_MOSI — datos al display |
| 9 | SPI SCLK | TFT_SCLK — reloj del display |
| 10 | GPIO | NEOPIXEL_PIN — 2× WS2812B RGB LEDs |
| 20 | GPIO | TFT_CS — chip select del display |
| 21 | GPIO | TFT_DC — data/command del display |
Modo Aux (Paredes de Micromouse)
| Pin | Periférico | Función |
|---|---|---|
| 0 | ADC | BATT_VOLTAGE_PIN — lectura voltaje batería |
| 1 | GPIO | SENSOR_PIN — sensor IR Sharp (INPUT_PULLUP) |
| 2 | GPIO | BATT_FULL_PIN — batería cargada (activo bajo) |
| 3 | GPIO | BATT_CHARGING_PIN — batería cargando (activo bajo) |
| 10 | GPIO | NEOPIXEL_PIN — 2× WS2812B RGB LEDs |
Los pines 4–9 y 20–21 existen en la PCB pero el firmware Aux no los usa. Los pines 5–7 quedan sin inicializar (botones y receptor RC5 no aplican).
Chasis / Carcasa
| Característica | Detalle |
|---|---|
| Diseño | Onshape (paramétrico) |
| Material | PLA / PETG (impresión 3D) |
| Piezas | Cuerpo principal (Main), postes de muro (Aux), soporte PCB, soporte pantalla |
| STL | Disponibles en 3d_model/ |
Hay dos carcasas distintas, una para cada modo, pero ambas montan la misma PCB. La diferencia está en los accesorios: el modo Main añade pantalla y botones físicos; el modo Aux integra el sensor en el poste del laberinto.
Diagramas de Bloques
Modo Main — Host y Cronómetro de LineFollower
flowchart TD
MCU[ESP32-C3 supermini]
Sensor[Sharp GP2Y0D815Z0F]
IR_Recv[TSSP77038TR]
TFT[ST7789 135×240 TFT]
NeoPixel[2× WS2812B RGB]
Buttons[2× Botones]
Battery[LiPo 1S + ADC]
ESP_NOW[ESP-NOW Rx]
WiFi[WiFi STA+AP]
Sensor -->|GPIO| MCU
IR_Recv -->|GPIO INT| MCU
Buttons -->|GPIO| MCU
Battery -->|ADC| MCU
MCU -->|SPI 80MHz| TFT
MCU -->|GPIO| NeoPixel
ESP_NOW -->|cmd 27/42| MCU
MCU -->|HTTP/SSE| WiFi
Modo Aux — Paredes de Micromouse
flowchart TD
MCU[ESP32-C3 supermini]
Sensor[Sharp GP2Y0D815Z0F]
NeoPixel[2× WS2812B RGB]
Battery[LiPo 1S + ADC]
ESP_NOW[ESP-NOW Tx]
WiFi[WiFi STA - escaneo canal]
Sensor -->|GPIO| MCU
Battery -->|ADC| MCU
MCU -->|GPIO| NeoPixel
MCU -->|cmd 27/42| ESP_NOW
MCU -->|escaneo| WiFi
Documento generado el 2026-06-29. Ver también Arquitectura Software, Sensores.
