当前位置: 首页 > news >正文

STM32 超声波模块(HC-SR04)

HC-SR04介绍
  1. 典型工作电压:5v        (如果你的超声波模块没有工作,可以看一下是不是电压不够)
  2. 超小静态工作电流:<2mA 
  3.  感应角度:<15°           (超声波模块,是一个范围式的探索,所以在做测速等一些适合直线传播的项目的时候,不建议使用超声波模块)
  4. 探测距离:2cm-400cm
  5. 高精度:可以达到0.3cm
  6. 盲区:2cm              (当物体和超声波模块的距离小于2cm,超声波模块失效)
工作原理
  1. 采用IO触发测距,给至少10us的高电平。
  2. 模块自动发送8个4kHz的方波,自动检测是否有信号返回。
  3. 有信号返回,通过IO输出一高电平,高电平的持续时间就是超声波从发射到返回的时间

测试距离=(高电平时间*声速)/2

因为声音会来回两段,所以要除以二,声速我们一般取340m/s

接口定义

Vcc,Trig(控制端),Echo(接收端),GND

        向Trig发送10us以上的高电平,就可以在Echo等待高电平输出,一有输出就可以打开定时器计时,当Echo变为低电平时,就可以读定时器的值,此时就为此次测距的时间,就可以算出距离,不断周期性的测量,就可以达到你移动测量的值。

思路
  1. IO输出=》Trig,IO输入《=Echo
  2. 给Trig管脚一个>10us的高电平(启动)
  3. 启动后,Echo开启计时器计数,等待检验,进入while(Echo==1),当Echo不等于高电平的啥时候结束while,关掉计时器。
  4. 设开启定时器时间为T1,关闭定时器时间为T2,所得时间T即等于T2-T1,所以测距距离即为(T2-T1)*340/2
代码
配置Echo和Trig
void Echo_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void Trig_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);
}	
然后配置TIM2
void TIM2_Count_Configuration(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TIM_TimeBaseStructure.TIM_Period = 0xFFFF;  TIM_TimeBaseStructure.TIM_Prescaler = 71;  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_Cmd(TIM2, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, DISABLE);
}
在define几个等下用到的函数
#define TRIG_H GPIO_WriteBit(GPIOA,GPIO_Pin_9,Bit_SET)
#define TRIG_L GPIO_WriteBit(GPIOA,GPIO_Pin_9,Bit_RESET)#define ECHO GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)
main
int main(void)
{unsigned int time = 0;float distance = 0.00;void Echo_Configuration();void Trig_Configuration();void TIM2_Count_Configuration();RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);while(1){TIM_Cmd(TIM2,ENABLE);TRIG_H;Delay_us(15);TRIG_L;while(ECHO == 0);TIM_SetCounter(TIM2,0);while(ECHO == 1);TIM_Cmd(TIM2,DISABLE);time = TIM_GetCounter(TIM2);distance = time * 0.017;printf("Distance = %.2fcm\n", distance);Delay_us(1000000);}
}
  1. 配置Echo,Trig和TIM2,使能RCC_APB1Periph_TIM2
  2. TIM_Cmd(TIM2,ENABLE)      使能TIM2
  3. TRIG_H 给TRIG高电平,等待15us,TRIG_L给TRIG低电平
  4. while(ECHO==0)     如果ECHO为低电平,就复位TIM2为0
  5. while(ECHO==1)     如果ECHO为高电平,TIM_Cmd(TIM2,DISABLE);关闭TIM2
  6. time = TIM_GetCounter(TIM2);记录时间为time
  7. 计算距离distance = time * 0.017;
http://www.lryc.cn/news/250125.html

相关文章:

  • ELK+Filebeat
  • MySql之锁表、锁行解决方案
  • 2023年第十六届山东省职业院校技能大赛中职组“网络安全”赛项竞赛正式试题
  • JAVA 整合 AWS S3(Amazon Simple Storage Service)文件上传,分片上传,删除,下载
  • 记录:Unity脚本的编写9.0
  • 共享单车停放(简单的struct结构运用)
  • 【Java8系列07】Java8日期处理
  • 为什么做CSGO搬砖的不直接去炒股呢?
  • 12月01日,每日信息差//阿里国际发布3款AI设计生态工具//美团买菜升级为“小象超市”//外国人永居证换新、6国游客免签来华
  • ChatGPT探索:提示工程详解—程序员效率提升必备技能【文末送书】
  • Pytest做性能测试?
  • Swagger各版本访问地址
  • docker-compose;私有镜像仓库harbor搭建;镜像推送到私有仓库harbor
  • OpenTSDB(CVE-202035476)漏洞复现及利用
  • Maven无法拉取依赖/构建失败操作步骤(基本都能解决)
  • 【数据库】数据库并发控制的目标,可串行化序列的分析,并发控制调度器模型
  • 带头结点的双向循环链表
  • 2023年11月下旬大模型新动向集锦
  • 有IP没有域名可以申请证书吗?
  • 【软件推荐】卸载360软件geek;护眼软件flux;
  • Module build failed: Error: ENOENT: no such file or directory
  • Postgresql BatchInsert唯一键冲突及解决
  • 腾讯云AMD服务器标准型SA5实例AMD EPYC Bergamo处理器
  • 力扣 --- 加油站
  • C++基础 -25- 动态多态
  • 数据库-MySQL之数据库必知必会17-21章
  • mysql主从复制-redis集群扩容缩容、缓存优化(缓存更新策略、穿透,击穿,雪崩)、mysql主从搭建、django实现读写分离
  • docker部署kerberos,群晖nas中nfs开启kerberos校验
  • 【前端】数据行点击选择
  • 网络安全技术