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

玩转X-CTR100 l STM32F4 l HC-SR04超声波测距

我造轮子,你造车,创客一起造起来!更多塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

超声波测距模块HC-SR04可以测量2cm~400cm的距离,本文使用X-CTR100控制器定时器进行超声波距离测量。

原理

HC-SR04超声波测距模块可提供 2cm-400cm的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。

基本工作原理:

(1)采用IO 口TRIG 触发测距,给最少10us 的高电平信呈。

(2)模块自动发送8 个40khz 的方波,自动检测是否有信号返回;

(3)有信号返回,通过IO 口ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;

如下图接线,VCC 供5V电源, GND 为地线,TRIG 触发控制信号输入,ECHO 回响信号输出等四个接口端。

超声波时序图

以上时序图表明你只需要提供一个10uS 以上脉冲触发信号,该模块内部将发出8 个40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号。

回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。

公式:uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为60ms 以上,以防止发射信号对回响信号的影响

1、此模块不宜带电连接,若要带电连接,则先让模块的 GND端先连接,否则会影响模块的正常工作。

2、测距时,被测物体的面积不少于 0.5平方米且平面尽量要求平整,否则影响测量的结果。

例程

本例程实现X-CTR100控制器测量超声波距离,并通过串口显示。

硬件说明

硬件资源:

  • 串口UART1
  • LH接口(作为普通IO使用)
  • HC-SR04超声波测距模块(需自备)

硬件连接:

超声波模块连接LH接口,需要4根杜邦线,连接如下。

GND——GND

VCC——5V(红色),

Trig——D0

Echo——D1

软件生态

X-SOFT软件生态,X-API扩展文件如下。

ax_sr04.c——HC-SR04超声波测距源文件

ax_sr04.h——HC-SR04超声波测距头文件

测量方式采用边沿中断触发,Echo上升沿启动定时器,下降沿获取定时器值作为测量值,代码如下。

void EXTI1_IRQHandler(void)

{

    //确认是否产生了EXTI Line中断

if (EXTI_GetITStatus(EXTI_Line1) != RESET)

    {

if (GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_1) != 0) // 高电平回波

        {

TIM_Cmd(TIM7, ENABLE);

}

        else

        {

TIM_Cmd(TIM7, DISABLE);

sr04_measurement = TIM_GetCounter(TIM7);

TIM_SetCounter(TIM7, 0);

}

}

    //清除中断标志位

EXTI_ClearITPendingBit(EXTI_Line1);    

}

定时器周期为1us,sr04_measurement为测量时间值,与距离正比,通过多次实际测量值求得系数。

距离 = sr04_measurement*0.173-4.51 ,模型一次函数,多次实际测量后求得系数,经过实测,测量结果准确。

接口函数

void AX_SR04_Init(void); //SR04超声波测距初始化

void AX_SR04_StartRanging(void); //SR04启动测量

uint32_t AX_SR04_GetDistance(void);    //SR04获取距离值

软件说明

每隔500ms测量一次,循环测量,结果通过串口显示,主程序如下。

int main(void)

{    

    uint32_t temp;     

    

    //X-CTR100初始化

    AX_Init(115200);

    printf("***X-CTR100 SR04超声波测距例程***\r\n\r\n");    

    

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组

    

    //SR04初始化

    AX_SR04_Init();

    

    while (1)

    {

        //启动测量

        AX_SR04_StartRanging();

        AX_Delayms(500);

        

        //获取距离值

temp = AX_SR04_GetDistance();

        printf("当前距离:%d MM \r\n", temp);

    }

}

实现效果

测量结果显示如下,与实际距离对比,误差小于1CM。当然超声波的传播速度与温度有关系,如需获得更准确距离,需要进行温度补偿,尤其是远距离测距。

转载于:https://www.cnblogs.com/xtark/p/9275683.html

相关文章:

  • 前端存储 - localStorage
  • Xamarin Essentials教程剪贴板Clipboard
  • ES6 系列之迭代器与 for of
  • CSS 全解析实战(三)-CSS 基础
  • 用栅栏(CyclicBarrier)实现高并发测试
  • Kudu vs HBase
  • springboot系列(一) Spring Boot浅谈(转载)
  • UITableView 的头视图和分区视图
  • 进击的 JavaScript(四) 之 闭包
  • netty源码分析
  • Android开发 Firebase动态链接打开APP
  • js进阶 12-18 jquery如何实现自定义右键菜单(把问题分细)
  • 数据结构之串
  • Linux命令三剑客
  • 我的免费静态博客
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Android组件 - 收藏集 - 掘金
  • Brief introduction of how to 'Call, Apply and Bind'
  • css的样式优先级
  • ES学习笔记(12)--Symbol
  • linux安装openssl、swoole等扩展的具体步骤
  • webpack+react项目初体验——记录我的webpack环境配置
  • 高程读书笔记 第六章 面向对象程序设计
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 码农张的Bug人生 - 初来乍到
  • 新书推荐|Windows黑客编程技术详解
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • $.ajax中的eval及dataType
  • %@ page import=%的用法
  • (6)STL算法之转换
  • (arch)linux 转换文件编码格式
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (poj1.3.2)1791(构造法模拟)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)Dubbo快速入门、介绍、使用
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)setTimeout 和 setInterval 的区别
  • (转)socket Aio demo
  • (转)Unity3DUnity3D在android下调试
  • (转)VC++中ondraw在什么时候调用的
  • **PHP二维数组遍历时同时赋值
  • .htaccess配置常用技巧
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net Core 中间件验签
  • .Net Web窗口页属性
  • .NET/C# 使窗口永不获得焦点
  • .NET开源快速、强大、免费的电子表格组件