You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Fernando Martinez Valenzuela eb978a53d2 Implemementación de mediciones en la terminal 2 days ago
MHZ19B Implemementación de mediciones en la terminal 2 days ago
EsquemaPines.png Primer Commit Repositorio 4 days ago
InterfaceOption.png Implemementación de mediciones en la terminal 2 days ago
README.md Implemementación de mediciones en la terminal 2 days ago
SerialPort.png Implemementación de mediciones en la terminal 2 days ago
WYLL_No.png Implemementación de mediciones en la terminal 2 days ago
WYLS_Yes.png Implemementación de mediciones en la terminal 2 days ago

README.md

Proyecto de Investigación: Integración del Sensor NDIR MH-Z19B vía UART

Este repositorio documenta la integración, adquisición y visualización de datos del sensor de dióxido de carbono (CO₂) MH-Z19B.

El propósito principal de este proyecto es estudiar y comprender la arquitectura del protocolo de comunicación asíncrona UART a bajo nivel en sistemas embebidos basados en Linux utilizando una Raspberry Pi 4. Esta implementación integra una prueba experimental para la integración de sensores que formarán parte del desarrollo de microestaciones destinadas al monitoreo de la calidad del aire, desarrolladas durante el Verano de la Investigación Científica y Tecnológica del Programa Delfín 2026.


Objetivo del Proyecto

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.


Especificaciones Técnicas del Sensor (MH-Z19B)

El MH-Z19B es un sensor compacto que utiliza la tecnología NDIR (Non-Dispersive Infrared) para medir la concentración de dióxido de carbono (CO₂) en el aire. Esta tecnología se basa en que las moléculas de gas absorben luz infrarroja a longitudes de onda muy específicas por lo que proporciona alta selectividad, buena estabilidad y no depende de la concentración de oxígeno para realizar las mediciones.

Las principales características del sensor son:

Característica Valor
Tecnología NDIR (Non-Dispersive Infrared)
Gas medido CO₂
Rango de medición 02000 ppm o 05000 ppm (configurable)
Voltaje de alimentación 3.65.5 V DC
Tiempo de precalentamiento 3 minutos
Comunicación UART TTL
Velocidad de transmisión 9600 baudios
Configuración UART 8 bits de datos, sin paridad, 1 bit de parada (8N1)
Vida útil estimada Mayor a 5 años

Material

Hardware

  • Raspberry Pi 4
  • Sensor MH-Z19B
  • Cables Jumper
  • MicroSD card with Raspberry Pi OS

Software

  • UART (TTL)
  • Lenguaje C
  • Linux
  • Git

Conexiones de Hardware (Capa Física)

Para establecer correctamente la comunicación UART entre el sensor y la Raspberry Pi 4 es necesario cruzar las líneas de transmisión y recepción.

Pin MH-Z19B Función Raspberry Pi 4 Descripción
Vin (Pin 6) Alimentación Pin físico 2 o 4 (5 V) Alimenta el sensor.
GND (Pin 7) Tierra Pin físico 6 (GND) Referencia eléctrica común.
TXD (Pin 3) Transmisión Pin físico 10 (GPIO15 / RXD) Envía los datos del sensor hacia la Raspberry Pi.
RXD (Pin 2) Recepción Pin físico 8 (GPIO14 / TXD) Recibe los comandos enviados por la Raspberry Pi.

Esquema de Conexiones


Guía de Uso

1. Actualizar el Sistema

sudo apt update && sudo apt upgrade -y

2. Instalar Dependencias

sudo apt install git gcc -y

3. Habilitar UART

Ejecutar:

sudo raspi-config

Ir a:

Interface Options
    └── Serial Port

Opciones de Interfaz

Puerto Serial

Configurar:

Would you like a login shell to be accessible over serial?
No

Would you like a login shell to be accessible over serial?

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

Would you like the serial port hardware to be enabled?

Reiniciar el sistema:

sudo reboot

4. Clonar el Repositorio

git clone https://gitea.itmorelia.com/Verano-Delfin-2026/CO2-Sensor.git
cd CO2-Sensor

Compilación del Controlador en C

cd MHZ19B

Compilar el controlador:

gcc mhz19b_driver.c -o driver_co2

Asignar permisos:

sudo chmod +x driver_co2

Ejecutar el programa:

sudo ./driver_co2

El controlador se comunicará con el sensor mediante el dispositivo:

/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.


Arquitectura General del Sistema

         graph TD
    %% Sensor físico
    A[ Sensor MH-Z19B] -->|UART 9600 baudios| B
    
    %% Placa/Hardware
    B{{ Raspberry Pi 4}} --> C
    
    %% Proceso de Software
    C( Driver en C) -->|Imprime datos| D
    
    %% Terminal
    D[[ Terminal ]] 

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.

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.

Limitaciones

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.
  • 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.