基于nRF24L01+与Arduino的超声波测距系统设计

2015-08-10 10:30刘卫国王红彬
电子设计工程 2015年22期
关键词:接收端寄存器测距

刘卫国 , 王红彬

(1.国防科学技术大学 湖南 长沙 410073;2.77606部队 西藏 拉萨 850000)

距离是描述建筑物平面结构的重要内容,建筑物尺寸的传统测量手段都需要人员借助工具现地进行,但面对比较危险的建筑物时,传统的测量手段势必增加人员的伤亡几率。随着科学技术的发展,测距技术和无线传输技术日趋成熟,无人距离测量在特殊领域中将得到广泛应用。利用超声波测距成本低、精度高、速度快等技术特点,结合单片机、无线通信技术可对建筑物内部平面尺寸进行测量,并将数据无线传至终端设备实时显示。

1 系统结构

超声波测距系统由发射端和接收端两部分组成。发射端由Arduino开发板、无线射频发射模块、天线、超声波模块及电源模块组成。接收端由Arduino开发板、无线射频接收模块、天线和终端设备等组成。

在系统发射端,超声波模块HC-SR04对距离信号进行实时采集,在Arduino的控制下通过无线射频发射模块将距离数字信号发送至接收端;在系统接收端,在Arduino开发板的作用下,通过无线射频接收模块接收发射端发送过来的距离数字信号,通过串口通信模块与PC机进行通信,在PC机中利用软件读取数据并绘制曲线。

2 系统硬件电路设计

2.1 Arduino控制板

本系统中所采用的Arduino UNO[1-2]是一块采用USB接口的核心电路板,处理器核心是ATmega328,包括14个数字输入输出IO(其中6个可提供PWM输出),6个模拟输入IO,一个16 MHz晶体振荡器,一个USB口(便于在线进行程序调试),一个电源插座和一个复位按键。

2.2 测距传感器

HC-SR04超声波测距模块可提供2~400 cm的非接触式距离感测功能,测距精度可达到3 mm,模块包括超声波发射器、接收器和控制电路。模块采用IO口TRIG触发测距,给至少10 μs的高电平信号,之后模块自动发送8个40 kHz的方波,自动检测是否有信号返回,如有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间[3-4]。

2.3 nRF24L01+无线传输模块

nRF24L01是一款新型单片射频收发一体器件,工作于2.4~2.5 GHz ISM频段[5]。其内置频率合成器、功率放大器、晶体振荡器、调制器、低噪声放大器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和通信频道可通过程序进行配置。nRF24L01具有极低的电流消耗,当工作在发射模式下发射功率为0 dBm时电流消耗为11.3 mA,接收模式时为13.5 mA,掉电模式和待机模式下电流消耗更低。本文采用nRF24L01+模块,在原模块的基础上增加了PA和LNA。在发射端通过PA电路将nRF24L01的输出功率放大,同时在接收端通过LNA电路增加接收信号的强度。

2.4 SPI连接

Arduino与nRF24L01+无线收发模块之间利用同步串口SPI[6]进行通信。nRF24L01+的 SPI总线有 GND(接地)、VCC(1.9~3.6 V电源)、CE (使能发射或接收)、CSN (片选信号)、SCK(时钟信号)、MOSI(数据输入)、MISO(数据输出)、IRQ(中断标志位)。Arduino与nRF24L01+的连接图如图1所示。

图1 Arduino与nRF24L01+的连接图Fig.1 Connection diagram of Arduino and nRF24L01+

2.5 实验电路连接图

发射端(HC-SR04、nRF24L01+和 Arduino 连接)和接收端(nRF24L01+和Arduino连接)实验电路连接如图2所示。

图2 发射端和接收端实验电路连接图Fig.2 Connection diagram of transmitting and receiving experimental circuit

3 系统的软件设计

3.1 无线发送模式流程

对nRF24L01+的相关寄存器进行配置,设置为增强型ShockBurstTM发送模式,通信速率为 1 Mbit/s,晶振16 MHz,发射功率设置为0 dBm,MCU通过MOSI写入数据,通过MISO读出数据,设置通过nRF24L01+的数据输入,保存到TX FIFO寄存器中,开始发送数据。在数据发送之后,读取状态寄存器的值并做出判断,确定是否接收到应答信号,判断自动重发次数是否达到最大值(10次)。如果在设定的应答时间内接收到应答信号,则认为数据成功发送到了接收端。如果在设定的时间范围内没有接收到应答信号,则重新发送数据,并且自动重发计数器自动加1。若自动重发次数达到最大值,则表明数据没有发送成功,需要清除MAX_RT位让数据继续重发。发送程序流程图如3所示。

发射程序中的主要函数如下:

图3 nRF24L01+发送程序流程图Fig.3 Flow chart of nRF24L01+sending program

unsigned char SPI_Read_Buf(unsigned char reg, unsigned char*pBuf, unsigned char bytes)//从寄存器"reg"读无符号字符型变量

3.2 无线接收模式流程

设置nRF24L01+为接收模式,与发射端相同的CRC配置、地址宽度、频道和传输速率,拉高CE启动接收,通过读取状态寄存器的值判断是否有数据接收,若有数据,接收端通过自身通道地址与接收到的数据包中的地址进行匹配,若相同就接收该数据,若不同就放弃该数据,继续等待接收。接收程序流程图如图4所示。

图4 nRF24L01+接收程序流程图Fig.4 Flow chart of nRF24L01+receiving program

接收程序中的主要函数如下:

unsigned char SPI_Write_Buf(unsigned char reg, unsigned char*pBuf,unsigned char bytes)//将 nRF24L01+的内容写入缓冲区"*PBUF"

4 实验结果

按照本方案设计的超声波测距系统 (实物如图5所示)经过建筑物现地测试,测量最大宽度8 m,最大高度4 m,超声波模块工作稳定,无线传输模块传输距离符合要求,完全可以达到实际应用的目的。由于该系统目前还是初具功能的试验品,测距平台上功能模块不够丰富,应搭配更多的传感器模块,提升系统功能。

图5 测距系统实物图Fig.5 Entity diagram of ranging system

5 结束语

本文着重介绍了基于nRF24L01+与Arduino的超声波测距系统的设计,通过较低的成本实现了超声波测距、数据无线传输、PC机实时接收显示并绘制曲线等功能,可搭载不同的移动平台,完成建筑物测距任务,具有一定的实用价值。

[1]蔡睿妍.Arduino的原理及应用[J].电子设计工程,2012,20(16):155-157.

[2]王欣,马青玉.基于Arduino的LED光立方设计[J].南京师范大学学报,2013,13(4):24-28.

[3]刘楚红,董镇,钱宇捷,等.基于Arduino的倒车雷达系统设计[J].现代电子技术,2014,37(17):148-150.

[4]苏琳.基于HC-SR04的超声波测距器的设计 [J].科技信息,2012(9):125-126.

[5]孙志远.2.4 GHz无线传感器网络节点通信模块的设计与实现[D].长沙:国防科学技术大学,2010.

[6]戈惠梅,徐晓慧,顾志华,等.基于Arduino的智能小车避障系统的设计[J].现代电子技术,2014,37(11):118-120.

猜你喜欢
接收端寄存器测距
基于扰动观察法的光通信接收端优化策略
STM32和51单片机寄存器映射原理异同分析
顶管接收端脱壳及混凝土浇筑关键技术
基于多接收线圈的无线电能传输系统优化研究
Lite寄存器模型的设计与实现
类星体的精准测距
酸槽内钢带位置测量传感器
浅谈超声波测距
基于PSOC超声测距系统设计
相对差分单项测距△DOR