查看: 2731|回复: 0

GD32F207读ZE08-CH2O甲醛传感器测量甲醛浓度值

[复制链接]
  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-2-17 13:41:58 | 显示全部楼层 |阅读模式
    分享到:
    1、电化学甲醛模组 ZE08-CH2O介绍
    ZE 08 -CH 2 O型电化学甲醛模组是一个通用型、小型化模组。利用电化学原理对空气中存在的CH 2 O进行探测,具有良好的选择性,稳定性。内置温度传感器,可进行温度补偿;同时具有数字输出与模拟电压输出,方便使用。ZE 08 -CH 2 O是将成熟的电化学检测技术与精良的电路设计紧密结合,设计制造出的通用型气体模组。
    传感器特点  1.高灵敏度、高分辨率、低功耗、使用寿命长
      2.提供UART、模拟电压信号、PWM波形等多种输出方式
      3.高稳定性、优秀的抗干扰能力、温度补偿、卓越的线性输出
    2、通讯及管脚说明

    3、接线
    ZE08-CH20模块会每隔一秒钟通过Pin6(UART_TX)向外传送一次数据,所以我们使用小红板的USART2接口来接收数据。PA3接传感器 Pin6,PA2接传感器的Pin5。在这里还有一个问题,因为小红板上的USART2使用PD5和PD6,本来我是想使用USART2的Remap到 PD5和PD6上去,但是测试后不起作用。不知道是我程序有问题还是这个芯片的BUG,有待求证。
    4、驱动代码:
    ch2o.h
    /** **************************************************************************************** * * @file ch2o.h * * @brief ch2o甲醛传感器操作模块头文件 * * Copyright (C) sunsjw 2015 * * $Rev: 1.0 $ * **************************************************************************************** */#ifndef __CH2O_H#define __CH2O_H #ifdef __cplusplus extern "C" {#endif   #include "gd32f20x.h"void CH2O_Init(void);#ifdef __cplusplus}#endif#endifch2o.c
    /** **************************************************************************************** * * @file ch2o.c * * @brief ch2o甲醛传感器操作模块头 * * Copyright (C) sunsjw 2015 * * $Rev: 1.0 $ * **************************************************************************************** */ #include "ch2o.h"  /** * @brief  h2o甲醛传感器初始化 * @param[in] None * \retval  None */void CH2O_Init(){        GPIO_InitPara gpio_stru;                //Config usart2 RX        gpio_stru.GPIO_Mode = GPIO_MODE_IN_FLOATING;        gpio_stru.GPIO_Pin = GPIO_PIN_3;        gpio_stru.GPIO_Speed = GPIO_SPEED_10MHZ;                GPIO_Init(GPIOA,&gpio_stru);        //Config usart2 TX        gpio_stru.GPIO_Mode = GPIO_MODE_AF_PP;        gpio_stru.GPIO_Pin = GPIO_PIN_2;        gpio_stru.GPIO_Speed = GPIO_SPEED_10MHZ;                GPIO_Init(GPIOA,&gpio_stru);}主程序读ch2o代码:
    void ShowCH2O(void){        uint8_t rx;                rx = 0x00;        for(int i=0;i<9;i++)                showBuffer = 0;        // Call received API        while(USART_GetBitState(USART2,USART_FLAG_RBNE) != SET);        rx = USART_DataReceive(USART2);        if(rx == 0xFF)        {                showBuffer[0] = rx;                for(int i=1;i<9;i++)                {                        // Call received API                        while(USART_GetBitState(USART2,USART_FLAG_RBNE) != SET);                        rx = USART_DataReceive(USART2);                        showBuffer = rx;                }        }        /*国家标准室内0.08mg/m3 = 833 * 0.08 = 66.64 ppb。*/        int pm25Value = showBuffer[4]*256 + showBuffer[5];        float result = pm25Value / 66.64 * 0.08;        /*        int v1 = (int)result;        int v2 = (int)((result - v1)*1000);        PRINTF("CH2O: %d.d(mg/m3)\r\n",v1,v2);        */        sprintf((char*)showBuffer,":%1.3f mg/",result);        OLED_ShowCHinese(0,0,4);//显示汉字甲        OLED_ShowCHinese(16,0,5);//显示汉字醛        OLED_ShowString(32,0,showBuffer);        OLED_ShowCHinese(112,0,10);//显示m³        }USART配置代码:
    void USART_config(void){        USART_InitPara usart_stru;                usart_stru.USART_BRR = 9600;        usart_stru.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE;        usart_stru.USART_Parity = USART_PARITY_RESET;        usart_stru.USART_STBits = USART_STBITS_1;        usart_stru.USART_RxorTx = USART_RXORTX_RX| USART_RXORTX_TX;        usart_stru.USART_WL = USART_WL_8B;                USART_Init(USART2,&usart_stru);        USART_Enable(USART2,ENABLE);}实验效果:

    热门推荐:
    轻轻松松入门GD32F207开发板
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-19 23:22 , Processed in 0.120297 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.