南京邮电大学自动化学院实验报告实验名称:无线环境参数测量系统课程名称:智能仪器设计基础所在专业:测控技术与仪器学生姓名:林若愚班级学号: B12050518任课教师:徐国政2014 /2015 学年第二学期实验地点:教5-214 实验学时:8目录摘要: (2)一、实验目的 (2)二、实验内容 (2)三、实验设备 (2)四、实验硬件介绍 (3)1. STC89C52RC (3)2. STC15W4K32S4 (3)3. NRF2401 (4)4. LCD12864 (5)5. AM2320 (5)6. SD2068 (5)7. BMP180 (6)8. MQ135 (6)五、系统实现介绍 (6)1.系统结构 (6)1.模块功能说明 (6)2.系统框图 (7)2. 电路图和实物图 (8)六、软件程序 (10)(1)软件功能说明+程序流程图 (10)(2)软件具体实现 (10)LCD12864.h文件内容 (10)LCD12864.c文件内容 (11)Main.c内容 (12)其他部分 (14)七、实验数据及结果分析 (15)八、总结及心得体会 (17)摘要:无线环境参数测量系统随着科技的发展,人们对自己的生活环境越来越在意,并且希望能直观的数字化参数化地衡量当前的环境质量。
本系统虽然用的是传统传感器,但是在和传感器相连的显示器上能显示的基础之上增加了远程发送设备,能实现在测量某一点的实时环境参数的同时,在半径几米之内的任意位置都能直接直观的查看到这些数据。
测量的参数包括温度湿度气压和空气质量,能让人们对生活环境的认识更加数字化。
且本系统节能省电,实现了可持续发展。
一、实验目的1.了解并能使用I2C总线进行传感器数据获取2.了解双机通信与无线通信3.使用labview图形化编程软件进行上位机界面设计二、实验内容1.使用STC15W4K32S4单片机驱动多种传感器完成多参数测量2.实现STC15W4K32S4与STC89C52RC之间的串口通信并使用LCD12864显示接受到的信息3.实现NRF24L01+进行信息无线收发4.实现用labview制作上位机用来显示测量到的信息三、实验设备1.STC15W4K32S4单片机1只2.STC89C52RC 单片机2只3.NRF24L01+ 2只4.LCD12864 1块5.计算机1台6.AM2320 1只7.BMP180 模块1个8.MQ-135模块1个9.SD2068时钟模块1个10.11.0592M晶振、杜邦线、排针、电阻、电容、LED灯若干四、实验硬件介绍1.STC89C52RCSTC89C52RC/RD+系列单片机具有成本低、性能高的特点,支持ISP(在系统编程)及IAP (在应用编程)技术。
使用ISP技术可不需要编程器,而直接在用户系统板上烧录用户程序,修改调试非常方便。
利用IAP技术能将内部部分专用Flash当作EEPROM使用,实现停电后保存数据的功能,擦写次数为100000次以上,可省去外接EEPROM(如93C46、24C02等)。
而且与传统8051单片机程序兼容,硬件无需改动。
2.STC15W4K32S4STC15W4K32S4系列单片机是STC生产的单时钟/机器周期(1T)的单片机,是宽电压高速高可靠低功耗超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051单片机,但速度快8-12倍。
内部集成高精度RC时钟,ISP编程时5MHz-30MHz宽范围可设置,可彻底省掉外部昂贵的晶振和外部复位电路。
8路10位PWM,8路高速10位A/D转换,内置4K字节大容量SRAM,4组独立的高速异步串行通信口,1组高速同步串行通信端口,针对多串行口通信/电机控制/强干扰场合,内置比较器功能更强大。
3.NRF2401NRF24L01是一款工作在2.4-2.5GHz世界通用ISM频段的单片收发芯片,无线收发器包括:频率发生器增强型 SchockBurstTM 模式控制器功率放大器晶体放大器调制器解调器输出功率频道选择和协议的设置可以通过SPI接口进行设置极低的电流消耗。
支持六路通道的数据接收。
1.低工作电压:1.9~3.6V低电压工作2.高速率:2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象(软件设置1Mbps或者2Mbps的空中传输速率)3.多频点:125频点,满足多点通信和跳频通信需要4.超小型:内置2.4GHz天线,体积小巧,15x29mm(包括天线)5.低功耗:当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了电流消耗。
6.低应用成本:NRF24L01集成了所有与RF协议相关的高速信号处理部分,比如:自动重发丢失数据包和自动产生应答信号等,NRF24L01的SPI接口可以利用单片机的硬件SPI口连接或用单片机I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口,便于使用低成本单片机。
7.便于开发:由于链路层完全集成在模块上,非常便于开发。
自动重发功能,自动检测和重发丢失的数据包,重发时间及重发次数可软件控制自动存储未收到应答信号的数据包自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程载波检测—固定频率检测内置硬件CRC检错和点对多点通信地址控制数据包传输错误计数器及载波检测功能可用于跳频设置可同时设置六路接收通道地址,可有选择性的打开接收通道标准插针Dip2.54MM 间距接口,便于嵌入式应用.4.LCD12864带中文字库的128X64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192 个16*16 点汉字,和128 个16*8 点ASCII 字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4 行16×16 点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
5.AM2320AM2320数字温湿度传感器是一款含有己校准数字信号输出的温湿度复合型传感器。
采用专用的温湿度采集技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电容式感湿元件和一个高精度集成测温元件,并与一个高性能微处理器相连接。
该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
AM2320 通信方式采用单总线、标准I2C两种通信方式。
标准单总线接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选择。
I2C通信方式采用标准的通信时序,用户可直接挂在I2C通信总线上,无需额外布线,使用简单。
两种通信方式都采用直接输出经温度补偿后的湿度、温度及校验CRC等数字信息,用户无需对数字输出进行二次计算,也无需要对湿度进行温度补偿,便可得到准确的温湿度信息。
两种通信方式可自由切换,用户可自由选择,使用方便,应该领域广泛。
产品为4引线,连接方便,特殊封装形式可根据用户需求而提供。
6.SD2068SD2068是一种具有标准IIC接口的实时时钟芯片,CPU可使用该接口通过5位地址寻址来读写片内32字节寄存器的数据(包括时间寄存器、报警寄存器、控制寄存器、通用SRAM 寄存器)。
SD2068内置单路定时/报警中断输出,报警中断时间最长可设至100年;内置时钟精度数字调整功能,可以在很宽的范围内校正时钟的偏差(-189ppm~+189ppm,分辨率3.05ppm),并通过外置的温度传感器可设定适应温度变化的调整值,实现在宽温范围内高精度的计时功能。
该芯片可满足对实时时钟芯片的各种需要,为工业级产品,是在选用实时时钟IC时的理想选择。
7.BMP180BMP180是一款高精度、小体积、超低能耗的压力传感器,可以应用在移动设备中。
它的性能卓越,绝对精度最低可以达到0.03hPa,并且耗电极低,只有3μA。
BMP180采用强大的8-pin陶瓷无引线芯片承载(LCC)超薄封装,可以通过I2C总线直接与各种微处理器相连。
8.MQ135MQ135气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。
当传感器所处环境中存在污染气体时,传感器的电导率随空气中污染气体浓度的增加而增大。
使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。
MQ135传感器对氨气、硫化物、苯系蒸汽的灵敏度高,对烟雾和其它有害的监测也很理想。
这种传感器可检测多种有害气体,是一款适合多种应用的低成本传感器。
五、系统实现介绍1.系统结构1.模块功能说明(1)传感器数据收集模块使用STC15W4K32S4单片机从四个传感器上用I2C以及AD采集方式获取响应的数据,并通过串口以一定的格式向STC89C52RC发送,该部分由同组成员董鸿祥负责。
(2)串口收发及数据显示模块使用STC89C52RC单片机收到数据,并使用LCD12864显示,并驱动NRF24L01向上位机发送接收到的数据,主要由本人负责。
(3)无线接受及上位机显示模块使用STC89C52RC单片机驱动NRF2401接收下位机发送而来的数据,并通过串口将该数据发送至计算机,通过在Labview上用直观的图像和显示控件来显示接收到的数据。
该部分由同组成员侯贺雨负责。
2.系统框图图1 整体系统框图2.电路图和实物图图2 串口收发及数据显示模块电路图图3 串口收发及数据显示模块实物图图4 下位机整体实物图图5 上位机部分实物图六、软件程序(1)软件功能说明+程序流程图图6 模块实现流程图(2)软件具体实现LCD12864.h文件内容#ifndef _LCD12864_H_#define _LCD12864_H_#include <main.h>sbit RS=P2^2; //RS=0为执行指令;RS=1为执行数据;sbit RW=P2^1; //读写sbit E=P2^0 ;//使能sbit PSB=P2^3; //低电平(串口驱动);高电平(并口驱动)sbit RST=P2^5; //LCD复位void Init_lcd(); //初始化液晶void lcd_busy(); //忙标志查询void delayus(uint z); //延时程序void write(uchar x,uchar Data); //写单字节函数void Show(uchar address,uchar L,uchar STR1[]);#endifLCD12864.c文件内容#include <LCD12864.h>uchar t,p;void delayus(uint z) //延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void lcd_busy(void) //判忙函数{uchar busy;P0=0xff;RS=0;RW=1;do{E=1;busy=P0;E=0;}while(busy>0x7f);}void write(uchar x,uchar Data) //写入函数,将写入数据和命令参数化写在一个函数中{lcd_busy(); //忙查询if(x==0){RS=0;RW=0; //写单字节命令字}else if(x==1){RS=1;RW=0; //写单字节数据}E=1;P0=Data;E=0;P0=0xff;}void Init_lcd(void) //初始化{delayus(20); //启动等待,等LCM讲入工作状态PSB=1; //并口驱动模式RST=0;delayus(4);RST=1; // 复位LCDwrite(0,0x30); //8 位介面,基本指令集write(0,0x0c); //显示打开,光标关,反白关write(0,0x01); //清屏,将DDRAM的地址计数器归零}void Show(uchar address,uchar L,uchar STR1[]) //显示函数{uchar i;write(0,address);for(i=0;i<L;i++){write(1,STR1[i]);}}Main.c内容#include <main.h>#include <LCD12864.h>#include <NRF24L01.h>uchar flag=0,i=0,j,c,receive[17]=0,temp[16]=0,adress=0;code uchar aq2[][4]={"优","良","中","差"};code uchar empty[16]={0};void UartInit(void) //9600bps@11.0592MHz{PCON = 0x00; //波特率不倍速SCON = 0x50; //8位数据,可变波特率TMOD = 0x20; //设定定时器1为8位自动重装方式TL1 = 0xfd; //设定定时初值TH1 = 0xfd; //设定定时器重装值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1}void dis(uchar a){switch(a){case 0: adress=0x80;break;/*第一行显示内容*/case 1: adress=0x90;break;/*第二行显示内容*/case 2: adress=0x88;break;/*第三行显示内容*/case 3: adress=0x98;break;/*第四行显示内容*/default:return;}Show(adress,16,temp);}void main(){//首位置第一行0x80,第二行0x90,第三行0x88,第四行0x98uint result; //计算环境质量UartInit(); //初始化串口init_NRF24L01(); //初始化2401Init_lcd(); //初始化12864EA=1; //打开主中断ES=1; //打开串口中断LED = 0;LED1 = 0;Show(0x80,16,"系统初始化中..");Delay(6000);while(1){if(flag) //当接收到17个字符时,flag置1并开始处理{ES=0;for(j=0;j<15;j++) //把接受到的数除了标志位放进temptemp[j]=receive[j+1];switch(receive[0]) //用标志位判别显示内容{case 's': dis(0); break; //显示时间case 't': dis(1); Show(0x93,2,"°");break; //显示温湿度和‘°’case 'p': dis(2); break; //显示大气压case 'a': dis(3); Show(0x9c,2," "); //显示空气质量result=(temp[4]-'0')*1000+(temp[5]-'0')*100+(temp[6]-'0')*10+(temp[7]-' 0');if(result>700)Show(0x9e,2,aq2[3]);else if(result>300)Show(0x9e,2,aq2[2]);else if(result>64)Show(0x9e,2,aq2[1]);elseShow(0x9e,2,aq2[0]);break;default: break;}flag=0; //显示完后将标志位清0nRF24L01_TxPacket(receive); //通过2401发送数据Delay(600); //断延时ES=1;}}}void ser() interrupt 4{c=SBUF;receive[i]=c;if(!(c=='s'||c=='t'||c=='p'||c=='a')&&(c==receive[0]))//如果接收到的不是标志就不接收{RI=0;return;}i++;if(i>16) //连续接受17个字符{flag=1;i=0;}RI=0;}其他部分由于篇幅原因,在本程序中非重点的NRF2401.h以及NRF2401.c省略七、实验数据及结果分析图7 12864显示效果1图8 12864显示效果2图9 上位机显示效果1图10 上位机显示效果2图11 上位机显示效果3结果显示本系统采集数据精确,上下位机通信间并无乱码。