大气质量数据监测站用于测试空气质量监测及数据采集,实现野外或者室内空气质量的检测。

1、项目概述

本项目是一个定制项目,要求采集大气的压力、温度、湿度、PM25、位置等数据并上传到指定的后台服务器。但有时候因为没有条件或因为各种原因不能联网,则采用本地保存的方式,本地保存我们决定使用SD卡来实现。除此外,为了实现显式需求,还需要配套一些东西来实现饮食的需求,如实时时钟记录,上传联网方式的选择等。

2、硬件设计

本项目涉及到的硬件并不复杂,我们对其中几个实用比较多的电路做一个说明。首先说一下串口通讯电路,在本项目中激光PM25传感器、气体质量流量控制器、SD读卡器等都是使用串口来实现通讯,所以我们采用如下的串口电路设计:

该方式即可支持RS232,也可实现RS485,当然简单的TTL也没问题,只需要根据自己的不同需求焊接不同的元器件就可实现。

接下来我们说一说PWM控制电路,其实用的是计时器来实现,由于点击需要12V-24V的电源,所以我们外加一部分电路来实现电机的驱动,而PWM信号则有MCU产生,并能够通过电路提升电压。

最后我们说一下联网部分,联网有多种方式,有线连接、wifi连接都支持,首先说一说wifi,我们使用了ESP8266来实现这一需求,之所以选择ESP8266是因为软硬件实现都比较简单,而且我们对通讯的要求并不十分高,因为10m秒钟记录一个数据就好了,所以成本就是主要理由了。

至于有线我们使用W5500来实现,在以前的文章中已经多次说明过,这一次就不再重复了。

3、软件设计

接下来我们说一说软件的设计,软件的设计较硬件要繁杂的多,我们选取其中一部分前面没有说明过的做一些说明。首先我们说一下PWM控制,每台采集站有2路进气,所以我们需要控制两个气泵,以及2路的PWM,每路可以单独控制,在试验时我们使用50%的占空比。

void PWM_Configuration(void)
{
//计算初始化的频率和占空比
TimerPeriod = PWMTimePeriod;//计算用于设置ARR寄存器的值使产生信号的频率为17.57 Khz PWM1Pulse = (uint16_t) (((uint32_t) * (TimerPeriod - )) / );//计算CCR1寄存器的值在通道1和1N产生50%占空比,用于TIM1 PWM2Pulse = (uint16_t) (((uint32_t) * (TimerPeriod - )) / );//计算CCR1寄存器的值在通道1和1N产生50%占空比,用于TIM8 PWM_InitProcess(TIM1,TimerPeriod,PWM1Pulse);
}

其次我们说以说I2C控制,有好几路传感器都使用的是I2C数据通讯来实现,我们在这里我们只说两个基本的I2C操作函数,一个是下发命令,一个是读取数据。所有的操作都刻以通过调用这两个函数来实现。

/*向I2C从站下发指令,指令格式均为1个字节*/
void SendCommandToI2CSlave(I2C_TypeDef* I2Cx,uint8_t deviceAddress,uint8_t command)
{
uint16_t i2cTimeout=TimeoutPeriod; /*产生I2C起始信号*/
I2C_GenerateSTART(I2C2, ENABLE); /*检测 EV5 事件并清除标志*/
while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT))
{
if ((i2cTimeout--) == ) return ;
} /*发送I2C从站的地址*/
I2C_Send7bitAddress(I2Cx,deviceAddress,I2C_Direction_Transmitter); i2cTimeout=TimeoutPeriod; /*检测 EV6 事件并清除标志*/
while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
{
if ((i2cTimeout--) == ) return ;
} /*下发操作命令*/
I2C_SendData(I2Cx, command);
i2cTimeout=TimeoutPeriod; /*检测 EV8 事件并清除标志*/
while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
{ if ((i2cTimeout--) == ) return ; } /* 产生I2C停止信号 */
I2C_GenerateSTOP(I2Cx, ENABLE);
} /*从I2C从站读取多个字节数据的值*/
void GetBytesFromI2CSlave(I2C_TypeDef* I2Cx,uint8_t deviceAddress,uint8_t *pData,uint16_t bytesNum)
{
uint16_t i2cTimeout=TimeoutPeriod;
/*如果I2C总线忙,则等待一段时间*/
while (I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY))
{
if ((i2cTimeout--) == ) return ;
} /* 产生 I2C 起始信号 */
I2C_GenerateSTART(I2Cx, ENABLE); /*检测 EV5 事件并清除标志*/
while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT))
{
if ((i2cTimeout--) == ) return ;
} /*发送I2C从站的地址*/
I2C_Send7bitAddress(I2Cx,deviceAddress+,I2C_Direction_Receiver);
i2cTimeout=TimeoutPeriod; /*检测 EV6 事件并清除标志*/
while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
{ if ((i2cTimeout--) == ) return ; } while(bytesNum)
{
if(bytesNum==)
{
I2C_AcknowledgeConfig(I2Cx, DISABLE);//关闭应答
I2C_GenerateSTOP(I2Cx, ENABLE);//停止信号
}
i2cTimeout=TimeoutPeriod;
/*检测 EV7 事件并清除标志*/
while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_RECEIVED))
{ if ((i2cTimeout--) == ) return ; } /*通过 I2C,从设备中读取一个字节的数据 */
*pData=I2C_ReceiveData(I2Cx); pData++; bytesNum--;
} /*使能应答,方便下一次 I2C 传输*/
I2C_AcknowledgeConfig(I2Cx, ENABLE);
}

接下来我们看看将数据存储到本地SD卡的操作过程,数据保留2位小数,并且采用4舍5入处理。

//将数据写入到SD卡
void WriteDataToSDCard(void)
{
//将数据写入SD卡
saveData[]=((int16_t)(tempProcessValue*+0.5))/100.0;//温度测量值
saveData[]=((int16_t)(presProcessValue*+0.5))/100.0;//压力测量值
saveData[]=((int16_t)(flowProcessValue1*+0.5))/100.0;//流量计1的标况流量
saveData[]=flowTatolVolume1;//流量计1的工况累计流量
saveData[]=flowStdTatolVolume1;//流量计1的标况累计流量
saveData[]=((int16_t)(flowProcessValue2*+0.5))/100.0;//流量计2的标况流量
saveData[]=flowTatolVolume2;//流量计2的工况累计流量
saveData[]=flowStdTatolVolume2;//流量计2的标况累计流量 saveDate[]=systemYear;
saveDate[]=systemMonth;
saveDate[]=systemDate;
saveDate[]=systemHour;
saveDate[]=systemMinute;
saveDate[]=systemSecond; SDCardFileOperation();
}

4、结果展示

我们在OneNET上创建了一个产品,6台设备,以及4个应用,来验证方案的效果,在测试过程中我们使用了Wifi方式来进行此次测试,因为这也是我们正是产品主要使用的连网方式。我们看一看数据上传的趋势图:

接下来我们看看显示位置及温湿度的应用截图:

我们再来看看显示大气压、温度和湿度的截图:

我们再来看看气体流量及柱状图显示:

至此,我们的测试项目完成,再次感谢电子发烧友和中国移动OneNET给我们带来的完美体验。

OneNET麒麟座应用开发之十:空气质量数据监测站项目总结的更多相关文章

  1. OneNET麒麟座应用开发之二:串口读取PM25传感器数据

    作为环境数据监测站首先要获取大气中可吸入颗粒物的数据.为了检测PM25数据,我们采用北京海联信为的HLPM025K3型号传感器,该传感器使用激光法测量PM25和PM10的数据. 该型传感器的检测对象如 ...

  2. OneNET麒麟座应用开发之九:与SD卡通讯并保存数据

    由于需要记录的数据量比较大,而且有些时候,有的用户不方便实时上传数据,所以要求使用SD卡存储数据然后人工收取上传.为此我们选择了一种通用的SD卡读写器. 1.读卡器简介 该读卡器整合 SD 卡规范和 ...

  3. 天气类API调用的代码示例合集:全国天气预报、实时空气质量数据查询、PM2.5空气质量指数等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 全国天气预报:数据来自国家气象局,可根据地名.经纬度GPS.IP查 ...

  4. OneNET麒麟座应用开发之三:获取温湿度数据

    对于大气环境监测来说温湿度也是重要的指标.原本计划使用SHT15来采集温湿度数据,不过在OneNET麒麟开发板上,我们发现已经集成有SHT20温湿度传感器,于是我们就使用它了.如下图的红框处: 我们还 ...

  5. 安卓开发之Room实体定义数据

    使用Room实体定义数据 在Room库中,entities(实体)代表着相关字段集.每一个entity(实体)代表着相关联数据库中的一个表.entity 类必须通过Database 类中的entiti ...

  6. Android开发之对ListView的数据进行排序

    这里涉及到对ListView的数据进行排序,以及ListView的数据如何清空处理.排序的方法相同,但是里面的数据集合有些区别:一种是利用pojo类取得数据:另一种是利用map来取得数据. 第一种:利 ...

  7. 【iOS开发之Objective-C】书签管理器项目

    1.项目 新建一个书签管理器的项目,能够存储书签的网址.中文名.星级.訪问量和权限信息.具有增.删.改.查和排序的功能. 2.找对象,抽象类 书签管理器,书签管理器.书签管理器--  多读几次书是不是 ...

  8. 基于flask的城市空气质量分析系统

    1.1  系统功能 在对主要需求进行分析后,确定系统由以下几个模块组成. 1) 用户信息管理: 该部分主要完成系统管理员的增加.删除.编辑和访问控制权限等操作. 2) 数据管理: 该部分主要完成后台存 ...

  9. OneNET麒麟座应用开发之六:与气体质量流量控制器通讯

    气体质量流量控制器,简称MFC,通常用于在各种检测中,计量气体的流量.在我们的大气环境数据采集站中,要让气流保持稳定,这样才能准确的获取PM25的数据. 我们采用的气体质量流量控制器具备串口通讯功能, ...

随机推荐

  1. maven项目检出后报错(包括编译报错和运行报错)的常见检查处理方式

    maven项目检出后报错(包括编译报错和运行报错)的常见检查处理方式: 1.更改项目的jdk为我们安装的jdk2.更改build配置里的 output folder 目录为 xxx项目名/target ...

  2. hdu 1097 A hard puzzle 快速幂取模

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1097 分析:简单题,快速幂取模, 由于只要求输出最后一位,所以开始就可以直接mod10. /*A ha ...

  3. 引入springboot的两种方式以及springboot容器的引入

    一.在项目中引入springboot有两种方式: 1.引入spring-boot-starter-parent 要覆盖parent自带的jar的版本号有两种方式: (1)在pom中重新引入这个jar, ...

  4. logistic regression浅析

    最近开始学习机器学习的相关理论知识,准备把自己的整个学习心得整理汇集成博客,一来可以督促自己,二来可以整理思路,对问题有一个更加透彻的理解,三来也可以放在网上和大家分享讨论,促进交流. 由于这次的学习 ...

  5. 20190311 Java处理JSON的常用类库

    1. Gson 1.1. 背景 谷歌 1.2. 简单使用 Gson gson = new Gson(); System.out.println(gson.toJson(1)); // ==> 1 ...

  6. HTTP协议和SOCKS5协议

    HTTP协议和SOCKS5协议 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们平时上网的时候基本上是离不开浏览器的,尤其是搜索资料的时候,那么这个浏览器是如何工作的呢?用的又是 ...

  7. HDU - 3478 Catch(判奇环/二分图)

    http://acm.hdu.edu.cn/showproblem.php?pid=3478 题意 给一个无向图和小偷的起点,小偷每秒可以向相邻的点出发,问有没有一个时间点小偷可能出现在任何点. 分析 ...

  8. ext中grid根据数据不同显示不同样式

    核心代码: var clsRender = function(value){ if (value == 'male') { return "<span style='color:red ...

  9. 使用Eclipse Memory Analyzer 进行JAVA内存泄露分析

    一,安装 Eclipse Memory Analyzer 在Memory Analyzer的官网找到 update site的地址:

  10. npm webpack工具 (监听压缩等)

    压缩.监听变动自动打包,:开发后,js编译压缩及样式去空格等 $ webpack --config XXX.js //url使用另一份配置文件(比如webpack.config2.js)来打包 $ w ...