STM32F103系列驱动MH-Z14A 二氧化碳(CO2)传感器详解,使用串口输出读取(后附免费免积分程序下载链接)

本文详细介绍了如何使用STM32F103驱动MH-Z14A二氧化碳传感器进行数据读取。通过串口通信,设置波特率为9600,数据位为8位,停止位为1位,无校验位。代码包括串口初始化、中断服务函数和数据读取函数,实现了每秒读取一次CO2浓度并打印的功能。此外,还提供了免费的STM32驱动代码下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MH-Z14A 二氧化碳传感器概述
        MH-Z14A 二氧化碳气体传感器(以下简称传感器)是一个通用智能小型传感器,利用非色散红外(NDIR )原理对空气中存在的 CO 2 进行探测,具有很好的选择性和无氧气依赖性,寿命长。内置温度补偿;同时具有数字输出、模拟输出及 PWM 输出,方便使用。该传感器是将成熟的红外吸收气体检测技术与精密光路设计、精良电路设计紧密结合而制作出的高性能传感器。
以下为MH-Z14A 二氧化碳气体传感器的实物图

 传感器特点及技术指标

传感器常用量程和精度 

传感器引脚定义图 

串口输出 (UART)

        我使用的是串口输出的方式来读取CO2浓度。以下为该传感器说明书的串口通信模式。将传感器的 Vin-GND-RXD-TXD 分别接至STM32板子的 5V-GND-TXD-RXD。(用户端须使用 TTL 电平,如果是 RS232 电平,须进行转换)。将串口波特率设置为 9600,数据位设置为 8 位,停止位设置为 1 位、奇偶校验位设置为无。

 以下为读取CO2浓度代码

//读取二氧化碳浓度
//不使用校验和
void CO2_Read(u16 *co2)
{
    u8 lenrx;
    UART5_Count=0;
    memset(UART5_RX_BUF,0,9);
    USART_SendData_Length(send,9);
    delay_ms(1000);
    lenrx = UART5_Count;
    delay_ms(10);
    if(lenrx==UART5_Count)
    {
            *co2 = UART5_RX_BUF[2]*256+UART5_RX_BUF[3];//计算二氧化碳浓度
            if(*co2 > 5000)//目前设置CO2传感器的浓度最高为5000ppm,可修改
                *co2 = 5000;
    }
}

以下为串口命令发送函数,发送指定长度的数据。

void USART_SendData_Length(u8 *buf,u16 length)
 {
     u16 i;
     for(i=0;i<length;i++)
     {
         USART_SendData(UART5,buf[i]);
         while(USART_GetFlagStatus(UART5,USART_FLAG_TC)==RESET);
//         delay_ms(10);
     }
 }

以下为CO2传感器端口配置初始化函数代码以及串口中断服务函数设置。

 //CO2传感器端口配置初始化函数
 void CO2_Init(void)
 {
	  //GPIO端口设置
	 GPIO_InitTypeDef GPIO_InitStructure;
	 USART_InitTypeDef USART_InitStructure;
	 NVIC_InitTypeDef NVIC_InitStructure;

	  //使能GPIOC和GPIOD时钟
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);	
 
	 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE);//使能串口5
	 USART_DeInit(UART5);//复位串口5
      
      //UART5_TX   GPIOC.12
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PC.12
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
     GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC.12
   
      //UART5_RX	  GPIOD.2初始化
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//PD2
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
     GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化GPIOD.2 
     
	//UART5 初始化设置

	USART_InitStructure.USART_BaudRate = 9600;//串口波特率
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式
	USART_Init(UART5,&USART_InitStructure);//根据指定参数初始化串口5
	
	NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;//指定中断通道
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级为2
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//响应优先级为2
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能指定中断通道
	NVIC_Init(&NVIC_InitStructure);//根据指定参数初始化NVIC
	
	USART_ITConfig(UART5,USART_IT_RXNE,ENABLE);//开启串口5接收中断
	USART_Cmd(UART5,ENABLE);//使能串口5

 }

//串口5中断服务函数
 void  UART5_IRQHandler(void)
 {
#if SYSTEM_SUPPORT_OS 		//如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
	OSIntEnter();    
#endif    
	 if(USART_GetITStatus(UART5,USART_IT_RXNE)!=RESET)
	 {
         USART_ClearITPendingBit(UART5,USART_IT_RXNE);
		 UART5_RX_BUF[UART5_Count++] = USART_ReceiveData(UART5);
		 if(UART5_Count > 9)
         {
             UART5_Count=0;
         }
	 }
#if SYSTEM_SUPPORT_OS 	//如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
	OSIntExit();  											 
#endif
 }

以下为main函数相关代码。

 int main(void)
 {	
	u8 t;
	u16 co2;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	delay_init();
	uart_init(115200);	 	//串口初始化为115200
	CO2_Init();
	while(1)
	{	    	    
 		if(t%100==0)			//每1s读取一次
		{			
			CO2_Read(&co2);
			printf("co2 = %d ppm\r\n",co2);
		}				   
	 	delay_ms(10);
		t++;
	}

该程序下载链接如下,完全免费,不要任何积分,欢迎大家踊跃下载:

STM32F103驱动MH-Z14A二氧化碳(CO2)传感器代码免费!免费!免费!无需积分!-硬件开发文档类资源-CSDN下载

如果本文有任何问题,欢迎来讨论呀!最后请点个赞呗!

本项目介绍的是NDIR红外二氧化碳传感器模块(MH-Z14串口通信及其详细使用说明。环境监测MH-Z14A二氧化碳气体传感器(以下简称传感器)是一个通用智能小型传感器,利用非色散红外(NDIR)原理对空气中存在的CO2进行探测,具有很好的选择性和无氧气依赖性,寿命长。内置温度补偿;同时具有数字输出、模拟输出及PWM输出,方便使用件提供二氧化碳浓度值读取串口方式)及MH-Z14A二氧化碳传感器串口屏显示)等。 二氧化碳MH-Z14使用连接图: 环境监测MH-Z14A二氧化碳气体传感器特点: 三种方式信号输出;(模拟输出/串口UCHAR输出串口Uchar信号可接单片机IO串口;(TTL电平9,600,N,8,1) 模拟线性输出0.4-2V ,浓度越高电压越高; 带PWM调制波形输出读取更方便; 模块采用(NDIR)红外技术对二氧化碳具有很好的选择; 模块重量轻、体积小巧,使用寿命长,稳定性好等特点。 二氧化碳MH-Z14 模块参数如下: 1、工作电压:DC4-6V 2、工作电流:50mA均值|— 峰值100mA 3、检测范围:0-5000ppm 4、检测精度:±50ppm 5、预热时间:180S 6、模拟输出电压:0.4-2V (线性输出) 7、数字输出:串口数据输出(9600,N,8,1) 8、响应时间:≤30S 9、工作温度:0~60℃ 10、工作湿度:0~90%RH 11、存储温度:-20~60℃ 12使用寿命:5年 13、尺寸大小:57mm×35mm×15mm 14、重量大小:17g MH-Z14 传感器模块具体应用说明,详见件内容。
### JW01 CO2 二氧化碳传感器原理图设计 JW01-CO2 是一种用于检测二氧化碳 (CO2) 浓度的模块,通常集成了串行通信接口(如 USART),以便于与其他设备连接和数据传输。以下是关于其原理图设计的关键点: #### 1. 功能概述 JW01-CO2 模块的核心功能在于通过内置传感器测量环境中的 CO2 浓度,并将结果转换为可读取的数据信号输出。该模块支持 UART 接口通讯,提供 TXD 和 RXD 引脚作为主要数据交互端口[^1]。 #### 2. 主要组成部分 - **电源部分**: 需要稳定的 5V 电压输入来驱动整个模块工作。TXD 输出同样基于 5V 电平标准。 - **核心传感单元**: 使用 NDIR(非色散红外)技术或其他成熟的 CO2 检测方法实现高精度测量。 - **UART 数据接口**: 提供两个关键引脚——`TXD` 和 `RXD`,分别负责发送和接收数据帧。 #### 3. 原理图基本框架 以下是简化版的电路框图描述: ```plaintext +-------------------+ | | | Power Supply |----> VCC = 5V, GND | | +-------------------+ +----------------------------------+ | | | CO2 Sensing Unit |----> Analog/Digital Signal Processing | | +----------------------------------+ +-------------------------------+ | | | Microcontroller |----> Handles UART Communication via TXD/RXD Pins | | +-------------------------------+ ``` #### 4. 实际硬件布局建议 为了确保稳定性和可靠性,在实际 PCB 设计过程中需要注意以下几点: - 将敏感模拟信号线路远离高频数字信号线以减少干扰; - 对地平面进行合理分割处理,防止不同区域之间形成电流回路耦合噪声; - 添加必要的滤波元件比如陶瓷电容器靠近芯片供电管脚位置安装。 #### 5. 示例代码片段 下面给出一段简单的 Python 脚本用来读取来自此类型传感器的数据流并通过串口解析得到最终数值: ```python import serial ser = serial.Serial('/dev/ttyUSB0', baudrate=9600) def read_co2(): data_bytes = ser.read(8) # Assuming an 8-byte packet format from the sensor. co2_ppm = int.from_bytes(data_bytes[:2], byteorder='big') # Extract first two bytes as integer value representing CO2 level in PPM units. return f"Current CO2 concentration is {co2_ppm} ppm." ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值