一、简介
1. c-sr04超声波模块是一种常用的测距模块,其通过发射超声波并接收其反射信号来实现测距功能。因其成本低、精度高、使用简便等特点,被广泛应用于以下场景:
(1)避障机器人:hc-sr04超声波模块可以用于避障机器人的距离测量,通过检测障碍物与机器人的距离,实现避障控制。
(2)智能家居:hc-sr04超声波模块可用于智能家居中的人体检测和距离测量。例如,在门口安装超声波模块,可以检测人的接近并触发开门动作,或者用于室内的距离测量和触发自动照明等。
2. 本实验用到了cw32f030c8t6小蓝板、0.96寸oled显示屏、hc-sr04超声波模块及keil5开发环境。
二、超声波模块测距的使用方法
使用流程 连接电源 将vcc引脚连接到+5v,gnd引脚连接到gnd。
连接触发引脚
将trig引脚连接到单片机的数字输出引脚。
连接回波引脚
将echo引脚连接到单片机的数字输入引脚。
发送信号
通过向trig引脚发送一个至少10微秒的高电平触发信号来启动测距过程
接收信号
模块发送触发信号后,自动发射超声波,并等待接收反射信号。当接收到反射信号时,echo引脚会输出一个高电平信号,持续时间与超声波的往返时间成正比。
计算距离
通过测量echo引脚输出高电平信号的持续时间,可以计算得到距离,一般使用以下公式计算:
距离 = 高电平持续时间 × 声波在空气中传播的速度 / 2。
重复测量
根据需要可定时测量距离,以实现连续的距离监测。
需要注意的是,hc-sr04超声波模块的测距精度受到多种因素的影响,如温度、超声波传播介质等。在使用过程中,需要结合具体的应用场景和需求进行参数调整和校准,以获得准确的距离测量结果。
三、核心代码
hc_sr04.c:#include hc_sr04.hextern unsigned int time;void hc_gpio_init(void) { __rcc_gpiob_clk_enable(); gpio_inittypedef gpio_initstruct; gpio_initstruct.it=gpio_it_none; gpio_initstruct.mode=gpio_mode_input_pulldown;//下拉输入 gpio_initstruct.pins=gpio_pin_8; //echo gpio_init(cw_gpiob,&gpio_initstruct); gpio_initstruct.speed=gpio_speed_high; gpio_initstruct.mode=gpio_mode_output_pp; //推挽输出 gpio_initstruct.pins=gpio_pin_9; //trig gpio_init(cw_gpiob,&gpio_initstruct); pb09_setlow(); //trig拉低,为输出脉冲触发信号做准备}unsigned int measure_distance(void) //测距{ unsigned int distance=0; settrig(); //10us的脉冲触发信号 delay_us(10); resettrig(); while(readecho()==0); //等待echo输出高电平 time=0; //开始记录回波信号脉宽 while(readecho()==1); //等待echo输出低电平 distance=time*1.7;//根据声速和时间计算距离,即distance=time*340/2/100 /* 关于分辨力(mm): 定时器每次对time加1是10us,10us=0.01ms,340m/s=340mm/ms 计算距离时,最小分辨力为:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm) 小于模块标准精度3mm,故测距结果十分精准 */ return distance; //返回距离,单位mm}main.c:#include hc_sr04.hextern unsigned int time;void hc_gpio_init(void) { __rcc_gpiob_clk_enable(); gpio_inittypedef gpio_initstruct; gpio_initstruct.it=gpio_it_none; gpio_initstruct.mode=gpio_mode_input_pulldown;//下拉输入 gpio_initstruct.pins=gpio_pin_8; //echo gpio_init(cw_gpiob,&gpio_initstruct); gpio_initstruct.speed=gpio_speed_high; gpio_initstruct.mode=gpio_mode_output_pp; //推挽输出 gpio_initstruct.pins=gpio_pin_9; //trig gpio_init(cw_gpiob,&gpio_initstruct); pb09_setlow(); //trig拉低,为输出脉冲触发信号做准备}unsigned int measure_distance(void) //测距{ unsigned int distance=0; settrig(); //10us的脉冲触发信号 delay_us(10); resettrig(); while(readecho()==0); //等待echo输出高电平 time=0; //开始记录回波信号脉宽 while(readecho()==1); //等待echo输出低电平 distance=time*1.7;//根据声速和时间计算距离,即distance=time*340/2/100 /* 关于分辨力(mm): 定时器每次对time加1是10us,10us=0.01ms,340m/s=340mm/ms 计算距离时,最小分辨力为:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm) 小于模块标准精度3mm,故测距结果十分精准 */ return distance; //返回距离,单位mm}
STM32是什么
蓝牙冒充攻击(BIAS)威胁数十亿设备
瑞萨电子推符合PCIe Gen6时钟缓冲器和多路复用器
针对iPhone12信号问题,苹果给出三种解决办法
常用集成电路型号及管脚引脚功能排列图
基于CW32的超声波模块的应用
SiP封装成为更多应用和市场的首选封装选项
谁能主宰车载语音市场,SDK和OS的商业战争一触即发
三元锂电池的分类及应用
AutoAI 2023第六届无人驾驶及智能驾舱中国峰会5月召开!
高频机的结构原理与应力状态
使用Virtual Eval工具了解AD7124-4/8的时序性能
小米6真机谍照曝光:这双摄的改变逆天了
荣耀手机微信公众号帐号迁移,由“华为终端”变为“荣耀终端”
5G能为我们做些什么,我们将如何处理它
传承与创新并存,由利Srhythm系列蓝牙耳机喜获德法亚马逊销量第一
可能是讲分布式系统最到位的一篇文章
宝剑锋从磨砺出!金升阳推出LOF系列超紧凑型AC/DC电源
魅族新机魅族17th Plus曝光搭载骁龙865平台配备了1亿像素镜头
ADI推出Audio Processor全系列提供多组的DA