这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【AIcubeV1.01L】使用AIcube配置串口2实现环境监测

共1条 1/1 1 跳转至

【AIcubeV1.01L】使用AIcube配置串口2实现环境监测

高工
2026-04-16 15:30:09     打赏

一:模块知识:

(1)模块概述

PMS5003T是一款可以同时监测空气中颗粒物浓度及温湿度的二合一传感器。其中颗粒物浓度的监测基于激光散射原理,可连续采集并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度。传感器同时内嵌瑞士生产的温湿度一体检测芯片。颗粒物浓度数值及温度、湿度合并以通用数字接口形式输出。本传感器可嵌入各种与空气质量监测和改善相关的仪器设备,为其提供及时准确的环境参数。

工作原理

(2)本传感器采用激光散射原理。即令激光照射在空气中的悬浮颗粒物上产生散射同时在某一特定角度收集散射光,得到散射光强随时间变化的曲线。进而微处理器利用基于米氏(MIE)理论的算法,得出颗粒物的等效粒径及单位体积内不同粒径的颗粒物数量。传感器各功能部分框图如图1所示

05-1 模块知识.png

安装注意事项

1.金属外壳与内部电源地导通,注意不要和其他外部板组电路或机箱外壳短接。

2.进风口和出风口所在的平面紧贴用户机内壁与外界连通的气孔为最佳安装方式,如无法实现,则出风口周围 2cm 之内无遮挡。进风口和出风口之间应有结构使气流隔离,避免气流在用户机内部从出风口直接回流到进风口。

3.用户机内壁为进风口所开的通气孔不应小于进风口的尺寸。

4.应用于净化器类产品时,尽量避免将传感器直接置于净化器自身风道中,如果无法避免,应单独设置一个独立的结构空间,将传感器置于其中,使其与净化器自身风道隔离。

5。应用与净化器或固定检测设备时,传感器位置应高于地面 20cm 以上。否则有可能被近地面的大尘埃颗粒甚至絮状物污染导致风扇缠绕阻转。

6.传感器应用于户外固定设备时,对于沙尘暴、雨雪等天气以及杨柳絮的防护,应由设备完成。

7.传感器是一个整体元件,用户切勿将其拆解,包括金属屏蔽壳,以防出现不可逆破坏。

传感器底部用 2mm 自攻螺钉固定,螺钉进入壳体长度应不大于 5mm。

二:软件配置

2.1 引脚配置:

03-2 软件配置io口.png

2.2 串口参数配置:

05-3 参数配置.png

三:软件代码:

3.1 串口中断处理函数:

void UART2_ISR(void) interrupt UART2_VECTOR
{
    //<<AICUBE_USER_UART2_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码  
    if (UART2_CheckTxFlag())            //判断串口发送中断
    {
        UART2_ClearTxFlag();            //清除串口发送中断标志
    }

    if (UART2_CheckRxFlag())            //判断串口接收中断
    {
        UART2_ClearRxFlag();            //清除串口接收中断标志
        RX2_Buffer[RX2_Cnt++] = S2BUF;
        RX2_COUNT = 5 ;
    }
    //<<AICUBE_USER_UART2_ISR_CODE1_END>>
}

3.2 串口数据处理:

void DealUsart2Data(int length)
{
    memcpy(&RX2_DEAL_Buffer,&RX2_Buffer,length);
    RX2_Cnt = 0 ;                                 
    RX2_COUNT = 5 ;        
    
    if((RX2_DEAL_Buffer[0] == 0x42)&&(RX2_DEAL_Buffer[1] == 0x4D))
    {
        EnvirMentPara.uiPM10CF =  ( RX2_DEAL_Buffer[4] << 8 ) +RX2_DEAL_Buffer[5] ;
        EnvirMentPara.uiPM25CF =  ( RX2_DEAL_Buffer[6] << 8 ) +RX2_DEAL_Buffer[7] ;
        EnvirMentPara.uiPM100CF =  ( RX2_DEAL_Buffer[8] << 8 ) +RX2_DEAL_Buffer[9] ;
        EnvirMentPara.uiPM10Concent =  ( RX2_DEAL_Buffer[10] << 8 ) +RX2_DEAL_Buffer[11] ;
        EnvirMentPara.uiPM25Concent =  ( RX2_DEAL_Buffer[12] << 8 ) +RX2_DEAL_Buffer[13] ;
        EnvirMentPara.uiPM100Concent =  ( RX2_DEAL_Buffer[14] << 8 ) +RX2_DEAL_Buffer[15] ;
        EnvirMentPara.uiPartMmatter03 =  ( RX2_DEAL_Buffer[16] << 8 ) +RX2_DEAL_Buffer[17] ;
        EnvirMentPara.uiPartMmatter05 =  ( RX2_DEAL_Buffer[18] << 8 ) +RX2_DEAL_Buffer[19] ;
        EnvirMentPara.uiPartMmatter10 =  ( RX2_DEAL_Buffer[20] << 8 ) +RX2_DEAL_Buffer[21] ;
        EnvirMentPara.iTemperature =  ( RX2_DEAL_Buffer[24] << 8 ) +RX2_DEAL_Buffer[25] ;
        EnvirMentPara.iHumidness =  ( RX2_DEAL_Buffer[26] << 8 ) +RX2_DEAL_Buffer[27] ;        
    }
    memset(RX2_DEAL_Buffer,0,32);
}

3.3 消息队列中添加串口2处理任务:

        mspoint ++;
        if(mspoint>=MES_MAX)    mspoint = 0;    //消息循环查讯
        if(ArrayMessage[mspoint].Mnumber !=0)
        {
            switch(ArrayMessage[mspoint].Mnumber)
            {
                case MW_TIMERINT:
                                     System_Tim_Driver(ArrayMessage[mspoint].iWParm);
                break;                                                                
                case MW_USARTMESSAGE:
                                     DealData(ArrayMessage[mspoint].iWParm);
                break;                                                                
                 case MW_USARTMESSAGE2:
                                     DealUsart2Data(ArrayMessage[mspoint].iWParm);
                break;                                                                                                                
                default:
                break;
            }
            DeleteMessage(mspoint);  //删除已经处理的消息
        }

3.4 屏幕刷新显示代码:

void main_test(void)
{
        static u16 buf[20] = {0};
        static u16 i ;        
        DrawTestPage("eepw 论坛屏测试程序");
        Gui_StrCenter(0,30,RED,BLUE,"keyboard",16,1);//居中显示
//        Gui_StrCenter(0,120,BLUE,BLUE,"www.EEPW.com",16,1);//居中显示        
        sprintf((char *)buf,"%4.1f",(float)i/10.0);
        Show_Str(0,150,BLUE,YELLOW,&buf,16,1);
        
        Gui_StrCenter(0,100,BLUE,BLUE,"Temp:",16,1);        
        sprintf((char *)buf,"%4.1f℃",(float)EnvirMentPara.iTemperature/10.0);
        Show_Str(180,100,BLUE,YELLOW,&buf,16,1);        
        
        Gui_StrCenter(0,120,BLUE,BLUE,"Humi:",16,1);        
        sprintf((char *)buf,"%4.1f℃",(float)EnvirMentPara.iHumidness/10.0);
        Show_Str(180,120,BLUE,YELLOW,&buf,16,1);        
        
        i++;                
}

四:实物图片如下所示:

05-4 实物测试.png




关键词: AIcubeV1.01L     环境监测    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]