资源描述
河南大学物理与电子学院毕业论文
编号:
河南大学2013届本科毕业论文
测温并24l01无线传输设计
论文作者姓名: 张玮玮
作 者 学 号: 2009230134
所 在 学 院: 物理与电子学院
所 学 专 业: 通信工程
导师姓名职称: 黄宗胤 讲师
论文完成时间: 2013年05月 08日
18
目 录
摘要: 1
0 前言 1
1 系统组成与功能 2
1.1 系统组成 2
1.2 系统功能 7
2 系统原理 7
2.1 18B20测温24L01发射模块仿真图 8
2.2 24L01接收模块仿真图 8
2.3 实物照片 9
3 程序流程图 10
3.1 测温程序流程图 10
3.2发射端程序流程图 11
3.3接收端程序流程图 12
4制作过程 13
5主要元件清单 14
5.1 发射板其他元件 14
5.2 接收板其他元件 14
6主要程序源代码 15
6.1 温度采集处理主要部分函数 15
6.2 发送模块主要程序 15
6.3接收端模块主要程序 16
7结论 17
8其他实现方案讨论 17
9本方案创新点 18
10参考文献 18
测温并24L01无线传输
张玮玮
(河南大学物理与电子学院,河南 开封,475004)
摘要:
本文采用18B20模块和24L01模块,用18B20测温传送至单片机中存储 并通过24L01模块无线传输,本文详细给出软硬件设计过程。该设计具有结构简单、实时性好、功耗小、价格低廉等优点,可用来进一步开发与利用。
关键词:无线;温度传输;24L01;18B20;单片机
temperature measuring and 24L01 wireless transmission
“Zhang Wei-wei”
(School of Physics and Electronics, Henan University, Henan Kaifeng 475004, China)
Abstract:
In this paper, 18B20 modules and the 24L01 module with 18B20 temperature transmitted to the microcontroller stores and through the 24L01 module wireless transmission, this article details the hardware and software design process is given. The design has the advantages of simple structure, real-time, low power consumption, and low price, can be used to further development and utilization.
Key words: wireless; temperature transmission; 24L01; 18B20; microcontroller
0 前言
温度的测试技术已经成熟,已经满足了人们的大部分需求,然而在某些工作场合下,我们更想知道与自己不在一个地方的温度,以便进行温度调控,更好更方便地生产生活,因此,温度的传输就成为了我们要考虑的内容了。
此单片机课程设计中,我们就基于24L01模拟温度的无线传输,经过调试,试验,已经实现了预期功能,同时也实现了对生产生活中温度预警的模拟功能。
1 系统组成与功能
1.1 系统组成
本系统主要有AT89C52单片机、复位按键、无源蜂鸣器、18B20芯片、24L01模块、四位一体共阴8段数码管等元件组成。
1.1.1 AT89C52单片机
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),兼容标准MCS-51指令系统。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52
可以按照常规方法进行编程,但不可以在线
编程(S系列的才支持在线编程)。 图1-1
引脚图如图1-1所示
1.1.2 18B20测温芯片
图1-2
DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。DS18B20 共有三种形态的存储器资源:ROM 只读存储器,用于存放 DS18B20ID 编码; RAM 数据暂存器,用于内部计算和数据存取; EEPROM 非易失性, 记忆体,用于存放长期需要保存的数据.
24L01模块
NRF24L01是工作于2.4~2.5GHz世界通用的ISM频段的单片无线收发器芯片。无线收发器芯片包括:频率发生器、增强型SchockBurst模式控制器、功率放大器、晶体振荡器、调制器、解调器。输出功率、频道选择和协议的设置可以通过SPI接口进行设置.其拥有极低的电流消耗:当工作在发射模式下发射功率为-6dBm时电流消耗为9mA,接收模式为12.3mA。
图1-3
其引脚功能:
引脚
名称
引脚功能
描述
1
CE
数字输入
RX或TX模式选择
2
CSN
数字输入
SPI片选信号
3
SCK
数字输入
SPI时钟
4
MOSI
数字输入
从SPI数据输入脚
5
MISO
数字输出
从SPI数据输出脚
6
IRQ
数字输出
可屏蔽中断脚
7
VDD
电源
电源(+3V)
8
VSS
电源
接地(0V)
1.1.3 四位一体共阴数码管
1
图1-4
其引脚图为:
图1-5
1.1.4 无源蜂鸣器
图1-6
无源蜂鸣器是蜂鸣器的一种,区别于有源蜂鸣器,无源蜂鸣器是内部不带振荡源的蜂鸣器,是一体化结构的电子讯响器,在电路中的图形符号位H或者HA。无源蜂鸣器是靠压电效应的原理来发声的,压电材料,一般常见的是各种压电陶瓷. 这种材料的特别之处在于,当电压作用于压电材料时,就会随电压和频率的变化产生机械变形.另一方面,当振动压电陶瓷时,则会产生电荷.就是说这种材料能把机械变形和电荷相互转化,压电式蜂鸣器里面的起振片,就是一种压电陶瓷.如上所述,要让它振动,除了压电陶瓷本身,还需要适当大小和频率变化的电压作用于压电陶瓷.压电式(有源)蜂鸣器内部带有多谐振荡器,可以产生 1.5—2.5kHZ 的电压信号. 由此压电式蜂鸣器才能发声。
1.1.5 74LS138 3-8译码器
图1-7
74LS138:当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
A、B、C
译码地址输入端
G1
选通端
/(G2A)、/(G2B)
选通端(低电平有效)
Y0-Y7
译码输出端(低电平有效)
1.2 系统功能
本设计的主要功能是用18B20测温传送至单片机中存储 并通过24L01模块无线传输。发射端与接收端各有数码管分别显示发送、接收温度,同时系统又能实现报警功能 ,当所测温度超过预定值时,接收端的蜂鸣器报警提示。并且在发射端拥有七彩指示灯,当所测温度不发生变化时,指示灯会熄灭,以提示温度已恒定。
2 系统原理
本设计主要原理是单片机采集18B20测得的温度,同时将数据传给24L01的发射模块,并通过另一单片机控制24L01接收模块的接收,同时显示所测温度值。
2.1 18B20测温24L01发射模块仿真图
图2-1
说明:24L01无线模块不能实现真正的仿真,上图中的NRF24L01仅作示意,但是数码管能正常仿真
2.2 24L01接收模块仿真图
图2-2
2.3 实物照片
图2-3
3 程序流程图
发射板与接收板分别执行各自功能,各有各自的单片机控制,由24L01收发模块作为他们的关联。
3.1 测温程序流程图
开 始
初始化数码管
DB18B20复位
读取 温度
处理 温度
数码管显示温度2s
结 束
图3-1
3.2发射端程序流程图
开 始
初 始 化
读取18B20的温度
处 理 温 度
温度存入24L0发射数组
数组值是否改变
24L01发射
数码管显示温度值
指示灯闪烁
是
否
结 束
图3-2
3.3接收端程序流程图
开 始
初始化
24L01接收准备
24L01接收
接收数据存入数组
数码管显示
温度是否
大于20℃
蜂鸣器唱一首歌
是
否
唱歌定时时间是否到了
是
否
结 束
图3-3
4制作过程
简单地说,制作过程包括电路板的制作、元器件的焊接、程序的烧录、用Proteus软件做仿真和最后的调试、检验。
在充分了解了电路中所
需的各元器件的功能和性能,掌握了单片机原理及其应用,对24L01发射和接收模块仿真图有了充分的了解之后,我们开始焊接元器件。
4.1焊接过程及出现的问题和解决
4.1.1焊接工具不好用
当研究好各个元件和电路图开始焊接时,电烙铁很好用,我很快就上手了,焊的也很快,但是沾了一下松香之后电烙铁就坏了,加热很长时间也没一点温度,不能焊接,因此浪费了很长时间。印象最深的是被它烫的那几个大泡,相信焊过板子的每个同学都印象深刻。所以,要想保持高效率,必须要弄好工具,这样才会事半功倍。
4.1.2焊接时排线问题
焊接众多的元件时就需要事先把线排好,否则焊接过程受到影响不说,出现问题时检查线路也不好检查。一开始我没注意到这个问题,发射模块的线排的不好,有些不美观。而焊接接收模块时注意了一下,排线就好多了。
4.1.3引脚问题
本实验元件中引脚很多,稍不小心就会焊错,拆的话不好拆,也很容易触碰到其他焊接好的东西,因此焊接的时候不仅要很认真,还要把引脚标记好。于是我就用标签在较弄混的引脚上标注清楚。
4.1.4焊点之间相连问题
焊点之间相连的话会使线路出现短路,还会影响电路的美观,这个就需要焊接时多加小心了。唯一解决的办法是把握合适的焊接时间,多多练习,这样才能熟能生巧,做得漂亮。
4.1.5检查时出现的问题
1.焊接完成后,电路板不能测温,仔细检查之后才发现有些地方是虚焊的,有些地方漏焊了。
2.修改之后,我开始检验电路是否能达到预想的效果。但是在显示温度变化时,有些反应迟钝,于是我把程序中的延迟时间改了一下,一秒一改变,这样温度就变化正常了。
5主要元件清单
原件名称
数量
万用板(9cm×15cm)
2
STC89C52单片机
2
74LS138
2
24L01接收模块
1
24L01发送模块
1
2个四位一体共阴数码管
2
AMS1117-3.3稳压芯片
2
5.1 发射板其他元件
原件名称
数量
18B20测温芯片
1
晶振12M,
1
上拉电阻
1
复位按键
1
七彩发光二极管指示灯
1
电容30pf
2
电阻(10k,4.7k)
各一个
5.2 接收板其他元件
原件名称
数量
晶振12M
1
电容30pf
2
无源蜂鸣器
1
上拉电阻
1
电阻(10k,4.7k)
各一个
复位按键
1
6主要程序源代码
6.1 温度采集处理主要部分函数
#include "reg51.h"
……
/**************DS18B20复位函数****************/
ow_reset(void)
{·····};
/***********DS18B20写命令函数*************/
void write_byte(uchar val)
{·····};
/***********DS18B20读1字节函数*************/
uchar read_byte(void)
{····};
/*************读出温度函数*************/
read_temp()
{·····};
/**********温度数据处理函数***************/
work_temp()
{···};
main()
{···};
6.2 发送模块主要程序
#include "reg51.h"
/*NRF24L01初始化
void init_NRF24L01(void)
{···};
····
/***********主函数************/
main()
{
int f=0;
uchar a[3];
int t;
while(1)
{uchar t=0;
uchar i=1;
long int j=0;
Disdata=0xFF; //初始化端口
discan=0xff;
led=0;
for(h=0;h<4;h++){display[h]=0;} //开始显示"0000"
ow_reset();
init_NRF24L01() ;
write_byte(0xCC); //Skip ROM
write_byte(0x44); //发转换命令
if(f==0)
{
for(h=0;h<500;h++) {scan();}
f=1;
}///每次重新初始化,重新装载数据,最大限度地消除干扰 ,
//同时只有第一次初始化显示0000 再次初始化时数码管并不再显示0000
read_temp(); //读出DS18B20温度数据
work_temp(); //处理温度数据
i=display[0]; //把发射数组中的第1个数设为i
TxBuf[0]=i;
i=display[1]; //把发射数组中的第2个数设为i
TxBuf[1]=i;
i=display[2]; //把发射数组中的第3个数设为i
TxBuf[2]=i;
i=display[3]; //把发射数组中的第4个数设为i
TxBuf[3]=i;
if(a[0]==TxBuf[0]&&a[1]==TxBuf[1]&&a[2]==TxBuf[2]) ;
else
led=1; // 温度不变时指示灯不再闪烁,温度变化,指示灯开始闪烁
for(t=0;t<3;t++)
{ a[t]=TxBuf[t]; }
nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data 一次发完数组中的20个数
for(h=0;h<500;h++) {scan();} //显示温度2 s
}}
6.3接收端模块主要程序
void main(void)
{
long int j=0;
char k;
p=1;
for(h=0;h<4;h++){RxBuf[h]=0;} //开始显示"0000"
init_NRF24L01() ; //2401初始化
Delay(2000);
while(1)
{ SetRX_Mode();
nRF24L01_RxPacket(RxBuf); //一次收完20个数,放在RxBuf[20]中//接收到数据
for(k=0;k<4;k++)
{Disdata=dis_7[RxBuf[k]];
if(k==1) { DIN=1;}
discan=scan_con[k];
delay1(90);
discan=0xff;
} //显示温度2 s
if(RxBuf[2]>=2)
{ InitialSound();
/* Play(Music_tomorrow,0,3,360) ;
Delay1ms(500); */
Play(Music_Girl,0,3,360);
Delay1ms(500);
/* Play(Music_Same,0,3,360);
Delay1ms(500); */ //去掉隐藏符号即可播放
/* Play(Music_Two,0,3,360);
Delay1ms(500); */}// 高于20℃播放音乐
} }
7结论
通过18B20测温并由单片机控制,利用24L01实现无线传输,能够很准确将所测温度传输到几十米外的距离,并且在超过某一温度时自动报警,可以用于某些不利于近距离观测的生产生活中。
8其他实现方案讨论
可以使用1602液晶显示屏代替数码管 ,显示更多的文字说明,同时还可以使用其他型号的无线收发模块进行试验,也能得出结果。
9本方案创新点
1.温度超过某一温度蜂鸣器自动报警并播放音乐;
2.温度低于报警温度时,七彩指示灯会随着温度的变化闪烁。
10参考文献
[1] 李朝青,单片机原理及接口技术(第3版),北京航空航天大学出版社
[2] 阎石.数字电子技术基础[M],北京:高等教育出版社,1998。
[3]
展开阅读全文