城 市 雾 霾 天 气 监 测 系 统 设 计

2019-11-26 07:29
实验室研究与探索 2019年10期
关键词:开发板内核温湿度

王 小 辉

(1.西安邮电大学 人文与外国语学院,西安 710121; 2.陕西师范大学 地理科学与旅游学院,西安 710119)

0 引 言

随着当今社会的高速发展,环境保护已成为本世纪内人类必须面对的重大问题[1-2]。在过去的雾霾检测中,大多数都是通过人为携带大型设备去采集环境的数据,虽然技术简单,但设备精度不够高,难以实时检测[3]。随着科技不断发展,嵌入式系统与ARM处理器的结合可以完成大多数数据采集与传输。

本文基于ARM处理器与Linux操作系统的城市雾霾天气监测系统具有很好的应用价值[4-6],可以广泛应用于商场、医院、电影院等人流密集区域。

1 嵌入式系统架构

1.1 环境监测系统结构

实验系统基于ARM11微处理器S3C6410芯片,连接所需传感器与WiFi接口。使之搭载嵌入式Linux系统,通过交叉编译添加需要的传感器驱动程序,并且生成相对应的Linux内核[7],最后将内核导入Tiny6410中。利用传感器采集周围环境的数据,通过Socket网络通信完成数据传输[8-10]。整体系统示意图如图1所示。

图1 环境监测系统

1.2 开发系统

系统采用HU-10S作为温湿度传感器,采用GP2Y10 10AU0F作为PM2.5传感器,HU-10S通过I/O口进行数据传输,PM2.5传感器经过GPIO口与I/O口完成数据传输[11],如图2所示。

图2 系统硬件结构图

采用嵌入式Linux系统为基础平台,根据设计的需求对Linux系统的U-boot、Linux内核、文件系统进行适当的加减与定制,方便了对系统的开发。增加了对wireless USB WiFi驱动、温湿度传感器与PM2.5传感器驱动,将写好的编译内核模块通过交叉编译的方式增加到Linux内核中去,同时减少设计所用不到的驱动,完成系统的最小化。通过Socket网络通信技术与读取传感器接收到数据,编写程序完成对系统内数据的调出,实现了对监测环境的信息采集与传输[12]。

实验设计利用HU-10S作为温湿度传感器并采用型号为GP2Y1010AU0F的传感器采集PM2.5的数据。HU-10S温湿度模块通过传感器接收到的非线性电阻信号由芯片LM2902转换为电压形式的电信号。GP2Y1010AU0F是由SHARP公司所研发的一个通过感器内部所组成的相对分布的红外发光二级管和光电结晶管的光学灰尘浓度检测传感器,其原理是利用光敏电阻的光敏特性检测微小颗粒物的数量,从而根据输出电压的大小来判断颗粒浓度[13-14]。

2 嵌入式Linux系统的调试与移植

Linux系统主要由U-Boot、Linux内核、文件系统和用户程序组成[15]。其中系统内置的U-Boot代码与Bootloader程序用于引导系统启动,Linux内核需要根据实际需求定制好相应的代码,文件系统主要包含文件系统与其他的系统命令,此处使用rootfs_qtopia_qt4.img作为rootfs。应用程序包括必须的驱动程序与交互界面等,即为Qtopia2.2的系统桌面。

2.1 嵌入式开发环境的搭建

主机安装的Linux版本是Ubuntu14.0(64bit),安装并设置完后开启虚拟机,即可开始使用Linux系统,并且之后进行编译前的配置。

(1) 建立交叉编译环境。在嵌入式开发过程中,为了将一些复杂无法编译的程序在内存有限的目标机中运行,必须通过资源丰富的主机编译生成可执行文件,编译完成后通过宿主机与开发板的连接,将所写程序的.c文件移植到开发板中运行,从而完成目标机中程序的正常运行。

本文使用的是arm-linux-gcc-4.5.1,通过更改交叉编译版本以及配置文件可以成功建立交叉编译。

(2) U_Boot。U-Boot(Universal Boot Loader)具有GPL款项的开放源码项目[16]。系统引导是U-Boot的主要作用。大多数U-Boot源代码是根据Linux内核源代码经过精简和演变而形成。U-Boot的工作流程主要由Stage 1和Stage 2组成,具体流程如图3所示。

图3 U-Boot工作流程

使用CPU系统结构的部分大多在Stage 1通过汇编语言来完成,Stage 2用C语言完成,具有较好的可读性和移植性。U-Boot启动中的第1步是定义入口,由于起始点必须是唯一,故定义起始点在0x0处;第2步是设置异常向量,并调整处理器的实时时钟、控制中断等寄存器,并且调整内存控制寄存器的参数;第3步是将ROM跳转到RAM中并且继续运行。然后转入U-Boot的Stage 2。

2.2 嵌入式Linux内核的移植

(1) 配置和编译busybox。实际开发中,各开发板资源不同,因此,busybox源代码应根据所需重新配置,然后使用缺省的配置文件:peizhi.config。Tiny6410使用此配置文件编译出的busybox可满足多方面的要求。进入busybox源代码目录,输入命令#cp peizhi.config .config拷贝此文件到相应文件夹,然后输入make进行编译。编译完成后生成busybox文件。它和开发板有同样的安装放法,并且busybox一般是不用更新的。

(2) 制作yaffs2文件系统映像。进入Linux系统目录后执行命令:#mkyaffs2image-128 MB rootfs_qtopia_qt4 rootfs_qtopia_qt4.img,将rootfs_qtopia _qt4目录压制为yaffs2格式的rootfs_qtopia_qt4.img系统映像文件,它适用于块页组织结构为“1 Page=2 Kbyte,1 Block=128 K”的SLC Nand Flash(如K9F2G08,K9K8G08等),下一步通过SD卡或者 USB下载可以把它烧写到Nand Flash中。

(3) 移植嵌入式Linux系统。基于SD卡中的ini索引文件,修改安装Linux系统所需的主要定义语句,配置部分如表1所示。表中,LCD共用同一个zImage,此系统所用的Superboot 会自动检测 LCD 型号,Kernel源码:arch/arm/mach-s3c64xx/mini6410-lcds.c会在 Command Line 中追加LED型号参数。拨动Tiny6410的“S2”开关为“SDBOOT”,并插入SD卡,伴随着有序的“滴”声音,Tiny6410开发板上的4盏绿灯开始闪烁,最后蜂鸣器响2声,LED全部亮起,系统已经完成了烧写。执行完毕后。重启开发板就是Qtopia2.2.0系统了,如图4所示。Qtopia是基于Qt开发的一个软件平台,主要用于嵌入式Linux系统或移动电话,Qtopia具有完善的窗口操作系统、游戏和多媒体等辅助应用,可以缩短软件的开发周期。

图4 Qtopia2.2.0系统

3 系统软件架构设计

3.1 Linux设备驱动

在Linux系统中,传感器大多数被认为是一种特别的外置装置,Linux系统通过系统的读取来进行驱动和控制各种传感器。而在嵌入式Linux系统中,传感器的操控是通过将相应的硬件驱动加入相应位置得以实现的,之后硬件传感器就使用打开,读写等程序函数代码对硬件设备进行配置与命令,这样就可以通过嵌入式Linux直接对设备进行访问。其中,硬件设备具体功能有初始化设备、启动或者停止设备、将硬件设备上的数据发送到用户程序上,并且将用户程序的指令发送到硬件设备里,实现数据互通。

3.2 温湿度传感器的程序设计

温湿度传感器的程序设计主要分为两个阶段,① 在内核里面运行,叫做内核驱动程序;② 在用户程序里运行。这两部分通过用户程序里的文件操作函数完成数据的传输,具体的工作流程如图5所示。

图5 湿度测量的过程

首先启动传感器读取相关引脚信息,根据时序控制经过ADC采样的方法完成采集信息的读取。在用户程序中,写好了传感器测量程序,其中就包括了ADC采样与温度,湿度对应的函数值,此时可以输出相应的温湿度数据。

3.3 PM2.5传感器的程序设计

PM2.5传感器使用的是ADC信号的输出方法。本文使用的Tiny6410开发板提供了一路GPIO口和一路I/O口,如果要收集检测的数值,则必须通过GPIO向传感器发送脉冲,通过发送1次脉冲,ADC即可采样到1次数据,这样就得到了此刻周围环境PM2.5的浓度。具体流程见图6。

图6 PM2.5传感器工作流程

在上述流程中,驱动部分首先将ADC通道的对应引脚设置为输入,之后将GPIO的数值拉低,随后开始ADC转换,转换完成后,将采样的数据发送至用户程序,最后拉高GPIO值,完成一次测量。而用户程序收到了采样数据之后,经过计算输出相应的数值。

3.4 用户程序的设计与实现

实验用户程序的设计主要用以实现Socket网络数据传输的功能,在嵌入式Linux中,Socket网络通信是用户访问系统的主要途径。通过编写网络连接与数据交换的函数,实现了应用程序对传感器的读取,具体流程见图7。

图7 用户程序的Socket通信

首先创建一个Server,并设置好待连接的端口。由PC机向目标发起连接,如果Server发现连接信号,则接受连接请求,完成Socket的网络连接。 然后打开设备文件,在/dev/gpio读取ADC的采样数据,通过收发文件函数完成连接。之后通过html的格式发送到客户端。通信完成后,等待停止指令结束循环。

4 实测结果与分析

本文设计了一套基于Tiny6410开发板的环境检测系统,实物如图8所示,通过使用温度计、湿度计以及天气预报进行数据对比,从而验证本系统的设计精度。

为了验证测试效果,实验选定学校操场、地铁口、医院、工厂以及室外为5个待测地点进行实际测试,测试结果如图9所示。图中:左边是手机收到的实时气象信息,右边是系统实际测试的结果。在户外和大学操场上人流量较少实测数据偏低;在地铁口、医院人流密集的地方PM2.5的数据超过当天预报值,在厂房由于工厂的废气排放超标,也可以导致该区域颗粒物数量陡增。由此可见,本系统的对PM2.5的测试数据较为稳定,可以作为实际测试的数据来源。

通过以上多个地点的不同实验,基于Tiny6410的城市雾霾检测系统与实际的环境数据很接近,可以作为实际测试的相关需求。

5 结 语

将HU-10S和GP2Y1010AU0F传感器根据其电气特性及传输方法与Tiny6410开发板连接起来。通过嵌入式Linux系统的配置并且将配置好的内核进行移植。根据Tiny6410开发板和传感器特性,以Socket网络通信为基础加入读取传感器采集的数据,可以完成本文的预定目标。通过实际测量可见,本文设计的城市雾霾检测系统运行良好,实际测出的温湿度以及PM2.5浓度与气象预报相差不多,可以更好地满足人们对环境参数实时测试的更高的需求。

猜你喜欢
开发板内核温湿度
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
基于AT89C51的数字型蚕用温湿度计的设计
基于STM32H7的FDCAN通信系统设计与实现∗
基于DSP的多路温湿度监测系统
Linux内核mmap保护机制研究
基于温湿度控制的天气预测装置
基于DSP和μcos的温湿度检测系统的设计
浅析单片机开发板的设计与制作