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

让Pegasus天马座开发板实现超声波测距

在完成《让Pegasus天马座开发板用上OLED屏》后,我觉得可以把超声波测距功能也在Pegasus天马座开发板上实现。于是在箱子里找到了,Grove - Ultrasonic Ranger 这一超声波测传感器。

官方地址: https://wiki.seeedstudio.com/Grove-Ultrasonic_Ranger

 超声波传感器使用

Grove - Ultrasonic Ranger测距模块一般配备有一个标准的Grove接口,使得接线变得简单。通常,这个模块有4个引脚:

  1. VCC:供电引脚,通常连接到5V。
  2. GND:地引脚,连接到微控制器的GND。
  3. SIG:信号引脚,用于传输数据。
  4. NC:未连接(No Connection),通常不用

 其中SIG信号引脚,是触发信号引脚,也是发送测距时长反馈引脚(高电平的时长为超声波往返距离所以使用的时间)。

  • 触发信号: 发送一个大于10us的脉冲信号到SIG引脚
  • 回复信号: 接收脉冲及得到高电平时间长度

按照初中物理声音传播公式:

S = \frac{\frac{}{}T * 340m/s}{2}

我们只要测出公式中T所用的时间,即可得到距离。

硬件接线

为了方便捕获SIG信号高脉冲的宽度,为使用芯片的TIMER2的通道3作为输入捕获口。此通道对应的是PA3这个IO口。如下图所示:

功能实现思路 

  1. 发送出发信号到SIG引脚
    配置PA3推挽输出口,并拉高10us的高电平
  2. 接收SIG引脚并检测高电平时间
    配置PA3为悬浮输入并将TIMER2配置为在通道3启用输入捕获模式。然后,先后捕获上升沿及下降沿时的时间点。通过这两个参数,即可计算得到超声波往返点时间。
  3. 通过得到时间后,套用物理公式即可得到转换后的距离
  4. 得到距离数据后,即可将数值显示到OLED上,实现动态测距

 main.c代码

#include "config.h"
#include "delay.h"
#include "ultrasonic.h"
#include "oled.h"#define LED_GPIO_PORT       GPIOD
#define LED_PIN  			GPIO_PIN_4#define BUTTON_GPIO_PORT    GPIOD
#define BUTTON_PIN  		GPIO_PIN_3static void init_gpio()
{GPIO_Init(LED_GPIO_PORT, LED_PIN, GPIO_MODE_OUT_PP_LOW_FAST);GPIO_Init(BUTTON_GPIO_PORT, BUTTON_PIN, GPIO_MODE_IN_PU_NO_IT); OLED_Init();   
}
void set_screen_color_and_display(uint8_t cfg)
{// BIT0作为屏幕颜色控制  0: 正常显示, 1: 反色显示OLED_ColorTurn(cfg & 0x01);// BIT1作为屏幕颜色控制  0: 正常显示   1: 屏幕翻转显示  OLED_DisplayTurn((cfg >> 1) & 0x01);
}void main(void)
{static uint8_t testBuffer[32] = {0};static uint8_t k = 0;bool isKeyDown = FALSE;uint8_t screenCfg = 0;uint8_t t = ' ';uint32_t range = 0;disable_interrupts();for (uint16_t i = 0; i < sizeof(testBuffer); i++){testBuffer[i] = i;}enable_interrupts();LOG("Startup...\r\nss");DUMP(testBuffer,sizeof(testBuffer));init_gpio();OLED_ColorTurn(0);//0正常显示,1 反色显示OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示  while (1){             GPIO_WriteReverse(LED_GPIO_PORT,LED_PIN);isKeyDown = GPIO_ReadInputPin(BUTTON_GPIO_PORT,BUTTON_PIN) == RESET;range = ultrasonic_get_range_in_centimeters();LOG("<OLED Test> app_sdcc == %u key %s , range == %lu cm\r\n",k++, isKeyDown ? "down" : "up",range);if (isKeyDown == TRUE){if (++screenCfg > 3){screenCfg = 0;}set_screen_color_and_display(screenCfg);OLED_Clear();       }OLED_ShowString(25,0,"Pegasus Board",8);OLED_ShowString(35,2,"2023/09/20",8);OLED_ShowString(20,4,isKeyDown ? "Button Down" : "Button Up  ",8);OLED_ShowNum(90,4,range,3,8);OLED_ShowString(108,4," cm",8);  OLED_ShowString(0,6,"ASCII:",8);  OLED_ShowString(63,6,"CODE:",8);OLED_ShowChar(48,6,t,8);t++;if(t>'~')t=' ';OLED_ShowNum(103,6,t,3,8);   delay(500);}
} #ifdef USE_FULL_ASSERT/*** @brief  Reports the name of the source file and the source line number*   where the assert_param error has occurred.* @param file: pointer to the source file name* @param line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t* file, uint32_t line)
{ /* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */LOG("Wrong parameters value: file %s on line %d\r\n", file, line);	/* Infinite loop */while (1){}
}
#endif

运行效果

让Pegasus天马座开发板实现超声波测距

工程分享

工程下载路径

    

相关文章:

让Pegasus天马座开发板实现超声波测距

在完成《让Pegasus天马座开发板用上OLED屏》后&#xff0c;我觉得可以把超声波测距功能也在Pegasus天马座开发板上实现。于是在箱子里找到了&#xff0c;Grove - Ultrasonic Ranger 这一超声波测传感器。 官方地址: https://wiki.seeedstudio.com/Grove-Ultrasonic_Ranger 超声…...

C++11 多线程学习

C11学习 一、多线程 1、模板线程是以右值传递的 template <class Fn, class... Args> explicit thread(Fn&& fn, Args&&... args)则需要使用到std::ref和std::cref很好地解决了这个问题&#xff0c;std::ref 可以包装按引用传递的值。 std::cref 可以…...

数学公式测试

MVP变换 MVP变换用来描述视图变换的任务&#xff0c;即将虚拟世界中的三维物体映射&#xff08;变换&#xff09;到二维坐标中。 MVP变换分为三步&#xff1a; 模型变换(model tranformation)&#xff1a;将模型空间转换到世界空间&#xff08;找个好的地方&#xff0c;把所…...

机器学习——SVM(支持向量机)

0、前言&#xff1a; SVM应用&#xff1a;主要针对小样本数据进行学习、分类和回归&#xff08;预测&#xff09;&#xff0c;能解决神经网络不能解决的过学习问题&#xff0c;有很好的泛化能力。&#xff08;注意&#xff1a;SVM算法的数学原理涉及知识点比较多&#xff0c;所…...

【李沐深度学习笔记】基础优化方法

课程地址和说明 基础优化方法p2 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 基础优化方法 在讲具体的线性回归实现之前&#xff0c;要先讲一下基础的优化模型的方法 梯度下降 当模型没有显示解&#xff08…...

tmux 配置vim风格按键,支持gbk编码

vim修改~/.tmux.conf文件&#xff0c;没有则新增&#xff0c;添加如下内容。默认前缀更改为Ctrla。强烈建议更换Caps lock键位与Ctrl键位&#xff0c;用过的都说好&#xff0c;换过就回不来了。 unbind C-b set -g prefix C-a bind a send-prefixset -sg escape-time 1bind r …...

Python —— excel文件操作(超详细)

背景 很多公司还是用excel去管理测试用例的&#xff0c;所以为了减少重复繁琐的导出导出工作&#xff0c;学会如何用代码操作excel表格很实用~ 1、读取excel文件基本步骤 1、操作excel的一些库 1、xlrd&#xff1a;读取库&#xff0c;xlwt&#xff1a;写入&#xff0c;现在…...

什么是AI问答机器人?它的应用场景有哪些?

近年来&#xff0c;由于技术的进步和对个性化客户体验的需求不断增长&#xff0c;AI问答机器人也是获得了巨大的关注。AI问答机器人&#xff0c;也被称为AI聊天机器人&#xff0c;是一种旨在模拟人类对话并通过基于文本或语音的界面与用户交互的计算机程序。其能够自动执行各种…...

静态文件

静态文件 静态文件配置 - settings.py中 1&#xff0c;配置静态文件的访问路径【该配置默认存在】 通过哪个url地址找静态文件 STATIC URL‘/static/’ 说明 指定访问静态文件时是需要通过/static/xxx或http://127.0.0.1:8000/static/xxx [xxx表示具体的静态资源位置] 模…...

Centos7 自部署中间件开机启动,以及java应用开机启动方法

一、zookeeper cd /etc/rc.d/init.d/ touch zookeeper chmod x zookeeper vi zookeeper#以下为内容&#xff0c;自行修改 路径#!/bin/bash ##chkconfig:2345 10 90#description:service zookeeper #修改为自己的目录 export ZOO_LOG_DIR/data/apache-zookeeper-3.7.0/logs…...

密度估计公式

极大似然估计&#xff1a; y p ( x 1 , x 2 , x 3 , . . . , x n ) 1 2 π σ e − ( x 1 − μ ) 2 2 σ 2 1 2 π σ e − ( x 2 − μ ) 2 2 σ 2 . . . 1 2 π σ e − ( x n − μ ) 2 2 σ 2 y p(x_1,x_2,x_3,...,x_n) \frac{1}{\sqrt{2\pi} \sigma} e ^{-\frac{(x_1…...

2023 ICPC 网络赛 第一场(补题:F)

7题罚时879&#xff0c; 队排235&#xff0c;校排79。 除了I题dp没注意空间限制第一发没有用滚动数组MLE&#xff0c;以及G题启发式合并脑抽用set当容器T一发&#xff0c;以及K没注意是平方的期望白wa4发这些应当避免的失误外&#xff0c;基本满意。剩下的题基本都是当时写不出…...

MySQL慢查询优化、日志收集定位排查、慢查询sql分析

MySQL慢查询日志收集、定位&#xff0c;慢查询分析、排查。 一 MySQL慢查询定位 1. 确定是否已开启慢查询日志 查看慢查询日志是否已经被开启&#xff1a; SHOW VARIABLES LIKE slow_query_log; 如果返回值是OFF&#xff0c;你需要开启它。 2. 开启慢查询日志 你可以临时在运…...

HZOJ-266:表达式计算

题目描述 ​ 给出一个表达式,其中运算符仅包含 ,-,*,/,^ 要求求出表达式的最终值。 ​ 数据可能会出现括号情况&#xff0c;还有可能出现多余括号情况&#xff0c;忽略多余括号&#xff0c;正常计算即可&#xff1b; ​ 数据保证不会出现大于 max long int 的数据&#xff1…...

JavaScript学习小结

变量声明&#xff1a;使用var关键字&#xff0c;变量没有类型&#xff0c;但值有类型&#xff08;弱类型语言&#xff09; 数据类型&#xff1a; ①number ②string&#xff08;单引号&#xff0c;双引号都可以表示字符串&#xff09; ③boolean ④Object类型 ⑤undefine…...

MySQL学习笔记13

DISTINCT数据去重&#xff1a; 案例&#xff1a;获取tb_student学生表学员年龄的分布情况。 mysql> select * from tb_student; ------------------------------------------------- | id | name | age | gender | address | --------------------------…...

怎么获取外网ip地址

在网络连接中&#xff0c;每个设备都被分配一个唯一的IP地址&#xff0c;用于标识和定位该设备。其中&#xff0c;内部或局域网IP地址是在局域网内使用的&#xff0c;而外网IP地址则是与公共互联网通信时所使用的地址。 获取外网IP地址对于许多人来说可能是一个常见的需求&…...

算法 只出现一次的两个数字-(哈希+异或)

牛客网: BM52 题目: 数组中仅2个数字出现1次&#xff0c;其余出现2次 思路: 出现2次的数字异或结果为0&#xff0c;另外两个不同的数字异或结果res不为0&#xff0c;异或结果的二进制位必与其中一个相同&#xff0c;求出二进制位为1的pos, 遍历数组&#xff0c;所有此位置为1…...

外卖霸王餐小程序、H5、公众号版外卖系统源码

最新外卖霸王餐小程序、H5、微信公众号版外卖系统源码、霸王餐美团、饿了么系统&#xff0c;粉丝裂变玩源码下载&#xff0c;外卖cps小程序项目&#xff0c;外卖红包cps带好友返利佣金分销系统程序、饿了么美团联盟源码&#xff0c;外卖cps带分销返利后端源码&#xff0c;基于L…...

amlogic 机顶盒关闭DLNA 后,手机还能搜到盒子

S905L3 带有投屏的功能&#xff0c;并通过 com.droidlogic.mediacenter.dlna.MediaCenterService 服务的启动和停止来开启和关闭DLNA功能&#xff0c;但是在测试中发现机顶盒关闭DLNA后&#xff0c;手机还能搜索到盒子。我在复测中发现关闭后有时很难很久搜索到盒子&#xff0c…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...