基于树莓派的空气监测系统(3)PM2.5模块程序

基于树莓派的空气监测系统(3)PM2.5模块程序

PM2.5模块(SHARP 灰尘传感器GP2Y1051AU0F)

灰尘传感器的主要参数
  • 光学原理,能够探测1微米以上的粉尘粒子;
  • 5VDC供电;
  • 串口通信(5V);

原理:微粒和分子在光的照射下会产生光的散射现象,和此同时,还吸收部分照射光的能量。当一束平行单色光入射到被测颗粒场时,会受到颗粒周围散射和吸收的影响,光强将被衰减。如此一来便可求得入射光通过待测浓度场的相对衰减率。而相对衰减率的大小基本上能线性反应待测场灰尘的相对浓度。光强的大小和经光电转换的电信号强弱成正比,通过测得电信号就可以求得相对衰减率。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

树莓派3B串口设置

树莓派串口说明

树莓派从大的方向来说一共出了3代,每一代的CPU外设基本相同,但内核不同,外设里面一共包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0)。

硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠,mini串口性能低,功能也简单,并且没有波特率专用的时钟源而是由CPU内核时钟提供,因此mini串口有个致命的弱点是:波特率受到内核时钟的影响。

对于树莓派3 B+ 来说,它的uart 功能有三种: 1、内部蓝牙使用 2、控制终端使用 3、与其他设备进行串口通信;

树莓派 3 只提供一个硬件 uart,对应硬件接口 GPIO14-Tx/GPIO15-Rx。硬件串口被默认分配给与蓝牙模块通信了,而把那个mini串口默认分配给了排针引出的GPIO Tx Rx。

这里写图片描述

树莓派3串口默认映射对换

1.查看/boot/overlays/目录下是否有pi3-miniuart-bt-overlay.dtb(或者pi3-miniuart-bt.dtbo)文件。

这个文件的功能是将树莓派3的蓝牙切换到mini串口(ttyS0),并且恢复硬件串口(ttyAMA0)到GPIO 14&15脚中。并且给出了载入的方法。

2.编辑/boot目录下的config.txt文件

sudo vim /boot/config.txt
dtoverlay=pi3-miniuart-bt-overlay

保存文件,重启树莓派使之生效。

  • 默认映射

这里写图片描述

  • 修改后的映射

这里写图片描述

禁用串口的控制台功能

编辑/boot目录下的cmdline.txt文件,把console=serial0,115200删掉console=serial0,115200。

串口程序

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>

//串口初始化
void init_tty(int fd)
{
        struct termios newtio;
        struct termios oldtio;
        bzero(&newtio,sizeof(struct termios));

        tcgetattr(fd,&oldtio);
        newtio.c_cflag |= CLOCAL | CREAD;
        cfsetispeed(&newtio,B2400);
        cfsetospeed(&newtio,B2400);
        printf("c_cflag=%x\n",newtio.c_cflag);
        newtio.c_cflag &= ~CSIZE;
        printf("c_cflag=%x\n",newtio.c_cflag);
        newtio.c_cflag |= CS8;
        printf("c_cflag=%x\n",newtio.c_cflag);
        newtio.c_cflag &= ~PARENB;
        newtio.c_iflag &= ~INPCK;
        newtio.c_cflag &= ~CSTOPB;
        newtio.c_cc[VTIME] = 0;
        newtio.c_cc[VMIN] = 0;
        //设置原始模式
        newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
        newtio.c_oflag &= ~OPOST; /*Output*/
        //设置终端模式
        //newtio.c_lflag |= (ICANON | ECHO | ECHOE | ISIG); /*Input*/
        //newtio.c_oflag |= OPOST; /*Output*/
        tcflush(fd,TCIOFLUSH);
        tcsetattr(fd,TCSANOW,&newtio);
}

//PM2.5模块数据处理
int da_pro(char* da_buf)
{
        unsigned char crr;
        double vout;
        int ud,i;
        if(da_buf==NULL)
                return -1;
        for(i=0;i<10;i++){
                if(da_buf[i]==0xAA)
                        break;
        }
       if(da_buf[i+0] != 0xAA || da_buf[i+6]!= 0xFF)
                return -1;
        crr = da_buf[i+1] + da_buf[i+2] + da_buf[i+3] + da_buf[i+4];
        if(da_buf[i+5] != crr)
                return -1;
        vout = (da_buf[i+1]*256+da_buf[i+2])/1024.0*8.0;
        ud = 800 * vout;
        return ud;
}


int main()
{
        int i;
        int fd = -1;
        int ret = -1;
        int pm;
        char buf[16];
        fd = open("/dev/ttyAMA0",O_RDWR);
        if(fd < 0){
                printf("没有串口设备/dev/ttyAMA0\n");
                exit(1);
        }

        printf("fd=%d\n",fd);
        init_tty(fd);

        while(1){
                bzero(buf,16);
                if(read(fd,buf,15)>0){
                        for(i=0;i<15;i++){
//                              printf(" %X ",buf[i]);
                        }
                        pm = 0;
                        pm=da_pro(buf);
                        if(pm==-1)
                                printf("recv data err...\n");
                        else
                                printf("PM2.5 = %d\n",pm);
                }
                usleep(300*1000);
        }
        close(fd);
}
### 回答1: LSTM是一种长短期记忆神经网络,可以用于时间序列预测。PM2.5是衡量空气污染水平的指标之一。LSTM预测PM2.5可以通过以下步骤实现: 1.数据准备:收集历史PM2.5数据和相关气象条件,如温度,湿度等,选用适当的特征进行预测。同时,需要对数据进行清洗和归一化。 2.建立LSTM模型:基于历史数据建立LSTM模型,通常采用类似于时序模型的方法,以时间步为单位输入数据,设置合适的网络层数和节点数,进行训练和验证。 3.预测和评估:使用训练好的模型对新的PM2.5数据进行预测,并与实际数据进行比对,计算预测误差和准确率等评估指标。 LSTM预测PM2.5具有一定的局限性,如模型泛化能力较差,对序列中的长期依赖性有一定限制。因此,需要结合实际应用情况和数据特点,选择适当的算法进行优化和改进,以提高预测精度和可靠性。 ### 回答2: 随着城市化的加速,空气污染愈发严重,其中PM2.5成为危害人体健康的重要污染物。为了更好地预测和控制PM2.5的浓度,人工智能技术被广泛应用。其中,LSTM(Long Short-Term Memory)是一种能够对序列数据进行处理的循环神经网络模型,被广泛应用于时间序列预测领域。下面将从数据预处理、模型构建和实验结果三个方面简要讲解LSTM预测PM2.5的方法。 首先,数据预处理阶段非常重要。PM2.5数据通常具有周期性和随机性,因此需要通过数据平滑和差分等方法来处理数据。同时,还需要对数据进行归一化处理,将其缩放到0到1之间。 其次,模型构建阶段是实现LSTM预测PM2.5的关键步骤。在构建模型时,需要确定LSTM模型中神经网络的参数,并进行特征选择,确定哪些特征对PM2.5预测更为重要。同时,可以通过加入额外的特征,例如气象数据和人口密度等,来进一步提高预测精度。 最后,进行实验并对预测结果进行评估。实验中需要将数据集分为训练集、验证集和测试集,并对模型进行训练、超参数调整和模型评估。评估方法可以采用均方根误差(RMSE)或平均绝对误差(MAE)等统计方法来衡量预测结果的准确性。 总之,LSTM预测PM2.5是一项较为复杂的任务,需要进行细致的数据预处理、特征选择和模型构建。在未来,相信这一方法将在城市空气污染治理中发挥重要作用。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值