基于STM32的超声波测距仪设计

引言

本项目将基于STM32微控制器设计一个超声波测距仪,通过超声波传感器实现距离测量,并将结果显示在液晶屏上。该项目展示了STM32微控制器与超声波传感器、LCD显示器的接口通信,以及信号处理和距离计算的过程。

环境准备

1. 硬件设备
  • STM32F103C8T6 开发板(或其他 STM32 系列)
  • 超声波传感器模块(如 HC-SR04)
  • 1602 LCD 显示屏(I2C 或并行接口)
  • USB-TTL 串口调试工具
  • 面包板和杜邦线
2. 软件工具
  • STM32CubeMX:用于初始化 STM32 外设。
  • Keil uVision 或 STM32CubeIDE:用于编写和下载代码。
  • ST-Link 驱动程序:用于下载程序到 STM32。

项目实现

1. 硬件连接
  • 将 HC-SR04 超声波传感器的 VCC 接到 STM32 的 5V 电源,GND 接到地。
  • 将 HC-SR04 的 Trig 引脚连接到 STM32 的 GPIO 引脚(如 PA1),Echo 引脚连接到另一个 GPIO 引脚(如 PA2)。
  • 将 1602 LCD 的 SDA 和 SCL 引脚连接到 STM32 的 I2C 接口(如 PB6 和 PB7,适用于 I2C 接口的 LCD),或将控制引脚接到 STM32 的其他 GPIO 引脚(适用于并行接口)。
2. STM32CubeMX 配置
  • 打开 STM32CubeMX,选择你的开发板型号。
  • 配置系统时钟为 HSI,以确保 STM32 工作稳定。
  • 在 GPIO 配置中,将 Trig 和 Echo 引脚配置为输出和输入模式。
  • 如果使用 I2C 接口的 LCD,启用 I2C 外设,并配置相关引脚。
  • 生成代码,选择 Keil 或 STM32CubeIDE 作为工具链。
3. 编写主程序

在生成的项目基础上,编写超声波传感器的驱动代码,计算测量距离,并通过 LCD 显示结果。以下是一个基本的超声波测距代码示例:

#include "stm32f1xx_hal.h"
#include "lcd.h"// 定义超声波引脚
#define TRIG_PIN GPIO_PIN_1
#define TRIG_PORT GPIOA
#define ECHO_PIN GPIO_PIN_2
#define ECHO_PORT GPIOA// 超声波测距函数
uint32_t UltraSonic_ReadDistance(void)
{uint32_t local_time = 0;uint32_t distance = 0;// 发送触发信号HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);HAL_Delay(10); // 发送10us脉冲HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);// 等待 ECHO 引脚的上升沿while (HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_RESET);// 计时while (HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_SET){local_time++;HAL_Delay(1); // 每次延时 1 微秒}// 计算距离distance = (local_time * 0.034) / 2; // 声波在空气中的速度约为 340m/s,计算公式为时间*声速/2return distance;
}int main(void)
{HAL_Init();SystemClock_Config();// 初始化 GPIO 和 I2CMX_GPIO_Init();MX_I2C1_Init();// 初始化 LCD 显示屏LCD_Init();LCD_Clear();uint32_t distance = 0;while (1){// 读取距离distance = UltraSonic_ReadDistance();// 在 LCD 上显示距离LCD_SetCursor(0, 0);LCD_Print("Distance: ");LCD_SetCursor(1, 0);LCD_PrintNum(distance);LCD_Print(" cm");HAL_Delay(1000); // 每秒更新一次测量数据}
}
4. LCD 显示屏驱动代码

LCD 显示屏的初始化和显示功能可以通过以下代码实现:

#include "lcd.h"
#include "i2c.h"// 初始化 LCD
void LCD_Init(void)
{// LCD 初始化代码,具体依赖于 LCD 模块的型号// 使用 I2C 或并行接口进行初始化
}// 清空显示屏
void LCD_Clear(void)
{// 清屏命令
}// 在指定位置打印文本
void LCD_SetCursor(uint8_t row, uint8_t col)
{// 设置光标位置
}// 打印数字
void LCD_PrintNum(uint32_t num)
{char buffer[10];sprintf(buffer, "%ld", num);LCD_Print(buffer);
}// 打印字符串
void LCD_Print(char *str)
{while (*str){// 发送字符到 LCDstr++;}
}

⬇帮大家整理了单片机的资料

包括stm32的项目合集【源码+开发文档】

点击下方蓝字即可领取,感谢支持!⬇

点击领取更多嵌入式详细资料

问题讨论,stm32的资料领取可以私信!

 

5. 测距原理

超声波测距的原理是通过发射超声波,测量声波从发射到遇到障碍物反射回来的时间。根据声波在空气中的传播速度,可以通过公式计算出物体的距离:

距离=时间×声速2\text{距离} = \frac{\text{时间} \times \text{声速}}{2}距离=2时间×声速​

由于声速在空气中的传播速度约为 340 m/s,我们可以通过测量时间并应用上述公式来计算物体的距离。

常见问题与解决方法

1. 无法正确测量距离
  • 检查超声波传感器的连接是否正确,确保 Trig 和 Echo 引脚没有接反。
  • 确保测量环境没有过多干扰物,避免影响超声波的反射。
2. LCD 显示异常
  • 检查 LCD 的 I2C 地址是否正确,确认 I2C 通信正常。
  • 如果使用并行接口,检查数据线的连接是否可靠。
3. 测量结果不稳定
  • 尝试在测量前加入较长的延时,以确保超声波信号稳定。
  • 尽量减少信号干扰源,确保超声波能够正常传播。

结论

通过本项目,我们成功实现了基于 STM32 的超声波测距仪设计,展示了如何使用 STM32 与超声波传感器进行通信,并通过 LCD 显示测量结果。该系统应用简单而实用,可用于各类距离检测和测量场景。在实际开发中,你还可以扩展更多功能,如加入无线通信模块,实现远程测距等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440693.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术速递|Python in Visual Studio Code 2024年9月发布

排版:Alan Wang 我们很高兴地宣布将于 2024 年 9 月发布适用于 Visual Studio Code 的 Python 和 Jupyter 扩展! 此版本包括以下公告: Django 单元测试支持使用 Pylance 从 inlay 提示转到定义 如果您有兴趣,可以在我们的 Pyth…

提升 CI/CD 稳定性:Jenkins 开机自检与推送通知

简介:Jenkins 是一个广泛使用的开源自动化服务器,常用于持续集成和持续交付。在某些情况下,服务器重启可能导致 Jenkins 构建任务中断或失败。为了解决这个问题,可以使用一个自检服务,定期检查系统的启动时间&#xff…

算法题总结(十)——二叉树上

#二叉树的递归遍历 // 前序遍历递归LC144_二叉树的前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new ArrayList<Integer>(); //也可以把result 作为全局变量&#xff0c;只需要一个函数即可。…

Open3D实现点云数据的序列化与网络传输

转载自个人博客&#xff1a;Open3D实现点云数据的序列化与网络传输 在处理点云数据的时候&#xff0c;有时候需要实现点云数据的远程传输。当然可以利用传输文件的方法直接把点云数据序列化成数据流进行传输&#xff0c;但Open3D源码在实现RPC功能时就提供了一套序列化及传输的…

今日指数day8实战补充用户管理模块(下)

ps : 由于前端将userId封装为BigInt类型 , 导致有精度损失, 传入的userId不正确 , 部分功能无法正确实现 , 但是代码已经完善 1.4 更新用户角色信息接口说明 1&#xff09;原型效果 2&#xff09;接口说明 功能描述&#xff1a;更新用户角色信息 服务路径&#xff1a;/user/…

vue-scrollto实现页面组件锚点定位

文章目录 前言背景操作指南安装及配置步骤vue组件中使用 参考文章 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1a;Java后端、大数据…

php获取远程https内容时提示 PHP Warning: copy(): Unable to find the wrapper “https“ 解决方法

异常信息&#xff1a; php -r "copy(https://getcomposer.org/installer, composer-setup.php);" PHP Warning: copy(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in Command line code on line 1 P…

鸿蒙harmonyos next flutter混合开发之开发plugin(获取操作系统版本号)

创建Plugin为my_plugin flutter create --org com.example --templateplugin --platformsandroid,ios,ohos my_plugin 创建Application为my_application flutter create --org com.example my_application flutter_application引用flutter_plugin&#xff0c;在pubspec.yam…

万界星空科技MES数据集成平台

制造执行系统MES作为连接企业上层ERP系统和现场控制系统的桥梁&#xff0c;承担了实时数据采集、处理、分析和传递的重要任务。MES数据集成平台是一个集成各类数据源&#xff0c;将数据进行整合和统一管理的系统&#xff0c;通过提供标准化接口和协议&#xff0c;实现数据的无缝…

图像分割恢复方法

传统的图像分割方法主要依赖于图像的灰度值、纹理、颜色等特征&#xff0c;通过不同的算法将图像分割成多个区域。这些方法通常可以分为以下几类&#xff1a; 1.基于阈值的方法 2.基于边缘的方法 3.基于区域的方法 4.基于聚类的方法 下面详细介绍这些方法及其示例代码。 1. 基…

《黑神话:悟空》像素版 v0.1b [PC+安卓]

游戏简介 《黑神话&#xff1a;悟空》像素版是一款由火山哥哥与林学学LinkLin合作开发的游戏。这款游戏采用了像素化的艺术风格&#xff0c;巧妙地简化并再现了《黑神话&#xff1a;悟空》中的核心玩法和经典场景。游戏不仅成功复刻了原作中的战斗系统和角色动画&#xff0c;还…

解锁 Python 嵌套字典的奥秘:高效操作与实战应用指南

文章目录 前言&#x1f340;一、 什么是 Python 字典&#xff1f;1.1 字典的语法 &#x1f340;二、 字典的基本操作2.1 字典的创建2.2 访问字典中的值2.3 添加或修改键值对2.4 删除字典中的键值对 &#x1f340;三、 字典的遍历操作3.1 遍历字典的键3.2 遍历字典的值3.3 同时遍…

【springboot】使用代码生成器快速开发

接上一项目&#xff0c;使用mybatis-plus-generator实现简易代码文件生成 在fast-demo-web模块中的pom.xml中添加mybatis-plus-generator、freemarker和Lombok依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator&…

劳动与科技、艺术结合更好提高劳动教育意义

在中小学教育中&#xff0c;劳动教育是培养学生基本生活技能和劳动习惯的重要环节。但当代的劳动教育不在单纯的劳动&#xff0c;而是劳动技能的提升与学习&#xff0c;通过学习劳动技能与实践活动&#xff0c;强化劳动教育与其他课程的融合&#xff0c;学生深刻理解劳动的意义…

draw.io 设置默认字体及添加常用字体

需求描述 draw.io 是一个比较好的开源免费画图软件。但是其添加容器或者文本框时默认的字体是 Helvetica&#xff0c;一般的期刊、会议论文或者学位论文要求的英文字体是 Times New Roman&#xff0c;中文字体是 宋体&#xff0c;所以一般需要在文本字体选项里的下拉列表选择 …

【2024】前端学习笔记13-JavaScript修改网页样式

学习笔记 1.修改网页样式1.1.修改内联样式(`style`属性)1.2.使用`cssText`属性:2.修改样式类(`classList`属性)2.1.添加和移除类名2.2.切换类名(`toggle`方法)1.修改网页样式 1.1.修改内联样式(style属性) 直接修改元素的style属性: 可以通过获取元素对象,然后直…

代码随想录 | Day29 | 回溯算法:电话号码的字母组合组合总和

代码随想录 | Day29 | 回溯算法&#xff1a;电话号码的字母组合&&组合总和 关于这个章节&#xff0c;大家最好是对递归函数的理解要比较到位&#xff0c;听着b站视频课可能呢才舒服点&#xff0c;可以先去搜一搜关于递归函数的讲解&#xff0c;理解&#xff0c;再开始…

CSS入门

文章目录 CSS入门一、CSS概述1、概述2、CSS的作用3、初体验4、CSS基础语法4、HTML引入CSS 二、选择器 ⭐️⭐️⭐️1、基本选择器2、扩展选择器3、超链接选择器 三、样式权重问题1、权重计算规则2、权重示例3、具体示例4、 !important 四、CSS常用样式1、字体和文本属性2、背景…

2530 电力电子技术

1.晶闸管 视频链接&#xff1a;2.3半控型器件-晶闸管_哔哩哔哩_bilibili 可参考文章链接&#xff1a;电力电子技术笔记&#xff08;3&#xff09;——晶闸管_双晶体管模型正反馈-CSDN博客 半控型器件&#xff1a;门极只有在导通时有用&#xff0c;在关闭时没有用 2.Boost升压…

【C++】二叉搜索树+变身 = 红黑树

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言一、定义与性质二、红黑树节点的定义三、新增节点插入四、验证红黑树五、AVL树和红黑树比较 前言 本文仅适合了…