0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32F411的cm级超声波测距系统及完整代码

芯情观察猿 来源:芯情观察猿 作者:芯情观察猿 2022-08-15 09:10 次阅读

本项目通过HC-SR04超声波传感器STM32F411开发板,以精确到cm的精度测量目标物体的距离。项目BOM表如下:

STM32F411RE开发板 x1

HC-SR04超声波传感器 x1

跳线 若干


其中,HC-SR04超声波传感器可以0.3cm精度读取2-400cm范围距离,而且超声波发射器和接收器组合在一起,适合大多数个人爱好项目。主要性能包括:

工作电源:5VDC

工作电流:15mA

工作频率:40KHz

最大距离:4m

最小距离:2cm

测量角度:15度

分辨率:0.3cm

触发输入信号:10uS TTL脉冲

回升输出信号:TTL脉冲,与测量成距离成正比


pYYBAGL5nQaANnutAAG4dAhCugA128.png

当传感器接收到一个触发信号,就发出一个40KHz突发信号。该信号通过空气传播,在撞到目标物体后返回传感器,再由传感器根据一定算法得出被测物体的距离。

HC-SR04传感器与STM32的连接电路比较简单,传感器Vcc与STM32板的5V连接,两个板子的GND引脚连接,传感器的Trig 引脚与开发板的A0 (PA0) 连接,echo引脚与开发板的A1 (PA1)引脚连接。


poYBAGL5nQeAYCX7AAQV4inxFGQ910.png

按照上述电路图连接妥当后,将以下代码上传到Arduino IDE。


#include "stm32f4xx.h"

// Device header

//macros for trigger pin

#define Trig_high GPIOA->BSRR=GPIO_BSRR_BS_0 // turn on PA0 (trig pin)

#define Trig_low GPIOA->BSRR=GPIO_BSRR_BR_0 // turn off PA0 (trig pin)

uint32_t duration;

float distance;

//prototypes of the used function

void delaymS(uint32_t ms);

void delayuS(uint32_t us);

uint32_t read_echo(uint32_t timeout);

int main(void)

{

RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //enable GPIOA Clock

GPIOA->MODER |= (1<<0); //set PA0 to Output

//configure Timer1 to generate micorseconds delay

RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; /*Enable TIM3 clock*/

TIM1->PSC = 16 -1; /* 16 000 000 /16 = 1000 000*/

TIM1->ARR = 1; /* 1000 000 /1 = 1000000*/

TIM1->CNT =0;

TIM1->CR1 =1;

while(1)

{

Trig_low; //turn off trig

delayuS(10); //wait 4uS

Trig_high; //turn on trig

delayuS(10);

Trig_low;

duration=read_echo(400000); //measure the time of echo pin

distance=duration/58; //distance=duration/2*SOUND_SPEED

delaymS(1000); //delay for 1 second between each read

}

}

void delaymS(uint32_t ms) //delay for certain amount in milliseconds

{

SysTick->LOAD=16000-1;

SysTick->VAL=0;

SysTick->CTRL=0x5;

for (int i=0;i;i++)<>

{

while(!(SysTick->CTRL &0x10000)){}

}

SysTick->CTRL=0;

}

void delayuS(uint32_t us) //delay for certain amount in microseconds

{

for(int i =0;i;i++){<>

while(!(TIM1->SR & 1)){} /*wait for UIF set*/

TIM1->SR &= ~1;

}

}

uint32_t read_echo(uint32_t timeout)

{

uint32_t duration;

while(!((GPIOA->IDR)&GPIO_IDR_ID1)){duration++;delayuS(1);

if(duration>timeout){return 0;}

}

duration=0;

while((GPIOA->IDR&GPIO_IDR_ID1)){duration++;delayuS(1);if(duration>timeout){return 0;} }

return duration;

}

如果一切正常,就可以开始测量物体的距离了,可通过serial monitor观测结果。如果为了方便携带,也可连接OLED之类的显示器件。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 超声波
    +关注

    关注

    63

    文章

    2983

    浏览量

    138164
  • DIY
    DIY
    +关注

    关注

    176

    文章

    886

    浏览量

    348101
  • 激光雷达
    +关注

    关注

    967

    文章

    3929

    浏览量

    189473
  • LIDAR
    +关注

    关注

    10

    文章

    321

    浏览量

    29334
收藏 人收藏

    评论

    相关推荐

    RK3568教学实验箱_操作案例:5-19 超声波测距实验

    的设计实现:LCD显示界面以及与用户的交互; (3)编辑控制代码; (4)编译程序; (5)运行程序。 根据原理图,可知本实验使用的超声波测距模块是基于CS100A系列芯片的。 CS100A芯片
    发表于 09-23 15:40

    超声波和次声波的频率范围和应用

    超声波和次声波是两种不同频率的声波,它们在许多领域都有广泛的应用。以下是关于超声波和次声波的频率范围和应用的介绍:
    的头像 发表于 09-19 16:42 1732次阅读

    第16章-超声波跟随功能 基于STM32的三路超声波自动跟随小车 毕业设计 课程设计

    第16章-超声波跟随功能 基于STM32的三路超声波自动跟随小车 毕业设计 课程设计
    的头像 发表于 08-21 15:26 403次阅读
    第16章-<b class='flag-5'>超声波</b>跟随功能 基于<b class='flag-5'>STM32</b>的三路<b class='flag-5'>超声波</b>自动跟随小车 毕业设计 课程设计

    第七章-V1.5 STM32超声波测距STM32F103C8t6超声波避障小车 超声波避障模块 STM32超声波测距

    5STM32超声波测距STM32F103C8t6超声波避障小车
    的头像 发表于 08-15 16:25 575次阅读
    第七章-V1.5 <b class='flag-5'>STM32</b><b class='flag-5'>超声波</b><b class='flag-5'>测距</b><b class='flag-5'>STM32F</b>103C8t6<b class='flag-5'>超声波</b>避障小车 <b class='flag-5'>超声波</b>避障模块 <b class='flag-5'>STM32</b><b class='flag-5'>超声波</b><b class='flag-5'>测距</b>

    超声波无损检测原理及应用

    超声波无损检测(Ultrasonic Non-Destructive Testing,简称UT)是一种利用超声波在材料内部传播的特性,检测材料内部缺陷和结构的无损检测技术。本文将详细介绍超声波无损
    的头像 发表于 05-24 16:48 4552次阅读

    如何将FreeRTOS移植到STM32F411平台?

    最近打算做一个智能家居嵌入式开发平台,选用ST的STM32F411加Qualcomm的QCA4002. 由于QCA4002功能比较复杂,打算用FreeRTOS来驱动它。 不知道有高手做过将FreeRTOS移植到STM32F411平台没?如果有源码就最好了,谢谢哦!
    发表于 05-17 06:05

    在全志H616核桃派开发板上实现超声波传感器测距

    实现超声波传感器测距。 实验讲解​ 下图是一款市面上常用的HCSR04超声波模块: 模块参数 供电电压 3.3V~5V (核桃派需要使用支持3.3V的) 测量距离 2cm~450
    发表于 05-08 16:21

    基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料

    设计要求 1.设计一个以51单片机为核心的超声波倒车雷达系统; 2.超声波测量范围在2cm~4m,测量精度3mm; 3.扩展DS18B20温度测量模块,读取环境温度和补偿
    发表于 03-19 14:17

    超声波传感器和超声波测距原理分析

    声音是由振动产生的,能够产生超声波的装置就是超声波传感器,习惯上称为超声换能器,或者超声探头。
    发表于 01-29 09:20 732次阅读
    <b class='flag-5'>超声波</b>传感器和<b class='flag-5'>超声波</b><b class='flag-5'>测距</b>原理分析

    超声波测距原理 超声波测距离传感器接线方法

    超声波测距是一种常用的测距方法,通过发射超声波脉冲,利用其在空气中传播速度较快的特点,测量出从传感器到目标物体的时间差,并进而计算出距离。超声波
    的头像 发表于 01-22 15:22 2118次阅读

    超声波传感器的工作原理 超声波传感器的应用

    超声波传感器是一种基于超声波的无接触式测距传感器,可以广泛应用于工业、医疗、军事等领域。本文将详细介绍超声波传感器的工作原理以及其在各个领域的应用。
    的头像 发表于 01-18 14:04 1506次阅读

    超声波传感器测距离的原理

    超声波传感器测距离的原理是利用声波在空气中的传播速度测量物体与传感器之间的距离。具体而言,传感器发送出一个超声波信号,然后测量信号从发送到接收所需的时间,并根据
    的头像 发表于 01-15 09:41 2601次阅读

    超声波发生器的原理

    超声波发生器又称超声波驱动电源、电子箱、超声波控制器,是大功率超声波系统的重要组成部分。超声波
    的头像 发表于 12-24 10:46 1641次阅读
    <b class='flag-5'>超声波</b>发生器的原理

    51单片机的超声波测距,并用74HC595驱动数码管显示超声波测距的距离

    个人是小白,实在不会写,麻烦大佬们帮忙写一个程序,实现51单片机的超声波测距,并用74HC595驱动数码管显示超声波测距的距离!!!
    发表于 11-23 15:19

    利用AT89C51单片机、超声波传感器测距实现超声波倒车雷达

    电子发烧友网站提供《利用AT89C51单片机、超声波传感器测距实现超声波倒车雷达.rar》资料免费下载
    发表于 11-17 15:47 3次下载
    利用AT89C51单片机、<b class='flag-5'>超声波</b>传感器<b class='flag-5'>测距</b>实现<b class='flag-5'>超声波</b>倒车雷达