单片机:实现驱动超声波(附带源码)
单片机实现驱动超声波模块
超声波模块(如HC-SR04)广泛应用于距离测量、避障系统、自动驾驶等嵌入式项目中。它能够通过发射超声波信号并接收反射波来计算物体的距离。本文将介绍如何使用单片机(如51系列单片机)驱动超声波模块,进行距离测量。
1. 项目需求分析
目标:
- 超声波发送:通过控制超声波模块发射超声波。
- 超声波接收:接收超声波的反射波并测量反射时间。
- 距离计算:根据反射波的返回时间计算物体与超声波模块之间的距离。
- 数据输出:将测量得到的距离通过串口、LCD屏幕或LED显示器等方式输出。
功能需求:
- 发射超声波:通过触发超声波模块的Trig脚发射超声波。
- 接收回波:通过Echo脚检测超声波回波的到达时间。
- 距离计算:利用公式
距离 = 速度 × 时间 / 2
计算物体与传感器的距离。 - 显示:通过LCD屏、LED或者串口输出测量结果。
2. 硬件设计
2.1 单片机选择
可以选择具有较多I/O口的单片机,如51系列单片机,用于控制超声波模块和显示模块。
2.2 超声波模块(HC-SR04)
超声波模块HC-SR04具有两个主要引脚:
- Trig引脚:用于触发超声波的发射,发送一个高电平脉冲。
- Echo引脚:用于接收回波信号,返回一个脉冲宽度,表示超声波从发射到接收的时间。
2.3 显示模块
为了显示距离结果,可以选择:
- LCD显示屏:如1602 LCD,用于显示距离。
- 串口输出:通过UART接口将计算结果输出到PC或其他设备。
2.4 连接方式
- Trig引脚连接到单片机的一个GPIO口,用于触发超声波。
- Echo引脚连接到单片机的一个输入口,接收反射波信号。
- LCD或串口模块用于显示测量结果。
3. 软件设计
3.1 超声波模块控制
- 发送超声波:通过给Trig引脚发送一个持续10微秒的高电平脉冲,触发超声波发射。
- 接收回波:通过Echo引脚读取回波信号的高电平持续时间,得到信号传播的时间。
3.2 距离计算
假设声速为343米/秒(在常温下)。根据超声波的传播公式:
具体来说,回波时间是超声波从传感器到物体并返回的时间,因此除以2来得到物体与传感器之间的实际距离。
3.3 代码实现
下面是使用51单片机控制HC-SR04模块,测量距离并通过LCD显示的代码示例。
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>// 定义HC-SR04引脚
#define TRIG P1_0 // TRIG引脚连接到P1.0
#define ECHO P1_1 // ECHO引脚连接到P1.1// 定义LCD控制端口
#define LCD_DATA P2 // LCD数据口连接到P2口
#define LCD_CTRL P3 // LCD控制口连接到P3口
#define RS P3^0
#define RW P3^1
#define EN P3^2unsigned int time_us = 0; // 超声波返回时间(微秒)// 延时函数
void delay(unsigned int time) {unsigned int i, j;for(i = 0; i < time; i++) {for(j = 0; j < 120; j++);}
}// LCD控制函数:写命令
void lcd_write_cmd(unsigned char cmd) {LCD_DATA = cmd;RS = 0; // 选择命令寄存器RW = 0; // 选择写操作EN = 1; // 使能LCDdelay(5);EN = 0; // 关闭使能
}// LCD控制函数:写数据
void lcd_write_data(unsigned char data) {LCD_DATA = data;RS = 1; // 选择数据寄存器RW = 0; // 选择写操作EN = 1; // 使能LCDdelay(5);EN = 0; // 关闭使能
}// LCD初始化
void lcd_init() {lcd_write_cmd(0x38); // 设置显示模式lcd_write_cmd(0x0C); // 打开显示,光标不可见lcd_write_cmd(0x06); // 设置光标移位方向lcd_write_cmd(0x01); // 清屏delay(10);
}// LCD清屏
void lcd_clear() {lcd_write_cmd(0x01); // 清屏命令delay(10);
}// LCD显示字符串
void lcd_display_string(char* str) {while(*str) {lcd_write_data(*str);str++;}
}// 初始化HC-SR04模块
void ultrasonic_init() {TRIG = 0; // 初始化TRIG为低电平ECHO = 0; // 初始化ECHO为低电平
}// 获取超声波的回波时间
unsigned int get_ultrasonic_time() {unsigned int count = 0;// 发送一个10us的脉冲触发超声波TRIG = 1;delay(1); // 延时1微秒TRIG = 0;// 等待ECHO变为高电平,开始计时while(ECHO == 0);// 开始计数while(ECHO == 1) {count++;delay(1); // 每1微秒增加计数}return count;
}// 主程序
void main() {unsigned int distance;unsigned int time_in_us;float distance_cm;lcd_init(); // 初始化LCDultrasonic_init(); // 初始化超声波模块while(1) {// 获取回波时间time_in_us = get_ultrasonic_time();// 计算距离:声速343米/秒,1米=100厘米,1秒=1000000微秒distance_cm = (float)(time_in_us * 343) / 20000; // 距离 = (时间 * 声速) / 2// 显示距离lcd_clear();lcd_display_string("Distance:");lcd_write_data(' ');lcd_write_data((unsigned char)(distance_cm / 10) + '0'); // 显示十位lcd_write_data((unsigned char)(distance_cm % 10) + '0'); // 显示个位delay(500);}
}
4. 代码解析
-
超声波发送与接收:
- TRIG引脚:通过给TRIG引脚发送一个10微秒的高电平脉冲来触发超声波的发射。
- ECHO引脚:当超声波返回时,ECHO引脚会变为高电平,持续时间与回波时间成正比。我们通过计时检测这个高电平的持续时间。
-
距离计算:
- 使用公式
距离 = (时间 * 声速) / 2
来计算物体与超声波模块之间的距离。声速为343米/秒,单位转换后得出公式。
- 使用公式
-
LCD显示:
- LCD显示函数通过将计算出来的距离显示在LCD屏幕上。
- 每次测量时,LCD显示更新一次,展示当前距离。
-
超声波初始化:
ultrasonic_init()
函数用于初始化TRIG和ECHO引脚,确保在程序运行时它们的初始状态正确。
-
延时函数:
delay()
函数用于生成延时,避免在按键扫描或超声波回波检测时过快响应。
5. 总结
本项目使用单片机和超声波模块(如HC-SR04)实现了距离测量功能。通过TRIG和ECHO引脚控制超声波的发送与接收,计算回波的时间并转换为距离。结果可以通过LCD显示屏显示出来。此项目适用于简单的距离测量和避障系统,也可以扩展为更复杂的功能,如多点测量、物体追踪等。
扩展方向:
- 多点测量:使用多个超声波模块进行多点距离测量,形成完整的环境感知系统。
- 数据存储与处理:将测量数据存储并进行进一步分析,如将结果发送到上位机进行显示或处理。
- 障碍物检测与避障:将测量数据与其他传感器结合,形成自动避障系统。
此项目是一个典型的嵌入式应用,可以帮助开发者深入了解传感器控制、信号处理以及输出显示等基本技术。
相关文章:

单片机:实现驱动超声波(附带源码)
单片机实现驱动超声波模块 超声波模块(如HC-SR04)广泛应用于距离测量、避障系统、自动驾驶等嵌入式项目中。它能够通过发射超声波信号并接收反射波来计算物体的距离。本文将介绍如何使用单片机(如51系列单片机)驱动超声波模块&am…...
2025.01.15python商业数据分析top2
一、 导入项目 导入项目、准备项目数据 import pandas as pd# 文件路径为python文件位置下的相对路径dwxpd.read_excel("电蚊香套装市场近三年交易额.xlsx") fmfzpd.read_excel("防霉防蛀片市场近三年交易额.xlsx") msmcpd.read_excel("灭鼠杀虫剂市…...
信息系统项目管理-绩效考核
1.1.组织战略 组织的产品和服务战略的类型通常可以分为:技术密集型、()、目标动态型。 A市场导向型 B成本导向型 C人力密集型 D产品导向型 答案B 在组织的四项基本能力中,建立战略性奖励措施,根据员工对组织的贡献&am…...
【Linux】数据呈现
一、数据的输入与输出 1、标准文件描述符 Linux系统会将每个对象都当做文件来处理,包括输入和输出。它用文件描述符来标识每个文件对象。 文件描述符是一个非负整数,唯一会标识的是会话中打开的文件。每个进程一次最多可以打开9个文件描述符。bash sh…...
oracle 加字段和字段注释 sql
在 Oracle 数据库中,你可以使用 ALTER TABLE 语句来添加字段,并使用 COMMENT ON COLUMN 语句来添加字段注释。以下是一个示例: 假设你有一个名为 employees 的表,你想要添加一个名为 email 的字段,并为其添加注释。 …...

计算机网络压缩版
计算机网络到现在零零散散也算过了三遍,一些协议大概了解,但总是模模糊糊的印象,现在把自己的整体认识总结一下,(本来想去起名叫《看这一篇就够了》,但是发现网上好的文章太多了,还是看这篇吧&a…...
一文了解 gis 相关服务=》及前端地图服务相关总结
文章目录 概要OGC技术名词解释cesium 应用案例openlayers 中应用实例XYZ服务OSM服务WMS服务WMTS服务WFS服务 mapbox 应用实例矢量瓦片服务栅格瓦片服务WMS服务WFS服务 leaflet 中 地图服务实例加载OpenStreetMap瓦片图层加载自定义XYZ瓦片图层加载WMS服务图层加载WFS服务图层加…...
Brocade G610 配置
配置流程 zone创建–>cfg创建–>ip配置–>cfg启动并保存 查看端口信息 G610:admin> switchshow switchName: G610 switchType: 170.5 switchState: Online switchMode: Native switchRole: Principal switchDomain: 1 switchId: ff…...
DuetWebControl 开源项目常见问题解决方案
DuetWebControl 开源项目常见问题解决方案 DuetWebControl A completely new web interface for the Duet electronics [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/du/DuetWebControl 一、项目基础介绍 DuetWebControl 是一个为 RepRapFirmware 设计的完全响…...

亚信安全举办“判大势 悟思想 强实践”主题党日活动
为深入学习和贯彻党的二十届三中全会精神,近日,亚信安全举办了 “学习贯彻党的二十届三中全会精神——‘判大势 悟思想 强实践’党日活动”,并取得圆满成功。 本次活动特邀南京市委宣讲团成员、南京市委党校市情研究中心主任王辉龙教授出席。…...

Go怎么做性能优化工具篇之基准测试
一、什么是基准测试(Benchmark) 在 Go 中,基准测试是通过创建以 Benchmark 开头的函数,并接收一个 *testing.B 类型的参数来实现的。testing.B 提供了控制基准测试执行的接口,比如设置测试执行的次数、记录每次执行的…...

vue3国际化,主题切换
国际化 安装依赖 pnpm install i18n pnpm install vue-i18n main.js import { createApp } from vue import App from ./App.vue import { i18n } from /i18n/index; const app createApp(App) app.use(i18n); app.mount(#app) 根目录创建i18n文件夹,创建3个文件&…...

Linux Shell 脚本编程基础
打开kali,Xshell连接 一、 vim 1.sh 可利用 #! /bin/bash, #! /bin/dash ,#! bin/sh 这三种脚本解释器不论哪种,最终都是调用 dash 在1.sh内加入内容,尝试执行,./1.sh,但需要加权 或者,在不使用加权的情…...
vuex如何进行状态管理?
**Vuex:是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间数据共享。** (1) 如果是Vue2的环境,不能使用vuex4的版本,所以我们需要安装vuex3以下的版本安装。 创建项目:vue crea…...

嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
此项目是基于人脸识别的考勤系统开发,包括如下模块: 1、人脸识别考勤系统GUI界面设计,包括: (1)Qt环境(window环境/linux环境) ; (2)Qt工程创建分析; &am…...

通过阿里云 Milvus 与 PAI 搭建高效的检索增强对话系统
背景介绍 阿里云向量检索服务Milvus版(简称阿里云Milvus)是一款云上全托管服务,确保了了与开源Milvus的100%兼容性,并支持无缝迁移。在开源版本的基础上增强了可扩展性,能提供大规模 AI 向量数据的相似性检索服务。相…...

评估大语言模型在药物基因组学问答任务中的表现:PGxQA
这篇文献主要介绍了一个名为PGxQA的资源,用于评估大语言模型(LLM)在药物基因组学问答任务中的表现。 研究背景 药物基因组学(Pharmacogenomics, PGx)是精准医学中最有前景的领域之一,通过基因指导的治疗…...

在本地和远程转储域控制器哈希
更多内网知识课前往无问社区查看http://www.wwlib.cn 无凭据 - ntdsutil 如果您没有凭据,但有权访问 DC,则可以使用 lolbin ntdsutil.exe转储 ntds.dit: powershell "ntdsutil.exe ac i ntds ifm create full c:\temp q q" 我们…...

基于SSM+Vue的心理咨询问诊系统+LW示例参考
1.项目介绍 项目角色:管理员、患者(普通用户)、医师项目模块:医生管理、患者管理、科室管理、咨询管理、预约管理、急救知识、患者病历等测试环境:idea2024、tomcat8.5、maven3、jdk8、nodeV14.16.1、mysql5.7技术栈&…...

基于TMS320X281X/F28335的DSP入门到精通01_如何开始DSP的学习与开发
本部分开始基于《手把手教你学DSP—基于TMS320X281X》,《手把手教你DSP基于MS320F28335 》、《TMS320X281x DSP原理及C程序开发》,另外结合B站视频进行DSP嵌入式的学习。 《手把手教你学DSP—基于TMS320X281X》介绍的相对更为基础和详细,《手…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...