@ -7,7 +7,7 @@ El propósito principal de este proyecto es estudiar y comprender la arquitectur
---
---
# Objetivo del Proyecto
# Objetivo del Proyecto
Implementar un controlador de bajo nivel para el sensor **MH-Z19B** utilizando comunicación **UART**, integrándolo con una interfaz web capaz de visualizar las mediciones de CO₂ en tiempo real. Esta implementación constituye la base para el desarrollo de futuras microestaciones inteligentes destinadas al monitoreo ambiental y la calidad del aire.
Implementar un controlador de bajo nivel para el sensor **MH-Z19B** utilizando comunicación **UART**, permitiendo que muestre las mediciones de CO₂ en tiempo real en la terminal. Esta implementación constituye la base para el desarrollo de futuras microestaciones inteligentes destinadas al monitoreo ambiental y la calidad del aire.
---
---
@ -42,11 +42,6 @@ Las principales características del sensor son:
Would you like a login shell to be accessible over serial?
Would you like a login shell to be accessible over serial?
No
No
```

```
Would you like the serial port hardware to be enabled?
Would you like the serial port hardware to be enabled?
Yes
Yes
```
```

Reiniciar el sistema:
Reiniciar el sistema:
@ -128,29 +129,10 @@ cd CO2-Sensor
---
---
## 5. Configurar Nginx
Copiar los archivos de la interfaz web al servidor:
```bash
sudo cp index.html /var/www/html/
sudo cp -r MHZ19B /var/www/html/
```
Reiniciar Nginx:
```bash
sudo systemctl restart nginx
```
---
# Compilación del Controlador en C
# Compilación del Controlador en C
Ubicarse en el directorio del proyecto:
```bash
```bash
cd /var/www/html/
cd MHZ19B
```
```
Compilar el controlador:
Compilar el controlador:
@ -176,33 +158,7 @@ El controlador se comunicará con el sensor mediante el dispositivo:
```text
```text
/dev/serial0
/dev/serial0
```
```
Este no es un puerto físico real, sino un acceso directo que el sistema operativo de la Raspberry Pi crea automáticamente para apuntar al puerto serial principal que está mapeado a los pines físicos de la placa.
Las mediciones serán almacenadas periódicamente en el archivo:
```text
MHZ19B.json
```
Este archivo será utilizado posteriormente por la interfaz web.
---
# Visualización del Dashboard
Obtener la dirección IP de la Raspberry Pi:
```bash
hostname -I
```
Abrir un navegador web desde cualquier dispositivo conectado a la misma red local e ingresar:
```text
http://<IP_DE_LA_RASPBERRY_PI>
```

La interfaz web consultará periódicamente el archivo **MHZ19B.json** mediante JavaScript utilizando peticiones asíncronas (`fetch()`), mostrando en tiempo real la concentración de CO₂ y el estado de la calidad del aire.
---
---
@ -217,22 +173,16 @@ La interfaz web consultará periódicamente el archivo **MHZ19B.json** mediante
B{{ Raspberry Pi 4}} --> C
B{{ Raspberry Pi 4}} --> C
%% Proceso de Software
%% Proceso de Software
C( Driver en C) -->|Escribe datos| D
C( Driver en C) -->|Imprime datos| D
%% Base de datos / Archivo
D[( MHZ19B.json)] -.->|Lectura local| E
%% Servidor Web
E[[ Servidor Nginx]] -->|HTTP / Fetch API| F
%% Nube / Web Dashboard
%% Terminal
F(( Dashboard Web / Cliente))
D[[ Terminal ]]
```
```
---
---
# Conclusión
# Conclusión
El uso del protocolo UART implica un gran desafío debido a su necesidad de programación a bajo nivel en C. Durante la fase de depuración se logró identificar que dejar que el sistema operativo controle los tiempos lo hace muy propenso a fallas de sincronización. Esto se evidenció en la recepción de "basura" hexadecimal, la captura de tramas incompletas de apenas 3 bytes, el congelamiento del sistema por saturación de peticiones y un retraso de 6 segundos entre la consola y la interfaz gráfica.
El uso del protocolo UART implica un gran desafío debido a su necesidad de programación a bajo nivel en C. Durante la fase de depuración se logró identificar que dejar que el sistema operativo controle los tiempos lo hace muy propenso a fallas de sincronización. Esto se evidenció en la recepción de "basura" hexadecimal, la captura de tramas incompletas de apenas 3 bytes, el congelamiento del sistema por saturación de peticiones.
A pesar de esto, UART sigue siendo uno de los pilares dentro de los sistemas embebidos por ser una herramienta directa, robusta y útil. No solo permite una transmisión de datos confiable en tiempo real, sino que otorga el control absoluto sobre el hardware.
A pesar de esto, UART sigue siendo uno de los pilares dentro de los sistemas embebidos por ser una herramienta directa, robusta y útil. No solo permite una transmisión de datos confiable en tiempo real, sino que otorga el control absoluto sobre el hardware.
@ -241,5 +191,4 @@ A pesar de esto, UART sigue siendo uno de los pilares dentro de los sistemas emb
Aunque este mini proyecto cumple su objetivo de leer el CO₂ y probar la comunicación UART, tiene las siguientes limitaciones prácticas que debemos tomar en cuenta:
Aunque este mini proyecto cumple su objetivo de leer el CO₂ y probar la comunicación UART, tiene las siguientes limitaciones prácticas que debemos tomar en cuenta:
- **Tiempos no exactos:** La Raspberry Pi funciona como una computadora normal y no está diseñada para controlar el tiempo con una precisión matemática perfecta. Esto hace que las pausas para comunicarse con el sensor tengan ligeras variaciones.
- **Tiempos no exactos:** La Raspberry Pi funciona como una computadora normal y no está diseñada para controlar el tiempo con una precisión matemática perfecta. Esto hace que las pausas para comunicarse con el sensor tengan ligeras variaciones.
- **El programa se "pausa" a esperar:** Actualmente, el código en C se detiene por completo hasta que el sensor responde y se guarda el archivo. Esto funciona bien para un solo sensor, pero si en el futuro queremos conectar varios a la vez, el sistema se volvería lento porque tendría que esperar a uno por uno en lugar de atenderlos al mismo tiempo.
- **El programa se "pausa" a esperar:** Actualmente, el código en C se detiene por completo hasta que el sensor responde. Esto funciona bien para un solo sensor, pero si en el futuro queremos conectar varios a la vez, el sistema se volvería lento porque tendría que esperar a uno por uno en lugar de atenderlos al mismo tiempo.
- **Consumo innecesario en la página web:** El panel web descarga el archivo completo cada dos segundos, haya o no haya datos nuevos. Para la versión final de la estación, lo ideal sería usar un método más inteligente donde la página se actualice *solo* cuando el nivel de CO₂ cambie, para no desperdiciar recursos ni hacer trabajar a la placa de más.