- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于nRF24L01+与Arduino的超声波测距系统设计
距离是描述建筑物平面结构的重要内容,建筑物尺寸的传统测量手段都需要人员借助工具现地进行,但面对比较危险的建筑物时,传统的测量手段势必增加人员的伤亡几率。随着科学技术的发展,测距技术和无线传输技术日趋成熟,无人距离测量在特殊领域中将得到广泛应用。利用超声波测距成本低、精度高、速度快等技术特点,结合单片机、无线通信技术可对建筑物内部平面尺寸进行测量,并将数据无线传至终端设备实时显示。
1 系统结构
超声波测距系统由发射端和接收端两部分组成。发射端由Arduino开发板、无线射频发射模块、天线、超声波模块及电源模块组成。接收端由Arduino开发板、无线射频接收模块、天线和终端设备等组成。
在系统发射端,超声波模块HC—SR04对距离信号进行实时采集,在Arduino的控制下通过无线射频发射模块将距离数字信号发送至接收端;在系统接收端,在Arduino开发板的作用下,通过无线射频接收模块接收发射端发送过来的距离数字信号,通过串口通信模块与PC机进行通信,在PC机中利用软件读取数据并绘制曲线。
2 系统硬件电路设计
2.1 Arduino控制板
本系统中所采用的Arduino UNO是一块采用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口ECH0输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
2.3 nRF24L01+无线传输模块
nRF24L01是一款新型单片射频收发一体器件,工作于2.4~2.5 GHz ISM频段。其内置频率合成器、功率放大器、晶体振荡器、调制器、低噪声放大器等功能模块,并融合了增强型ShocKBurst技术,其中输出功率和通信频道可通过程序进行配置。nRF24L01具有极低的电流消耗,当工作在发射模式下发射功率为0 dBm时电流消耗为11.3 mA,接收模式时为13.5 mA,掉电模式和待机模式下电流消耗更低。本文采用nRF24L01+模块,在原模块的基础上增加了PA和LNA。在发射端通过PA电路将nRF24L01的输出功率放大,同时在接收端通过LNA电路增加接收信号的强度。
2.4 SPI连接
Arduino与nRF24L01+无线收发模块之间利用同步串口SPI进行通信。nRF24L01+的SPI总线有GND(接地)、VCC(1.9~3.6 V电源)、CE(使能发射或接收)、CSN(片选信号)、SCK(时钟信号)、MOSI(数据输入)、MISO(数据输出)、IRQ(中断标志位)。Arduino与nRF24L01+的连接图如图1所示。
2.5 实验电路连接图
发射端(HC—SR04、nRF24L01+和Arduino连接)和接收端(nRF24L01+和Arduino连接)实验电路连接如图2所示。
3 系统的软件设计
3.1 无线发送模式流程
对nRF24L01+的相关寄存器进行配置,设置为增强型ShockBurstTM发送模式,通信速率为1 Mbit/s,晶振16 MHz,发射功率设置为0 dBm,MCU通过MOSI写入数据,通过MISO读出数据,设置通过nRF24L01+的数据输入,保存到TX FIFO寄存器中,开始发送数据。在数据发送之后,读取状态寄存器的值并做出判断,确定是否接收到应答信号,判断自动重发次数是否达到最大值(10次)。如果在设定的应答时间内接收到应答信号,则认为数据成功发送到了接收端。如果在设定的时间范围内没有接收到应答信号,则重新发送数据,并且自动重发计数器自动加1。若自动重发次数达到最大值,则表明数据没有发送成功,需要清除MAX_RT位让数据继续重发。发送程序流程图如3所示。
发射程序中的主要函数如下:
void TX_Mode (void) //初始化nRF24L01+设备进入发送模式
void Send_Data(int a) //发射数据“a”
unsigned char SPI_Read_Buf(unsigned char reg,unsigned
char*pBuf,unsigned char bytes) //从寄存器“reg”读无符号字符型变量
3.2 无线接收模式流程
设置nRF24L01+为接收模式,与发射端相同的CRC配置、地址宽度、频道和传输速率,拉高CE启动接收,通过读取状态寄存器的值判断是否有数据接收,若有数据,接收端通过自身通道地址与接收到的数据包中的地址进行匹配,若相同就接收该数据,若不同就放弃该数据,继续等待接收。接收程序流程图如图4所示。
接收程序中的主要函数如下:
void RX_Mode (void) //初始化nRF24L01+设备进入接收模式
void Recive Data() //接收数据
unsigned char SPI_Write_Buf(unsigned char reg,unsigned
char*pBuf,unsigned char bytes) //将nRF24L01+的内容写入缓冲区“*PBUF”
4 实验结果
按照本方案设计的超声波测距系统(实物如图5所示)经过建筑物现地测试,测量最大宽度8 m,最大高度4 m,超声波模块工作稳定,无线传输模块传输距离符合要求,完全可以达到实际应用的目的。由于该系统目前还是初具功能的试验品,测距平台上功能模块不够丰富,应搭配更多的传感器模块,提升系统功能。
5 结束语
本文着重介绍了基于nRF24L01+与Arduino的超声波测距系统的设计,通过较低的成本实现了超声波测距、数据无线传输、PC机实时接收显示并绘制曲线等功能,可搭载不同的移动平台,完成建筑物测距任务,具有一定的实用价值。