1、 1五邑大学 信息工程学院课 程 设 计 报 告课程名称: 无线温度检测器 专 业: 电子信息工程 班 级: 学 号: 姓 名: 指导教师: 设计时间: 2016 年 10 月 评定成绩: 2无线温度监测器一、设计任务与要求1.实时获取被测对象温度,温度测量范围:10 +45;测量精度:0.1。2.无线传输实时获取的温度值,传输距离10m。3.实时显示接收到的温度值。4.基于单片机实现。二、课题分析与方案选择在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。无线系统具有不借助外部网络、不受布线限制的优点。本次课程设计把这两部分结合起来
2、,用无线数据传输技术来实现温度传感器的温度数据采集。方案一:传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法的缺点是硬件电路相对复杂,需要比较多的外部硬件支持。方案二:采用 DS18B20 作为温度监测元件,并且基于 STC89C52 单片机设计温度测量及报警电路。本次设计采用方案二,采用无线收发模块 NRF24L01 来实现无线传输功能,温度测量范围-55 +125,使用 LCD 液晶显示,并且能设置温度报警上下限。三、单元电路分析与设计1.原理分析单片机 STC89C52 具有低电压供电和体积小等特点,晶振采用 12MHz。复位电路采用上电加
3、按钮复位。晶振电路 复位电路显示电路:显示电路采用 LCD1602,滑动电阻 R6 用来调节背光亮度。 3显示电路报警电路当单片机通电后,进入温度报警上下限调节,此时显示软件设置的温度报警上线,按s2 对报警温度进行加一,按 s3 对报警温度进行减一。当实际温度超过所设温度上下限时,单片机 P3.0 口会输出高电平,红色 led 灯会亮起。 温度传感器:DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 912 位的数字值读数方式。DS18B20 的性能特点如下
4、:1、独特的单线接口仅需要一个端口引脚进行通信;2、多个 DS18B20 可以并联在惟一的三线上,实现多点组网功能3、无须外部器件;4、可通过数据线供电,电压范围为 3.05.5;5、零待机功耗;6、温度以或位数字;7、用户可定义报警设置;8、报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;9、负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B20 采用寄生电源供电方式,此时 DS18B20 的 1 脚接地,2 脚作为信号线,3 脚接电源。由于单线制只有一根线,因此发送接口必须是三态的。4温度传感器无线收发模块 nrf24l01输出功率频道选择和协议的
5、设置可以通过 SPI 接口进行设置 ,单片机可通过 IRQ 引脚快判断是否完成数据接收和数据发送。四、总原理图及元器件清单发送端:5接收端:2.元件清单序号 元器件名称 型号 主要参数 数量 备 注1 无线收发模块 NRF24L01 22 智能温度传感器 DS18B20 13 单片机 STC89C52 24 显示器 LCD1602 15 电容 22nf 46 排阻 10K 27 晶振 12MHZ 28 稳压器 az1117t-3.3 29 按键开关 310 LED 111 蜂鸣器 112 电阻 10K 26五、安装与调试1调试过程描述一开始接收端单片机通电后显示屏背光亮,内容无显示,经检测电路
6、后发现信号控制线断裂。修复后显示屏能显示学号、字母信息,但是无法显示温度数字。初步判断是程序出问题,导致无线模块没有正确接收信号。之后更改程序,编程控制端口收发信号,最终调试成功。2实物照片六、性能测试与分析在本次设计中,利用单片机实现了温度测量,测量精度为0.1,在发送端温度传感器的数据能实时发送到接收端,无线传输距离达到 10m 以上,符合设计要求。 七、结论与心得从确定题目,研究原理图,制作电路板,到焊接调试,当中出现不少问题,但是我迎难而上,把问题逐个解决,最终完成课程设计,我从中积累了很多解决问题的宝贵经验。其中最大的问题是无线接收模块在接收温度信息时延迟比较大,后来通过查阅资料修改
7、信道,问题得以解决。7另一个问题是当温度计一通上电后,LED 灯就会一直亮。在确定电路连接和原理图正确后依然不能解决,于是我跟同学讨论,发现是程序出错,使得单片机与 LED 相连的 I/O 口一直输出高电平,修改程序后温度计才正常工作!在排查问题过程中我的耐心得到了锻炼,并且与同学们的讨论更是让我受益匪浅!通过这次课程设计我进一步熟悉了单片机的内部结构和工作原理,了解到无线收发模块的使用方法,掌握了单片机应用系统设计的基本方法和步骤,让自己的理论水平和实践能力上升到一个新的台阶,同时我也认识到实践的重要性。程序(程序本身没问题,只是排版乱了,大家下载回来注意修改一下双斜杠,双斜杠后面的内容会变
8、成注释,不需要删减内容,只需要修正好回车键,都是行数的问题)发送端:#include #include /#include “api.h“#define uchar unsigned char#define TX_ADR_WIDTH 5 / 发射地址的字节个数#define TX_PLOAD_WIDTH 2 /发射字节uchar const TX_ADDRESSTX_ADR_WIDTH=0x34,0x55,0x10,0x10,0x01;uchar rx_bufTX_PLOAD_WIDTH;uchar tx_bufTX_PLOAD_WIDTH;uchar distance_data2;uchar
9、 flag;/ 标志sbit CE=P10; /发射高电平大于 10MS 接收高电平sbit CSN=P11; /低电平 ISP 使能sbit SCK=P12; /下降沿8sbit MOSI=P13; /MCU 出sbit MISO=P14; /MCU 入sbit IRQ=P15; /中断uchar bdata sta;sbit RX_DR =sta6; /接收数据准备就绪sbit TX_DS =sta5; /已发送数据sbit MAX_RT =sta4;sbit DQ=P30;unsigned char time; /设置全局变量,专门用于严格延时/*NRF24L01*/*NRF24L01
10、寄 存 器 指 令#define READ_REG 0x00 / 读寄存器指令#define WRITE_REG 0x20 / 写寄存器指令#define RD_RX_PLOAD 0x61 / 读取接收数据指令#define WR_TX_PLOAD 0xA0 / 写待发数据指令#define FLUSH_TX 0xE1 / 冲洗发送 FIFO 指令#define FLUSH_RX 0xE2 / 冲洗接收 FIFO 指令#define REUSE_TX_PL 0xE3 / 定义重复装载数据指令#define NOP 0xFF / 保留9/*SPI(nRF24L01) 寄 存 器 地 址#defi
11、ne CONFIG 0x00 / 配置收发状态, CRC 校验模式以及收发状态响应方式#define EN_AA 0x01 / 自动应答功能设置#define EN_RXADDR 0x02 / 可用信道设置#define SETUP_AW 0x03 / 收发地址宽度设置#define SETUP_RETR 0x04 / 自动重发功能设置#define RF_CH 0x05 / 工作频率设置#define RF_SETUP 0x06 / 发射速率、功耗功能设置#define STATUS 0x07 / 状态寄存器#define OBSERVE_TX 0x08 / 发送监测功能#define CD
12、 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 接收数据地址#define TX_ADDR 0x10 / 发送地址寄存器#define RX_PW_P0 0x11 / 接收频道 0 接收数据长
13、度10#define RX_PW_P1 0x12 / 接收频道 0 接收数据长度#define RX_PW_P2 0x13 / 接收频道 0 接收数据长度#define RX_PW_P3 0x14 / 接收频道 0 接收数据长度#define RX_PW_P4 0x15 / 接收频道 0 接收数据长度#define RX_PW_P5 0x16 / 接收频道 0 接收数据长度#define FIFO_STATUS 0x17 / FIFO 栈入栈出状态寄存器设置/*void init_io(void)CE=0;CSN=1;SCK=0;void delay_ms(unsigned int x)unsigned int i,j;for(i=0;ix;i+)j=108;while(j-);