基于 HC_SR04的超声波测距数码管显示(智能小车超声波避障部分)

news2024/12/21 22:04:38

超声波测距模块HC-SR04
1、产品特色
①典型工作用电压:5V
②超小静态工作电流:小于 5mA
③感应角度(R3 电阻越大,增益越高,探测角度越大):
R3 电阻为 392,不大于 15 度
R3 电阻为 472, 不大于 30 度
④探测距离(R3 电阻可调节增益,即调节探测距离):
R3 电阻为 392 2cm-450cm
R3 电阻为 472 2cm-700cm
⑤高精度:可达 0.3cm
⑥盲区(2cm)超近
2、接口定义
Vcc
Trig(控制端)
Echo(接收端)
Gnd
控制口发一个 10US 以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开
定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距
离.如此不断的周期测,就可以达到你移动测量的值了。
1、原理
①采用 IO 触发测距,给至少10us 的高电平信号;
②模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
③有信号返回,通过 IO 输出一高电平,高电平持续的时间就是
④ 测试距离=(高电平时间*声速(340M/S))/2;
在这里插入图片描述

以上时序图表明你只需要提供一个10us 以上脉冲触发信号,该模块内部将发出8个40kHz周
期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的
距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公
式:us/58=厘米或者us/148-英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为
60ms 以上,以防止发射信号对回响信号的影响。

代码部分

`timescale 1ns / 1ps

module HC_SR04(
    input     wire          clk  ,
    input     wire          rst_n,
    input     wire          echo ,
    output    wire          trig ,
    output    wire  [3:0]   sel  ,
    output    wire  [7:0]   seg 
    );
parameter CUNT_MAX  =12_500_000;//00 ;//60ms=3_000_000
parameter CUNT_10US =600       ;//10us=500


// reg [ 1:0] temp;

// always @(posedge clk ) begin
//     temp[0] <=  echo;
//     temp[1] <= temp[0];
// end



reg [30:0] cunt  ;
reg [30:0] cunt_t;
wire [24:0] dis ;
reg        flag  ;

wire [13:0] data  ;

assign trig= flag;
assign dis=(cunt_t*20)/100/58;   //精度0.1厘米     /50_000_000*340     cunt_t*20*340/1000_000_000*100*1/2                                                          
assign data = (dis>=0 && dis < 9999)?dis[13:0] : 14'd9_999;

always @(posedge clk ) begin
    if(!rst_n)
    cunt<=0;
    else begin
        if(cunt==CUNT_MAX)
        cunt<=0;  
        else
        cunt<=cunt+1;
    end
end
always @(posedge clk ) begin
    if(!rst_n)
    flag<=0;
    else if(cunt>3_000_000&&cunt<6_000_000)
    flag<=1;
    else
    flag<=0;
end
//返回的周期数
always @(posedge clk ) begin
    if(!rst_n||cunt==CUNT_MAX)
    cunt_t<=0;
    else if(echo==1'b1)
    cunt_t<=cunt_t+1;
    else
    cunt_t<=cunt_t;
end


seg u_seg(
    /*input             */. clk  (clk  ),
    /*input             */. rst_n(rst_n),
    /*input  wire [13:0]*/. data (dis[13:0] ),
    /*output reg  [3:0] */. sel  (sel  ),
    /*output reg  [7:0] */. seg  (seg  )
    );



endmodule

数码管

`timescale 1ns / 1ps

module seg(
    input               clk  ,
    input               rst_n,
    input  wire [13:0]  data ,
    output reg  [3:0]   sel  ,///
    output reg  [7:0]   seg  
    );


parameter CNT_1S =50_000_000 ;
reg  [25:0]  ct   ;
reg  [30:0] data_t  ;
//
// always @(posedge clk ) begin
//   if(!rst_n)
//   data_t<=0;
//   else if(ct==50_000_00)
//   data_t<=data;
//   else
//   data_t<=data_t;
  
// end
//对1秒进行计数
always @(posedge clk  or  negedge rst_n) begin
  if(!rst_n)
    ct<=0;
  else if(ct==CNT_1S-1)
    ct<=0;
  else
    ct<=ct+1;
end
//产生flag信号
reg  flag;
always @(posedge clk  or  negedge rst_n) begin
   if(!rst_n)
    flag<=0;
  else if(ct==CNT_1S-2) //0.5ms
    flag<=1;
  else
    flag<=0; 
end
//进行一个从右到左的移位
//产生一个计数器
reg [3:0] ct_sel;
always @(posedge clk  or  negedge rst_n) begin
  if(!rst_n)
    ct_sel<=0;
  else if(ct_sel==4)
    ct_sel<=0;
  else if(ct%25000==1)  //可加2个00 效果更明显
    ct_sel<=ct_sel+1;
  else
    ct_sel<=ct_sel;

end

always @(posedge clk  or  negedge rst_n) begin
  if(!rst_n)
    sel<=4'b0000;
  else case (ct_sel)
      0:sel<=4'b0001;
      1:sel<=4'b0010;
      2:sel<=4'b0100;
      3:sel<=4'b1000;
     default: sel<=4'b0000;//输入值不能改 比如ct_sel<=4'b0000 会报错
  endcase
end
  //译码
reg [13:0] num;
always @(posedge clk  or  negedge rst_n) begin
  if(!rst_n)
    num<=0;
  else
    case (ct_sel)
    0:num<=data%10      ;
    1:num<=data/10%10   ;
    2:num<=data/100%10  ;
    3:num<=data/1000%10 ;
    default: num<=num ;
    endcase
end
always @(posedge clk  or  negedge rst_n) begin
  if(!rst_n)
    seg<=8'b1100_0000;
  else
   case(num)// hgfe dcba  0有效
   0:begin 
    if(ct_sel==1)
    seg<=  8'h40;//b0100_0000;
    else
    seg<=  8'hc0;//b1100_0000;
   end
   1:begin
    if(ct_sel==1)
    seg<=  8'h79;//b0111_1001;
    else
    seg<=  8'hf9;//b1111_1001;
   end
   2:begin
    if(ct_sel==1)
    seg<=  8'h24;//b0010_0100;
    else
    seg<=  8'ha4;//b1010_0100;
   end          
   3:begin
    if(ct_sel==1)
    seg<=  8'h30;//b0011_0000;
    else
    seg<=  8'hb0;//b1011_0000
   end
   4:begin
    if(ct_sel==1)
    seg<=  8'h19;//b0001_1001;
    else
    seg<=  8'h99;//b1001_1001;
   end
   5:begin
    if(ct_sel==1)
    seg<=  8'h12;//b0001_0010;
    else
    seg<=  8'h92;//b1001_0010;
   end
   6:begin
    if(ct_sel==1)
    seg<=  8'h2;//b0000_0010;
    else
    seg<=  8'h82;//b1000_0010;
   end
   7:begin
    if(ct_sel==1)
    seg<=  8'h78;//b0111_1000;
    else
    seg<=  8'hf8;//b1111_1000;
   end
   8:begin
    if(ct_sel==1)
    seg<=  8'h0;//b0000_0000;
    else
    seg<=  8'h80;//b1000_0000;
    end
   9:begin
    if(ct_sel==1)
   seg<=  8'h10;//b0001_0000; 
   else
   seg<=  8'h90;//b1001_0000;
   end
    default:
             seg<=seg;
   endcase      
    end

endmodule

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

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

相关文章

(OCPP服务器)SteVe编译搭建全过程

注意&#xff1a;建议使用3.6.0&#xff0c;我升级到3.7.1&#xff0c;并没有多什么新功能&#xff0c;反而电表的实时数据只能看到累计电能了&#xff0c;我回退了就正常&#xff0c;数据库是兼容的&#xff0c;java版本换位java11&#xff0c;其他不变就好 背景&#xff1a;…

搭建Tomcat(四)---Servlet容器

目录 引入 Servlet容器 一、优化MyTomcat ①先将MyTomcat的main函数搬过来&#xff1a; ②将getClass()函数搬过来 ③创建容器 ④连接ServletConfigMapping和MyTomcat 连接&#xff1a; ⑤完整的ServletConfigMapping和MyTomcat方法&#xff1a; a.ServletConfigMappin…

Iris简单实现Go web服务器

package mainimport ("github.com/kataras/iris" )func main() {app : iris.New() // 实例一个iris对象//配置路由app.Get("/", func(ctx iris.Context) {ctx.WriteString("Hello Iris")})app.Get("/aa", func(ctx iris.Context) {ct…

MySql 中的解决某列中多个字段查询是否存在指定某个值, FIND_IN_SET 用法。

简言&#xff1a;今天公司数据库里面有个列是多个数据拼接而成的比如&#xff1a;**“,131113,749932833,749932825,749932826,749932827,749932828,749932829,”**想要通过sql 查找749932833值的列&#xff0c;很多同学第一想到的就是like 模糊匹配&#xff0c;模糊匹配不能保…

Git实用指南(精简版)

目录 读者须知 Git是什么 Git的原理 文件在Git中的几种状态 快速上手 结尾 读者须知 本文章适合从未接触过git,或者需要深度学习Git的用户进行阅读. 文末有详细的文档,读者可以前往Github下载阅读!!三克油 Git是什么 简单来说,Git是一个代码备份工具,你可以使用指令对…

jmeter 接口性能测试 学习笔记

目录 说明工具准备工具配置jmeter 界面汉化配置汉化步骤汉化结果图 案例1&#xff1a;测试接口接口准备线程组添加线程组配置线程组值线程数&#xff08;Number of Threads&#xff09;Ramp-Up 时间&#xff08;Ramp-Up Period&#xff09;循环次数&#xff08;Loop Count&…

小红书关键词搜索采集 | AI改写 | 无水印下载 | 多维表格 | 采集同步飞书

小红书关键词搜索采集 | AI改写 | 无水印下载 | 多维表格 | 采集同步飞书 一、下载影刀&#xff1a; https://www.winrobot360.com/share/activity?inviteUserUuid595634970300317698 二、加入应用市场 https://www.yingdao.com/share/accede/?inviteKeyb2d3f22a-fd6c-4a…

Unbuntu下怎么生成SSL自签证书?

环境&#xff1a; WSL2 Unbuntu 22.04 问题描述&#xff1a; Unbuntu下怎么生成SSL自签证书&#xff1f; 解决方案&#xff1a; 生成自签名SSL证书可以使用OpenSSL工具&#xff0c;这是一个广泛使用的命令行工具&#xff0c;用于创建和管理SSL/TLS证书。以下是生成自签名…

通过阿里云 Milvus 与 PAI 搭建高效的检索增强对话系统

背景介绍 阿里云向量检索服务Milvus版&#xff08;简称阿里云Milvus&#xff09;是一款云上全托管服务&#xff0c;确保了了与开源Milvus的100%兼容性&#xff0c;并支持无缝迁移。在开源版本的基础上增强了可扩展性&#xff0c;能提供大规模 AI 向量数据的相似性检索服务。相…

打靶记录22——Tomato

靶机&#xff1a; https://download.vulnhub.com/tomato/Tomato.ova 难度&#xff1a; 低 目标&#xff1a; 获得 Root 权限 Flag 攻击方法&#xff1a; 主机发现端口扫描信息收集路径爬取源码分析文件包含写入日志 /var/log/auth.log内核漏洞枚举 les.sh本地提权 主机…

三维引擎cesium学习经验

三维引擎cesium学习经验&#xff1a; 1、初始化viewer对象 2、对entity的操作&#xff1a;添加&#xff0c;隐藏&#xff0c;修改&#xff0c;去除&#xff0c;居中显示 3、去除掉entity的双击事件 4、获取当前视角高度 5、获取经纬度在屏幕上的位置 6、获取三维场景屏幕中心点…

【蓝桥杯】43699-四平方和

四平方和 题目描述 四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a; 每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去&#xff0c;就正好可以表示为 4 个数的平方和。 比如&#xff1a; 502021222 712121222; 对于一个给定的正整数&#xff0c;可…

十、从0开始卷出一个新项目之瑞萨RZN2L rzn-fsp v2.0.0 Release Notes

目录 一、概述 二、Github地址 三、 Features Added 3.1 Developer Assistance feature support added. 3.2 Multiplex interrupts support added. 四、Bug Fixes and Improvements 4.1 Added a noncache section for user applications. 4.2 Unified case of asm inst…

VM16+解压版CentOS7安装和环境配置教程(2024年12月20日)

VM16解压版CentOS7安装和环境配置教程-2024年12月20日 一、下载安装包二、vm安装三、解压版CentOS7安装四、CentOS设置静态IP 因为很多同学觉得配置CentOS7好麻烦&#xff0c;我特地提供了一个已经配置好的现成镜像&#xff0c;来简化操作本篇来记录过程。 如果你在看到这篇文章…

PC寄存器(Program Counter Register)jvm

在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色。以下是对JVM中PC寄存器的详细解释: 一、定义与功能 定义: JVM中的PC寄存器,也被称为程序计数器,是对物理PC寄存器的一种抽象模拟。它用于存储当前线程所执行的字节码指令的地址,即指…

学习threejs,scene.overrideMaterial全局材质效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.2 ☘️THREE.Scene 场景1.2 ☘️…

【原生js案例】前端封装ajax请求及node连接 MySQL获取真实数据

上篇文章&#xff0c;我们封装了ajax方法来请求后端数据&#xff0c;这篇文章将介绍如何使用 Node.js 来连接 MySQL&#xff0c;并对数据库进行操作。 实现效果 代码实现 后端接口处理 const express require("express"); const connection require("../da…

FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.2,RTP协议-RTP协议概述,协议详情

前提: 为什么要学习 RTP&#xff08;Real-time Transport Protocol&#xff09;重点 简介&#xff1a;RTP是一个实时传输媒体数据的协议&#xff0c;通常与RTSP一起使用。它负责在网络上传输音视频数据。特点&#xff1a;RTP通过UDP或TCP传输媒体数据&#xff0c;提供时间戳和序…

Chapter 18 CMOS Processing Technology

Chapter 18 CMOS Processing Technology 这一章介绍CMOS制造工艺, 介绍wafer制作, 光刻, 氧化, 离子注入, 沉淀(deposition)和刻蚀. 然后介绍MOS管制作流程, 最后介绍被动器件和互连接. 18.1 General Considerations sheet resistance为方块电阻. R ρL/(W t), 方块电阻定…

服务器数据恢复—V7000存储中多块磁盘出现故障导致业务中断的数据恢复案例

服务器存储数据恢复环境&#xff1a; 一台V7000存储上共12块SAS机械硬盘&#xff08;其中1块是热备盘&#xff09;&#xff0c;组建了2组Mdisk&#xff0c;创建了一个pool。挂载在小型机上作为逻辑盘使用&#xff0c;小型机上安装的AIXSybase。 服务器存储故障&#xff1a; V7…