本次使用STM32L053开发板,本计划利用多个超声波模块HC-SR04完成一个空间目标空间定位系统,但是由于无线通信芯片nRF24L01迟迟没有调试成功,所以此处先使用超声波模块HC-SR04制作一个超声波测距系统,后面等待nRF24L01调试通过再完成原计划。
一、硬件组成
整个系统简图如下:
STM32L053通过HC-SR04测量出距离,然后再由LCD1602显示。
HC-SR04的引脚主要有VCC(电源)、trig(控制端)、 echo(接收端)、 GND(地)。VCC接+5V电源,GND接地,trig接PB1,echo接PB0。
LCD1602的引脚有VSS(电源地)、VDD(电源正极)、VL(液晶显示偏压信号)、RS(数据/命令选择端)、R/W(读/写选择端)、E(使能信号)、D0~D7(数据口)、BLA(背光源正极)、BLK(背光源负极)。VDD接+5V电源,VSS接电源地,RS接PB2,RW接PB10,E接PB15,D0~D7接PC0~PC7,其他信号按照下图连接。
本人采用一块实验板作为基本,将整个系统在板子上进行了搭建,搭建效果图如下:
二、软件编写
1、超声波测距
基本工作原理:(1)采用IO口TRIG触发测距,给至少10us的高电平信号; (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
2、LCD显示
LCD1602的基本操作分为四种:
1. 读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。
2. 读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。
3. 写命令:输入RS=0,RW=0,E=高脉冲。输出:无。
4. 写数据:输入RS=1,RW=0,E=高脉冲。输出:无。
进行如下的宏定义
#define LCD_DB(data) (GPIOC->ODR = ((GPIOC->ODR)&(0xFF00))|(data)) //完成写数据
#define LCD_RS_H (GPIOB->BSRR = 0x0004)
#define LCD_RS_L (GPIOB->BSRR = 0x0004<<16)
#define LCD_RW_H (GPIOB->BSRR = 0x0400)
#define LCD_RW_L (GPIOB->BSRR = 0x0400<<16)
#define LCD_E_H (GPIOB->BSRR = 0x8000)
#define LCD_E_L (GPIOB->BSRR = 0x8000<<16)
通过以上的宏,可以控制LCD控制口状态,写入命令和数据,具体就不详述了,详情可以参考附件中的程序(LCD1602.c)。
3、主程序
主程序比较简单,具体如下:
三、运行效果展示
最后制作整体的效果如下,能够使用,就是前端的超声波的指向有时不准,而且测量时周边最好不要有其他障碍物。