摘 要: 针对实时环境状况监测,设计了一种基于Arduino的环境状况监测系统。该系统以Arduino UNO和各类传感器为核心,设计并编写了Arduino UNO程序,实现实时、便捷地监测周围环境的温度、湿度、光照及噪音变化情况,并采集传感器数据上传到监测平台。实践表明,该设计能够经济、高效地实现数据采集,可用于实时环境状况的快速监测。
0 引言
近两年,工业化进程的日益发展导致环境污染问题日益突出,随着环境状况的不断恶化,各地雾霾天气日益严重,已经影响到了人们的正常出行、生活以及健康,因此人们掌握了解自身所处周边环境状况信息的需求越来越迫切。伴随着当前移动互联网技术的飞速发展, 3 G、WiFi、GPRS等无线通信方式的实现和广泛应用,都为实时环境状况监测提供了条件,人们可以随时随地了解自己所处的环境状况信息,为出行和生活提供便捷服务,为寻求更加健康的环境提供依据。本文主要研究利用现有的成熟传感技术和互联网技术实现实时获取环境状况信息,这种实现方法简单快速,成本低廉,具有很高的实用性。
Arduino是近年来快速流行起来的一种控制器,它是一个硬件平台,使用的核心是一个AVR芯片,整块控制板类似于单片机开发板,但是在功能上强大了很多。本文基于Arduino平台设计一个环境监测系统,用来检测一天中温度、湿度、光照以及噪音变化情况,并将数据写入SD卡中进行分析,具有很高的实用性。
1 Arduino UNO主控板及传感器
Arduino是一款便捷灵活、方便开发者使用和上手的开源电子原型平台,包含各种型号的Arduino板及扩展板硬件资源和Arduino IDE软件资源。Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是当前硬件开发的趋势。
本设计主要采用Arduino UNO主控板、DHT11温湿度传感器模块、光照强度传感器以及声音传感器,外接SD卡进行数据存储。
1.1 Arduino UNO主控板及扩展板
Arduino由一个基于Atmel AVR单片机的开放源码的硬件平台和一套专门的开发环境组成。Arduino UNO[1]是目前使用最广泛的Arduino控制器,具有Arduino的所有基本功能。UNO的处理器核心是ATmega328,它包括14路数字输入/输出接口(其中6路可作为PWM输出,6路模拟输入),一个16 MHz晶体振荡器,一个USB接口,一个电源插座,一个ICSP接口和一个复位按钮,其结构和引脚电路如图1所示[2]。在掌握了Arduino UNO开发技术以后,就可以将自己编写的代码轻松地移植到其他型号的控制器上,可以用来开发交互产品,比如可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理电子设备等。
1.2 DHT11温湿度监测模块
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它采用专用的数字模块采集技术和温湿度传感技术,确保该传感器模块具有极高的可靠性与卓越的长期稳定性能[3]。DHT11采用单总线方式与Arduino进行数据传输,单线制串行接口使系统集成变得简易快捷。该传感器体积超小、功耗极低,信号传输距离可达20 m以上,同时具有精度准确、读取灵敏等优点,使其成为各类应用甚至最为苛刻应用场合的最佳选择。DHT11数字温湿度传感器可以测出实时的环境温度和相对湿度,温度范围为0~50℃,温度的检测精度为1℃;它的相对湿度范围为20 %RH~90 %RH,检测精度为1 %RH,两次读取传感器数据的时间采样周期间隔不低于1 s[4]。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接,因此该产品具有品质卓越、响应超快、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准,校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。
1.3 光敏强度传感器
热敏模块用于温度检测,对所处环境的温度进行检测,采用NTC 10 k?赘热敏电阻,灵敏度好,当温度升高时,电阻值会随之降低,模拟值输出为0~1 023,结合Arduino的传感器扩展板用模拟口便可以读取模拟值。
光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,又称为光电导探测器。当入射光强时电阻减小,入射光弱时电阻增大。光敏电阻器可用来对周围环境光的强度进行检测,结合Arduino控制器可实现光的测量,可通过3P传感器连接线与Arduino专用传感器扩展板结合使用。
1.4 声音传感器
模拟声音传感器声音模块对环境声音强度最敏感,一般用来检测周围环境的声音强度。该传感器在环境声音强度达不到设定阈值时输出高电平,当外界环境声音强度超过设定阈值时输出低电平;小板数字量输出可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境的声音;小板数字量输出可以直接驱动继电器模块,由此可以组成一个声控开关,可以使用它制作声控开关等。此传感器只能根据震动原理识别声音的有无,不能识别声音的大小或者特定频率的声音,其灵敏度可通过数字电位器调节。Arduino可以通过模拟输入接口对其输出信号进行采集。
2 硬件设计
温度、湿度、光照和声音传感器采集到的都是模拟信号,需要从模拟量转换到数字量,最终实现数字式输出。各个传感器与Arduino连接也非常方便,只需将其输出端接到Arduino相应的数字引脚;也可以采用Arduino传感器扩展板,将传感器的输出端直接连在扩展板上。硬件连接示意图如图2所示。
将DHT11温湿度模块的VCC、GND、DOUT引脚分别接至Arduino UNO控制板上的+5 V、GND、数字端口2,还需要在VCC与DOUT之间串联一个5 kΩ的上拉电阻。将光敏传感器的VCC、GND、DOUT引脚分别接至Arduino UNO控制板上的+5 V、GND、模拟引脚端口A0。将声音传感器VCC、GND、DOUT引脚分别接至Arduino UNO控制板上的+5 V、GND、模拟引脚端口A1。将SD卡模块VCC、GND引脚分别接至Arduino UNO控制板上的+5 V和GND,MISO、MOSI、SCLK、CS 4个引脚分别连接控制板上的10、11、12、13端口。
3 软件设计
3.1 Arduino IDE
Arduino IDE是一个专门用来编写Arduino程序的软件,将程序编写好后,就可以通过此软件上传程序到Arduino开发板中执行。AVR单片机中的程序是使用Arduino库写成的,Arduino的集成开发环境使用起来简单方便,简化了单片机工作的流程,对AVR库进行了二次编译封装,把端口都打包好了,寄存器、地址指针之类的基本不用管,大大降低了软件开发难度。
在计算机端安装好Arduino IDE软件开发环境后,使用USB线将Arduino UNO连接至计算机的USB端口为控制板供电,即可进行程序的编写、下载和调试[5]。
3.2 实现程序
Arduino实现主要程序代码如下:
#include<SD.h>
#include<dht11.h>
dht11 DHT11;
#define DHT11_PIN 2//DHT11引脚
#define LIGHT_PIN A0//光敏引脚
const int chipSelect=4;//SD卡CS选择引脚
void setup()
{
Serial.begin(9600);//初始化串口
pinMode(10,OUTPUT);
//将SS引脚设置为输出状态,UNO为10号引脚
Serial.println("Initializing SD card");//初始化SD卡
if(!SD.begin(chipSelect))
{
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
}
void loop()
{
Serial.println("Read data from DHT11");
DHT11.read(DHT11_PIN);//读取DHT11的数据
Serial.println("Read data from Light Sensor");
//读取光敏模块数据
int light=analogRead(LIGHT_PIN);
Serial.println("Open file and write data");
File dataFile=SD.open("datalog.txt",FILE_WRITE);
//打开文件并将DHT11检测到的数据写入文件
if(dataFile)
{
dataFile.print(DHT11.humidity);
dataFile.print(",");
dataFile.print(DHT11.temperature);
dataFile.print(",");
dataFile.println(light);
dataFile.close();
}
else
{
Serial.println("error opening datalog.txt");
}
Serial.println("Wait for next loop");//延时1 min
delay(60000);
}
3.3 数据导出并绘制图表分析
连接的SD卡记录到不同传感器的数据后,通过计算机打开SD卡,可以看到名为datalog.txt的文件,这就是数据记录器所采集到的数据环境。分析数据并绘制图表的方法很多,可以采用很多专业的软件完成。本设计只需要做一些简单的数据分析,因此在Excel中即可完成。
将SD卡中数据记录器记录的文本数据导入到Excel中,导入方法如下[6]:
(1)首先在EXCEL中选择“文件”→“打开”菜单项,会弹出打开文件窗口,在打开的窗口中将打开文件类型选择为“所有文件(*.*)”,然后打开需要导入的文件并打开;
(2)单击“打开”按钮后,会弹出文本导入向导,Excel会对文本进行分行处理和分列处理;
(3)被导入的文本按行和列分好后,选择其中的一列数据(即某一传感器的数据),根据数据选择生成相应形式的数据折线图,显示数据的变化情况。
4 结论
本设计利用DHT11温湿度传感器、光敏传感器、声音传感器组成了环境监测的基本因素,实现了对温湿度、环境光以及噪音的快捷实时检测,可以方便地掌握自己身处的环境情况。本设计具有价格低廉、轻便简洁、便于携带等特点,可适用于计算机机房、图书馆、储存粮仓、温室大棚测温、空调室温控制等对环境较为敏感和对温度控制要求较高的场所[7]。除此以外,本设计应用领域也比较广泛,包括暖通空调测试及检测设备、汽车、数据记录器、消费品、自动控制、气象站、家电湿度调节器、医疗除湿器等。在不久的将来,随着无线传感器技术ZigBee模块的日趋成熟,无线网络传感器被良好地应用于此设计中,实现网络中各个节点之间信息更加便捷地传输与通信,对环境状态的实时监测将更加方便、及时和有效[8]。
参考文献
[1] 蔡睿妍.Arduino的原理及应用[J].电子设计工程,2012,20(16):155-157.
[2] Arduino UNO管脚标注[EB/OL].[2011-10-28].http://my.oschina.net/jingshishengxu/blog/34134.
[3] 沈金鑫.Arduino与LabVIEW开发实战[M].北京:机械工业出版社,2014.
[4] 成都智能盒子科技有限公司.DHT 11数字温湿度传感器[EB/OL](2014-06-30).http://x.openjumper.com/dht11.2012.
[5] 陈吕洲.Arduino程序设计基础[M].北京:航空航天大学出版社,2014.
[6] 陈吕洲.Arduino程序设计基础[M].北京:航空航天大学出版社,2013.
[7] 袁本华,董铮.基于Arduino控制板的温室大棚测温系统设计[J].安徽农业科学,2012,40(8):5049-5050.
[8] 王立岩,杨世凤.基于ZigBee技术的温室环境检测系统设计[J].天津科技大学学报,2011,26(1),60-63.