Este repositorio contiene el desarrollo integral del proyecto académico e investigativo "Bachito", un ecosistema tecnológico Full-Stack y de Internet de las Cosas (IoT) diseñado para mitigar problemas de movilidad urbana mediante la auditoría vial automatizada, elaborado en la Universidad Politécnica Salesiana.
El objetivo principal consiste en detectar irregularidades en el asfalto (baches) utilizando sensores de hardware integrados en vehículos, y transmitir esta telemetría en tiempo real a una plataforma web centralizada. La plataforma ofrece mapas de calor, cálculo de proximidad GPS para prevención de accidentes y exportación de datos estadísticos.
Diseñar e implementar una arquitectura IoT de extremo a extremo capaz de detectar baches en tiempo real, procesar la información en un servidor seguro y visualizar los riesgos geolocalizados en una interfaz interactiva.
- Configurar hardware embebido (ESP32) para capturar y filtrar datos de sensores ultrasónicos y de movimiento.
- Desarrollar una API RESTful en Node.js que gestione la autenticación de usuarios y almacene registros de telemetría de manera segura.
- Implementar mecanismos de validación DNS avanzados para garantizar la integridad de los usuarios registrados.
- Construir un panel administrativo en React con mapas interactivos de densidad geográfica (Heatmaps).
- Desarrollar un algoritmo de cálculo de distancia GPS en tiempo real para alertar a los usuarios de peligros inminentes a menos de 30 metros.
El ecosistema se divide en tres capas principales interconectadas:
- Microcontrolador: ESP32 programado en C++.
- Sensores: PIR (Sensor de movimiento) y HC-SR04 (Sensor Ultrasónico).
- Lógica de Filtrado: El sistema opera bajo un modelo orientado a eventos. Solo realiza peticiones HTTP al detectar una profundidad superior al umbral (
> 50cm), implementando un cooldown de 5 segundos para prevenir saturación de red (DDoS accidental).
- Framework: Node.js con Express.js.
- Patrón de Diseño: Modelo-Vista-Controlador (MVC) con rutas, controladores y modelos separados.
- Seguridad:
- Validación estricta de dominios de correo electrónico mediante el módulo
dns.resolveMxpara evitar registros fantasma. - Autenticación Stateless basada en JSON Web Tokens (JWT).
- Cifrado de contraseñas con
bcryptjs.
- Validación estricta de dominios de correo electrónico mediante el módulo
- Librerías Core: React.js, Axios, React-Leaflet, Chart.js.
- Características Clave:
- Renderizado de Mapas de Calor (HeatmapLayer) para identificar clústeres de daño vial.
- Alertas dinámicas calculadas mediante la fórmula de Haversine para proximidad de coordenadas.
- Generación nativa (Blob) de archivos CSV para exportación de auditorías.
- Algoritmo de asignación GPS en caliente para emparejar reportes de hardware con coordenadas del dispositivo cliente.
El proyecto mantiene una separación limpia de responsabilidades:
BOOTEABLE/Bachito/
├── BachitoIno/ # Firmware C++ (Lógica de sensores y conexión WiFi)
├── backend/ # API REST Node.js (Auth, Sensores, DB Models)
└── frontend/ # SPA React (Mapas, Dashboard, Descarga CSV)
- Node.js (v16+)
- MongoDB (Local o Atlas)
- Arduino IDE (con soporte para placa ESP32)
# Backend
npm install express mongoose bcryptjs jsonwebtoken cors
# Frontend
npm install react-leaflet leaflet leaflet-heatmap react-chartjs-2 axiosgit clone https://github.com/BOOTEABLE/Bachito.gitAbre una terminal y navega al directorio del backend:
cd backend
npm install
# Iniciar el servidor (Por defecto: http://localhost:4000)
npm startAbre una nueva terminal y navega al directorio del frontend:
cd frontend
npm install
# Iniciar la aplicación React (Por defecto: http://localhost:3000)
npm start- Abrir
BachitoIno/BachitoIno.inoen Arduino IDE. - Actualizar las credenciales
ssidypasswordde la red WiFi. - Modificar
serverUrlcon la dirección IP de la máquina donde se ejecuta el backend. - Compilar y cargar el código en la placa ESP32.
- La integración de
dns.resolveMxen el backend incrementó sustancialmente la fiabilidad de la base de datos de usuarios al bloquear dominios temporales o inexistentes. - El procesamiento geoespacial delegando el cálculo de distancias y renderizado de mapas de calor al frontend (React) redujo la carga de procesamiento del servidor Node.js.
- La lógica restrictiva orientada a eventos en el firmware (C++) demostró ser vital para el ahorro de ancho de banda y almacenamiento en entornos de Internet de las Cosas.
- David Cruz
- Emily Ortega
- Carlos Pilatuña
Carrera de Ingeniería en Computación
Universidad Politécnica Salesiana
Quito, Ecuador
Este proyecto fue desarrollado con fines académicos y colaborativos dentro de la Universidad Politécnica Salesiana. Todos los derechos pertenecen a sus respectivos autores.