1、无线温度遥测系统C题合肥学院第七届电子设计竞赛报告作品名称:无 线 温 度 遥 测 系 统 学校全称: 合 肥 学 院 系别班级: 08级电子信息与电气工程系 队员姓名:08电子班 胡光 0805070240 08电子班 刘扬 080507024408电子班 程坤 0805070263 无线温度遥感系统摘要:本系统是基于80C52单片机和无线传输模块设计的无线温度遥测系统。温度测量采用的是DS18B20温度传感器;无线数据传输是基于FSK调制解调,抗干扰能力强的NRF24L01无线收发芯片;系统为低功耗设计。关键字: 无线通信 DS18B20 单片机一、引言在许多场合需要将传感器节点直接放置在
2、目标地点进行现场的数据采集,这就要求传感器节点具有无线通信的能力。同时,由于无线传感器通常使用电池作为能源,所以,它对能耗要求也比较高。无线温度遥感系统可以实现主机端与传感器节点之间的通信,并且通过选用低功耗的芯片和对软件的低功耗设计,也可以实现低功耗的目标。1.1基本要求(1)测温范围1065,误差2米;(4)可设置温度上限报警;(5)接收点显示测温点数据及声光上限报警信号;1.2.发挥部分(1)遥测距离5米;(2)误差5米的要求。五、总结心得经过我们的团结协作、不懈努力,终于我们的无线温度遥测系统完成了,这次电子设计竞赛让我们在付出的道路上收获了很多。从选题开始一直到现在,我们感受着比赛带
3、来的兴奋与快乐的同时,也体味到了付出的不易。经过这些天的努力,我们也终于将这份艰苦却又充满乐趣的事情完成了。本无线温度遥测系统中,温度传感器采用的是DS18B20,开始我们考虑的是PT100这种温度传感器件,但是由于DS18B20能够达到要求,相对又经济方便,最终选用了DS18B20。不过对于无线收发芯片的选用,相比之下就没有这样顺利了,我们起初的考虑忽视了经济这一个重要方面,经过查阅资料,开始考虑的是PRT2000,它的性能很不错,不过后来才想到没有考虑它的价格,当了解到一块PRT2000无线收发模块价格在一百元左右的时候,我们意识到这是不可行的,应该选用其它的性能接近并且经济的芯片,经过了
4、一番周折,最终确定了NRF401无线收发模块。当最终完成的时候,大家很开心的松了一口气,甚至在实物测试看到温度发送接收成功时,我们兴奋地欢呼相拥。作为大三的学生,第一次参加学校的电子设计竞赛,在为比赛努力付出的过程中,我们也有很多收获。为了把作品做成功,我们查阅资料,检索文献,其间丰富了我们的知识,增加了些许经验。我们常常是三个人在一起,通过分工协作和互相帮助,也让我们又一次体味了团队合作的重要。在将实物做出来的过程中,我们感受到原来所有的一切都是那么的不易,都需要我们认真的思考,研究。对于电路板的焊接,需要事先进行排版布线,然后将相应的元件连接起来,焊接中,我们仿佛回到了曾经,回到了那个为了
5、心中的象牙塔拼搏奋斗的日子,静静地专注于你的目标,双手在万能板上忙忙碌碌,电烙铁在焊锡丝和元件之间反反复复。偶尔会因某一个元件焊接的不够理想而眉头紧蹙,然后锡枪除去焊锡,再重新焊接,只是为了让电路焊接的更理想;时而也会因感觉到焊接的电路很不错而不由自主地啧啧赞叹。就这样我们的实物电路焊接完成了,接着是程序的编写,查阅了大量的资料,参考了一些相关书籍,最终编写完成后,烧录到STC89C52单片机中,连接电路测试。起初的测试,没有达到要求,接下来便是对程序的再编写,再调试,就这样反反复复,最终实现了。尽管其间是枯燥的难熬的,不过,在测试成功,数据显示出来的那一瞬,心中的快乐难以言表,那种感觉多么的
6、让人享受。当我们聚在一起专心为之而战斗的时候,专心的投入进去后,终于在你迫切地需要缓一下劲而暂停了一下的时候,你会恍然惊叹:大家居然忙了这么久!是的,这是专心,这是态度,人们说态度决定高度!兴奋着便又埋首于当前的工作之中了。最终,我们终于可以开心地笑着说我们可以稍事休息一会儿了,此次的任务完成了。我们默契的在心中共铭:不能放弃!这不仅仅是因为执著,也许还因为我们已骑虎难下,毕竟付出了很多,付出了好久。为着它到了几近痴狂的程度,不只是对它所拥有着的浓厚兴趣,更是为了求得一个交待。我们心中有着一个坚定的信念:我们要彼此并肩齐首,走更远的路。参考文献:郭天祥 新概念51单片机C语言教程 谭浩强 C程
7、序设计(第三版)李岁劳 杨鹏翔 朱新颖 基于C8051单片机的多路温度无线遥测系统 仪器仪表: 仪器仪表名称型号生产公司名称三位半数字万用表MY61苏山仪器仪表公司温度计MC不详(从电子系实验室借用)附录总电路设计原理图 基于单片机的温度采集与无线发送电路 基于单片机的无线接收及1602液晶显示电路程序代码清单:发射Allhead.h/*/#ifndef _ALLHEAD_H_#define _ALLHEAD_H_/*/#includepubile.h#includeDelay.h#includeNRF24L01.h#includeDS18N02.h/*/#endifDelay.h/*/#if
8、ndef _DELAY_H_#define _DELAY_H_/*/void Delay(unint t);void DDelay(unint t);/*/#endifDS18B20.h/*/#ifndef _DS18B20_H_#define _DS18B20_H_/*/extern void Reset();extern void WriteChar(unchar dat);extern unint ReadChar();extern unint ReadTemperature();/*/#endifNRF24L01.h/*/#ifndef _NRF24L01_H_#define _NRF
9、24L01_H_/*/#define TX_ADDR_WITDH 5 /发送地址宽度设置为5个字节#define RX_ADDR_WITDH 5/接收地址宽度设置为5个字节#define TX_DATA_WITDH 10/发送数据宽度1个字节#define RX_DATA_WITDH 10/接收数据宽度1个字节/*命令寄存器*/#define R_REGISTER 0x00/读取配置寄存器#define W_REGISTER 0x20/写配置寄存器#define R_RX_PAYLOAD 0x61/读取RX有效数据#define W_TX_PAYLOAD 0xa0/写TX有效数据#define
10、 FLUSH_TX 0xe1/清除TXFIFO寄存器#define FLUSH_RX 0xe2/清除RXFIFO寄存器#define REUSE_TX_PL 0xe3/重新使用上一包有效数据#define NOP 0xff/空操作/*寄存器地址*/#define CONFIG 0x00/配置寄存器#define EN_AA 0x01/使能自动应答#define EN_RXADDR 0x02/接收通道使能0-5个通道#define SETUP_AW 0x03/设置数据通道地址宽度3-5#define SETUP_RETR 0x04/建立自动重发#define RF_CH 0x05/射频通道设置#
11、define RF_SETUP 0x06/射频寄存器#define STATUS 0x07/状态寄存器#define OBSERVE_TX 0x08/发送检测寄存器#define CD 0x09/载波#define RX_ADDR_P0 0x0a/数据通道0接收地址#define RX_ADDR_P1 0x0b/数据通道1接收地址#define RX_ADDR_P2 0x0c/数据通道2接收地址#define RX_ADDR_P3 0x0d/数据通道3接收地址#define RX_ADDR_P4 0x0e/数据通道4接收地址#define RX_ADDR_P5 0x0f/数据通道5接收地址#d
12、efine TX_ADDR 0x10/发送地址#define RX_PW_P0 0x11/P0通道数据宽度设置#define RX_PW_P1 0x12/P1通道数据宽度设置#define RX_PW_P2 0x13/P2通道数据宽度设置#define RX_PW_P3 0x14/P3通道数据宽度设置#define RX_PW_P4 0x15/P4通道数据宽度设置#define RX_PW_P5 0x16/P5通道数据宽度设置#define FIFO_STATUS 0x17/FIFO状态寄存器/*相关函数声明*/unchar NRFACK();unchar NRFSPI(unchar date
13、);unchar NRFReadReg(unchar RegAddr);unchar NRFWriteReg(unchar RegAddr,unchar date);unchar NRFReadRxDate(unchar RegAddr,unchar *RxDate,unchar DateLen);unchar NRFWriteTxDate(unchar RegAddr,unchar *TxDate,unchar DateLen);unchar NRFRevDate(unchar *RevDate);void NRFSetTxMode(unchar *TxDate);void NRF24L01
14、Int();void NRFSetRXMode();unchar CheckACK();extern unchar bdata sta;/*/#endifPubile.h/*/#ifndef _PUBILE_H_#define _PUBILE_H_/*/#define unchar unsigned char#define unint unsigned int/*/#endifDelay.c/*/#includereg52.h#includeAllhead.h/*延时函数*/void Delay(unint t) unint x,y; for(x=t;x0;x-) for(y=110;y0;y
15、-);/* DS18B20专用延时子函数*/void DDelay(unint t) unint n; n=0; while(n0;i-) DQ=0; DQ=dat&0x01; DDelay(5); DQ=1; dat=1; DDelay(4); /* DS18B20读一个字节函数*/unint ReadChar() unchar i,dat=0; for (i=8;i0;i-) DQ=1; DDelay(1); DQ=0; dat=1; DQ=1; if(DQ) dat=dat|0x80; DDelay(4); return(dat); /* /*SPI时序函数*/unchar NRFSPI
16、(unchar date) unchar i; for(i=0;i8;i+) / 循环8次 if(date&0x80) MOSI=1; else MOSI=0; / byte最高位输出到MOSI date=1; / 低一位移位到最高位 SCLK=1; if(MISO) / 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据 date|=0x01; / 读MISO到byte最低位 SCLK=0; / SCK置低 return(date); / 返回读出的一字节/*NRF24L01初始化函数*/void NRF24L01Int() Delay(2);/让系统什么都不干
17、CE=0; /待机模式1 CSN=1; SCLK=0; IRQ=1; /*SPI读寄存器一字节函数*/unchar NRFReadReg(unchar RegAddr) unchar BackDate; CSN=0;/启动时序 NRFSPI(RegAddr);/写寄存器地址 BackDate=NRFSPI(0x00);/写入读寄存器指令 CSN=1; return(BackDate); /返回状态/*SPI写寄存器一字节函数*/unchar NRFWriteReg(unchar RegAddr,unchar date) unchar BackDate; CSN=0;/启动时序 BackDate=NRFSPI(RegAddr);/写入地
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1