单片机:实现驱动超声波(附带源码)

news2024/12/24 11:00:58

单片机实现驱动超声波模块

超声波模块(如HC-SR04)广泛应用于距离测量、避障系统、自动驾驶等嵌入式项目中。它能够通过发射超声波信号并接收反射波来计算物体的距离。本文将介绍如何使用单片机(如51系列单片机)驱动超声波模块,进行距离测量。

1. 项目需求分析

目标:
  1. 超声波发送:通过控制超声波模块发射超声波。
  2. 超声波接收:接收超声波的反射波并测量反射时间。
  3. 距离计算:根据反射波的返回时间计算物体与超声波模块之间的距离。
  4. 数据输出:将测量得到的距离通过串口、LCD屏幕或LED显示器等方式输出。
功能需求:
  1. 发射超声波:通过触发超声波模块的Trig脚发射超声波。
  2. 接收回波:通过Echo脚检测超声波回波的到达时间。
  3. 距离计算:利用公式 距离 = 速度 × 时间 / 2 计算物体与传感器的距离。
  4. 显示:通过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 超声波模块控制
  1. 发送超声波:通过给Trig引脚发送一个持续10微秒的高电平脉冲,触发超声波发射。
  2. 接收回波:通过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^2

unsigned 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;    // 使能LCD
    delay(5);
    EN = 0;    // 关闭使能
}

// LCD控制函数:写数据
void lcd_write_data(unsigned char data) {
    LCD_DATA = data;
    RS = 1;    // 选择数据寄存器
    RW = 0;    // 选择写操作
    EN = 1;    // 使能LCD
    delay(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();  // 初始化LCD
    ultrasonic_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. 代码解析

  1. 超声波发送与接收

    • TRIG引脚:通过给TRIG引脚发送一个10微秒的高电平脉冲来触发超声波的发射。
    • ECHO引脚:当超声波返回时,ECHO引脚会变为高电平,持续时间与回波时间成正比。我们通过计时检测这个高电平的持续时间。
  2. 距离计算

    • 使用公式 距离 = (时间 * 声速) / 2 来计算物体与超声波模块之间的距离。声速为343米/秒,单位转换后得出公式。
  3. LCD显示

    • LCD显示函数通过将计算出来的距离显示在LCD屏幕上。
    • 每次测量时,LCD显示更新一次,展示当前距离。
  4. 超声波初始化

    • ultrasonic_init() 函数用于初始化TRIG和ECHO引脚,确保在程序运行时它们的初始状态正确。
  5. 延时函数

    • delay() 函数用于生成延时,避免在按键扫描或超声波回波检测时过快响应。

5. 总结

本项目使用单片机和超声波模块(如HC-SR04)实现了距离测量功能。通过TRIG和ECHO引脚控制超声波的发送与接收,计算回波的时间并转换为距离。结果可以通过LCD显示屏显示出来。此项目适用于简单的距离测量和避障系统,也可以扩展为更复杂的功能,如多点测量、物体追踪等。

扩展方向:

  1. 多点测量:使用多个超声波模块进行多点距离测量,形成完整的环境感知系统。
  2. 数据存储与处理:将测量数据存储并进行进一步分析,如将结果发送到上位机进行显示或处理。
  3. 障碍物检测与避障:将测量数据与其他传感器结合,形成自动避障系统。

此项目是一个典型的嵌入式应用,可以帮助开发者深入了解传感器控制、信号处理以及输出显示等基本技术。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

封装(2)

大家好&#xff0c;今天我们来介绍一下包的概念&#xff0c;知道包的作用可以更好的面对今后的开发&#xff0c;那么我们就来看看包是什么东西吧。 6.3封装扩展之包 6.3.1包的概念 在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组…

重温设计模式--命令模式

文章目录 命令模式的详细介绍C 代码示例C代码示例2 命令模式的详细介绍 定义与概念 命令模式属于行为型设计模式&#xff0c;它旨在将一个请求封装成一个对象&#xff0c;从而让你可以用不同的请求对客户端进行参数化&#xff0c;将请求的发送者和接收者解耦&#xff0c;并且能…

基于STM32U575RIT6的智能除湿器

项目说明 除湿器原理 知识点 GPIO、定时器、中断、ADC、LCD屏幕、SHT20、SPI、IIC、UART 功能概述 模块功能LCD屏幕显示温湿度&#xff0c;风机开关情况&#xff0c;制冷 开关情况&#xff0c;加热片开关情况&#xff0c;温 湿度上下阈值&#xff0c;设备ID&#xff0c;电…

【电商搜索】CRM: 具有可控条件的检索模型

【电商搜索】CRM: 具有可控条件的检索模型 目录 文章目录 【电商搜索】CRM: 具有可控条件的检索模型目录文章信息摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果&#xff08;包含重要数据与结论&#xff09;相关工作后续优化方向 后记 https://arxiv.org/pdf/2412.…

【python自动化六】UI自动化基础-selenium的使用

selenium是目前用得比较多的UI自动化测试框架&#xff0c;支持java&#xff0c;python等多种语言&#xff0c;目前我们就选用selenium来做UI自动化。 1.selenium安装 安装命令 pip install selenium2.selenium的简单使用 本文以chrome浏览器为例&#xff0c;配套selenium中c…

Sigrity Optimize PI CapGen仿真教程文件路径

为了方便读者能够快速上手和学会Sigrity Optimize PI和 Deacap Generate 的功能&#xff0c;将Sigrity Optimize PI CapGen仿真教程专栏所有文章对应的实例文件上传至以下路径 https://download.csdn.net/download/weixin_54787054/90171471?spm1001.2014.3001.5503

免费线上签字小程序,开启便捷电子签名

虽如今数字化飞速发展的时代&#xff0c;但线上签名小程序的开发制作却并非易事。需要攻克诸多技术难题&#xff0c;例如确保签名的真实性与唯一性&#xff0c;防止签名被伪造或篡改。 要精准地捕捉用户手写签名的笔迹特征&#xff0c;无论是笔画的粗细、轻重&#xff0c;还是…

02、服务器的分类和开发项目流程

硬件介绍 1、服务器分类2.开发流程 1、服务器分类 1.1 服务器分类 1u服务器&#xff08;u表示服务器的厚度&#xff09; 1U4.45cm&#xff1b; 4u服务器&#xff08;u表示服务器的厚度&#xff09; &#xff0c; 服务器有两个电源模块&#xff0c;接在不同的电源&#xff0c;…

canvas绘制仪表盘刻度盘

canvas画布可以实现在网页上绘制图形的方法&#xff0c;比如图表、图片处理、动画、游戏等。今天我们在vue模板下用canvas实现仪表盘的绘制。 对canvas不熟悉的同学可以先了解下canvas的API文档&#xff1a;canvas API中文网 - Canvas API中文文档首页地图 一、创建模板&#…

搭建Alist(Windows系统环境下的)并挂载阿里云盘open映射到公网

文章目录 前言1. 使用Docker本地部署Alist1.1 本地部署 Alist1.2 访问并设置Alist1.3 在管理界面添加存储 2. 安装cpolar内网穿透 前言 本文将讲解如何在 Windows 系统中借助 Docker 部署 Alist 这一强大的全平台网盘工具&#xff0c;并结合 cpolar 内网穿透&#xff0c;实现随…

【QT常用技术讲解】发送POST包(两种方式:阻塞方式及非阻塞方式)

前言 http/https(应用层)协议是广泛使用的网络通信协议。在很多与第三方API对接的场景中&#xff0c;通常是通过http/https协议完成&#xff0c;比如API对接时&#xff0c;通常要通过POST包获取access_token进行鉴权&#xff0c;然后再进行数据交互&#xff08;本篇也包含有对接…

【电商搜索】文档的信息论生成聚类

【电商搜索】文档的信息论生成聚类 目录 文章目录 【电商搜索】文档的信息论生成聚类目录文章信息概览研究背景技术挑战如何破局技术应用主要相关工作与参考文献后续优化方向 后记 文章信息 https://arxiv.org/pdf/2412.13534 概览 本文提出了一种基于信息论的生成聚类&#…

【数据结构与算法】排序算法(下)——计数排序与排序总结

写在前面 书接上文&#xff1a;【数据结构与算法】排序算法(中)——交换排序之快速排序 文章主要讲解计数排序的细节与分析源码。之后进行四大排序的总结。 文章目录 写在前面一、计数排序(非比较排序)代码的实现&#xff1a; 二、排序总结 2.1、稳定性 3.2、排序算法复杂度及…

Unity全局雾效

1、全局雾效是什么 全局雾效&#xff08;Global Fog&#xff09;是一种视觉效果&#xff0c;用于在3D场景中模拟大气中的雾气对远处物体的遮挡 它通过在场景中加入雾的效果&#xff0c;使得距离摄像机较远的物体看起来逐渐被雾气覆盖&#xff0c;从而创造出一种朦胧、模糊的视…

Kafka Streams 在监控场景的应用与实践

作者&#xff1a;来自 vivo 互联网服务器团队- Pang Haiyun 介绍 Kafka Streams 的原理架构&#xff0c;常见配置以及在监控场景的应用。 一、背景 在当今大数据时代&#xff0c;实时数据处理变得越来越重要&#xff0c;而监控数据的实时性和可靠性是监控能力建设最重要的一环…

数据分析思维(五):分析方法——假设检验分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python&#xff0c;更重要的是数据分析思维。没有数据分析思维和业务知识&#xff0c;就算拿到一堆数据&#xff0c;也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》&#xff0c;本文内容就是提取…

解读DiffusionNER: Boundary Diffusion for Named Entity Recognition

content 摘要1. 图1图21. 上方&#xff1a;扩散过程与实体边界2. 下方&#xff1a;网络结构&#xff08;Sentence Encoder Entity Decoder&#xff09;3. 关键思想小结 摘要 主要内容分为四个部分&#xff1a; 模型定位与基本原理&#xff1a; 提出了DiffusionNER模型将命名…

【QSS样式表 - ⑥】:QPushButton控件样式

文章目录 QPushBUtton控件样式QSS示例 QPushBUtton控件样式 常用子控件 常用伪状态 QSS示例 代码&#xff1a; QPushButton {background-color: #99B5D1;color: white;font-weigth: bold;border-radius: 20px; }QPushButton:hover {background-color: red; }QPushButton:p…

数字经济下的 AR 眼镜

目录 1. &#x1f4c2; AR 眼镜发展历史 1.1 AR 眼镜相关概念 1.2 市面主流 XR 眼镜 1.3 AR 眼镜大事记 1.4 国内外 XR 眼镜 1.5 国内 AR 眼镜四小龙 2. &#x1f531; 关键技术 2.1 AR 眼镜近眼显示原理 2.2 AR 眼镜关键技术 2.3 AR 眼镜技术难点 3. &#x1f4a…

smb和nfs双栈协议共享目录

1 简介 NFS和SAMBA协议都是文件共享&#xff0c;Linux客户端常用于NFS协议访问远程共享目录&#xff0c;Windows客户端常用于SAMBA协议访问远程共享目录。 2 环境 合计使用三台服务器&#xff0c;服务器都位于同一个子网&#xff08;10.0.0.0/19&#xff09;、同一个安全组…