06. Diseno de hardware - diegogopa/Challenge-IOT GitHub Wiki
6. Diseño de hardware
6.1 Distribución de pines
| Dispositivo | Pin del dispositivo | ESP32 | Observación |
|---|---|---|---|
| DHT22 | DATA | GPIO 4 | — |
| HC-SR04 | TRIG | GPIO 5 | Salida 3.3 V, aceptada por el sensor |
| HC-SR04 | ECHO | GPIO 18 | directo |
| GUVA-S12SD | OUT | GPIO 34 | Entrada solo-ADC, atenuación 2.5 dB |
| OLED SH1106 | SDA | GPIO 21 | Bus I2C compartido, dirección 0x3C |
| OLED SH1106 | SCL | GPIO 23 | Bus I2C compartido |
| BMP180 | SDA | GPIO 21 | Bus I2C compartido, dirección 0x77 |
| BMP180 | SCL | GPIO 23 | Bus I2C compartido |
| Buzzer | + | GPIO 33 | — |
| Todos | GND | GND | Referencia común |
6.2 Conexión del HC-SR04
La señal ECHO del HC-SR04 se conectó directamente al GPIO 18 del ESP32.
El firmware toma 5 muestras por ciclo (separadas 50 ms) y descarta lecturas fuera de 3–25 cm; si en 5 ciclos seguidos no obtiene al menos 3 muestras válidas, declara ERROR_SENSOR.
6.3 Conexión del DHT22
DHT22
├── VCC → 3.3 V
├── DATA → GPIO 4
└── GND → GND
Una lectura se considera válida si no es NaN, la temperatura está entre −40 y 80 °C y la humedad entre 0 y 100 %. Tres lecturas inválidas seguidas activan la falla FALLA_DHT22.
6.4 Conexión del GUVA-S12SD
GUVA-S12SD
├── VCC → 3.3 V
├── OUT → GPIO 34 (ADC1)
└── GND → GND
Se configura el ADC a 12 bits con atenuación de 2.5 dB (rango útil hasta ≈ 1.25 V, que corresponde a índice UV ≈ 11) y se lee con analogReadMilliVolts(), que aplica la calibración de fábrica del ADC. Se promedian 16 muestras por ciclo.
6.5 Bus I2C compartido: OLED y BMP180
3.3 V ─────────┬─────────────┐
│ │
GPIO 21 (SDA) ────────────┼──── SDA ────┼──── SDA
GPIO 23 (SCL) ────────────┼──── SCL ────┼──── SCL
OLED (0x3C) BMP180 (0x77)
GND ──────────────────────┴─────────────┘
Wire.begin(SDA_PIN, SCL_PIN); // 21, 23
Wire.setClock(100000); // 100 kHz (modo estándar)
Wire.setTimeOut(100); // evita bloqueos si un dispositivo se desconecta
Ambos módulos incluyen resistencias de pull-up en la placa. Al compartir el bus:
- Cada dispositivo tiene una dirección distinta, por lo que no hay conflicto.
- El acceso desde la tarea de sensado (BMP180) y desde el ciclo principal (OLED) se serializa con
mutexI2C. - La presencia de cada dispositivo se verifica con una transacción vacía (
Wire.beginTransmission(addr)/endTransmission() == 0), lo que permite detectar su desconexión y reinicializarlo cuando vuelve. - Si se corta SDA o SCL se pierden ambos dispositivos a la vez; por eso las pruebas de desconexión individual se hacen retirando la alimentación del módulo (sección 11.6).
6.6 Conexión del buzzer
Buzzer activo
├── + → GPIO 33
└── - → GND
6.7 Alimentación
Todos los componentes comparten una referencia común de GND. El ESP32 se alimenta por su conector USB/VIN a 5 V; el regulador de la placa entrega 3.3 V al DHT22, GUVA-S12SD, BMP180 y OLED, y el HC-SR04 toma 5 V de VIN.
| Parámetro | Valor |
|---|---|
| Fuente | Versátil: puede usarse una toma de corriente o una batería portátil |
| Voltaje | 5 V |
| Corriente nominal de la fuente | 5 V / 2 A |
| Consumo medido | Ver sección 11.7 |
| Protección | Electrónica alojada dentro de la caja de protección (sección 17) |
6.8 Consideraciones de seguridad eléctrica
- Compatibilidad de niveles lógicos: el resto de dispositivos opera a 3.3 V.
- GND común para todos los módulos.
- Fuente capaz de entregar los picos de corriente del WiFi.
- Protección de las conexiones frente a humedad y sujeción mecánica dentro de la caja.
- El ECHO del HC-SR04 (5 V) entra directo al GPIO 18 (3.3 V). Funcionó en las pruebas, pero excede la tensión nominal del pin.