让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天马座开发板实现超声波测距

工程分享

工程下载路径

    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144233.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

「大数据-2.0」安装Hadoop和部署HDFS集群

目录 一、下载Hadoop安装包 二、安装Hadoop 0. 安装Hadoop前的必要准备 1. 以root用户登录主节点虚拟机 2. 上传Hadoop安装包到主节点 3. 解压缩安装包到/export/server/目录中 4. 构建软链接 三、部署HDFS集群 0. 集群部署规划 1. 进入hadoop安装包内 2 进入etc目录下的hadoop…

深信服云桌面用户忘记密码后的处理

深信服云桌面用户忘记了密码&#xff0c;分两种情况&#xff0c;一个是忘记了登录深信服云桌面的密码&#xff0c;另外一个是忘记了进入操作系统的密码。 一、忘记了登录深信服云桌面的密码 登录虚拟桌面接入管理系统界面&#xff0c;在用户管理中选择用户后&#xff0c;点击后…

基于QGIS进行二次开发的正确姿势

前言 最近一直在琢磨QGIS的二次开发&#xff0c;也踩过不少坑&#xff0c;好在最后的结果是好的。这里介绍一下我最喜欢的二次开发姿势。 电脑环境 VS2017 Community、QGIS3.18.3、QT5.11.2、Windows SDK版本 10.0.17763.0、VS2017的QT插件版本 2.8.1 前提条件 已经下载安…

网络层五大核心知识点

引言 在前面几期文章中&#xff0c;无论是UDP还是TCP&#xff0c;其实我们都在介绍 TCP/IP 模型的“传输层”&#xff0c;我们知道&#xff0c;数据在传输层完成相应的封装后就会来到网络层进行下一步的数据转发&#xff0c;那么数据在网络层又接受了哪些神秘的力量&#xff1…

IDEA 2019 Springboot 3.1.3 运行异常

项目场景&#xff1a; 在IDEA 2019 中集成Springboot 3.1.3 框架&#xff0c;运行异常。 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSch…

代码随想录 Day6 哈希 LeetcodeT454 四数之和II T383赎金信 T15 三数之和 T18 四数之和

本文代码思路来源于: 代码随想录 前言 希望大家在刷这部分题的时候先熟悉熟悉哈希结构的基本常用api,比较方便理解. LeetCode T454 四数之和 题目链接:454. 四数相加 II - 力扣&#xff08;LeetCode&#xff09; 题目思路 暴力解法仍然是遍历四个数组解决此题, 哈希的思路有…

基于SpringBoot+Bootstrap的旅游管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 登录模块的实现 景点信息管理界面 订票信息管理界面 用户评价管理界面 用户管理界面 景点资讯界面 系统主界面 用户注册界面 景点信息详情界面 订票信息界面 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言…

【Go】rsrc不是内部或外部命令、无法将“rsrc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方法

前言 想尝试用go创建一个桌面应用程序&#xff0c;然后查了下决定用 walk。 我们要先下载walk&#xff0c;这里 官方链接 按照官方文档&#xff0c;我们先用go get命令下载。 go get github.com/lxn/walk然后分别创建好了 main.go、main.manifest 文件&#xff0c;代码如下…

vue event bus 事件总线

vue event bus 事件总线 创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\08-事件总线-扩展 vue --version vue crea…

uniapp 微信小程序之隐私协议开发

uniapp 微信小程序之隐私协议开发 官网通知&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html 1、配置 __usePrivacyCheck__: true&#xff1b;位置 manifest.json : "mp-weixin":{"__usePrivacyCh…

Linux发行版X华为鲲鹏openEuler

前言 作为硬件和软件之间的桥梁&#xff0c;我接触的最多的就是Windows和Centos&#xff0c;还记得最初的鸟哥的Linux私房菜&#xff0c;而Centos即将停止维护更新&#xff08;Centos7维护到2024&#xff09;&#xff0c;对于个人学习来说没有任何影响&#xff0c;但是对于企业…

SEO方案尝试--Nuxtjs项目基础配置

Nuxtjs 最新版 Nuxt3 项目配置 安装nuxtjs 最新版 Nuxt3 参考官网安装安装插件安装ElementPlus页面怎么跳转&#xff0c;路由怎么实现404页面该怎么配置配置 网页的title 安装nuxtjs 最新版 Nuxt3 参考官网安装 安装插件 安装ElementPlus 安装 Element Plus 和图标库 # 首先&…

高效实时!麒麟信安操作系统(嵌入式版)V3来了,为工业领域数智化转型夯实安全底座

随着万物互联和工业领域数智化时代的到来&#xff0c;嵌入式应用日益广泛&#xff0c;嵌入式系统技术已成为促进智能制造快速发展的关键要素之一。麒麟信安作为国产操作系统领军企业&#xff0c;始终走在行业前列&#xff0c;本次发布的麒麟信安操作系统&#xff08;嵌入式版&a…

【小笔记】fasttext文本分类问题分析

【学而不思则罔&#xff0c;思维不学则怠】 2023.9.28 关于fasttext的原理及实战文章很多&#xff0c;我也尝试在自己的任务中进行使用&#xff0c;是一个典型的短文本分类任务&#xff0c;对知识图谱抽取的实体进行校验&#xff0c;判断实体类别是否正确&#xff0c;我构建了…

配置OSPFv3基本功能 华为笔记

1.1 实验介绍 1.1.1 关于本实验 OSPF协议是为IP协议提供路由功能的路由协议。OSPFv2&#xff08;OSPF版本2&#xff09;是支持IPv4的路由协议&#xff0c;为了让OSPF协议支持IPv6&#xff0c;技术人员开发了OSPFv3&#xff08;OSPF版本3&#xff09;。 无论是OSPFv2还是OSPFv…

AI项目十一:Swin Transformer训练

若该文为原创文章&#xff0c;转载请注明原文出处。 续上一篇&#xff0c;训练自己的数据集&#xff0c;并测试。 一、安装标注软件labelme # 安装labelme pip install labelme # 启动 labelme 这里数据集准本&#xff0c;标注图片数据过程自己探索。 最后文件结构如下&…

sentinel-dashboard-1.8.0.jar开机自启动脚本

启动阿里巴巴的流控组件控制面板需要运行一个jar包&#xff0c;通常需要运行如下命令&#xff1a; java -server -Xms4G -Xmx4G -Dserver.port8080 -Dcsp.sentinel.dashboard.server127.0.0.1:8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.0.jar &…

HTML - input type=file 允许用户选择多个文件

效果 示例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><!-- When the multiple Boolean attribute is specified, the file input allows the user to select more than o…

再生之术:遗忘 Root 密码的 CentOS8 Stream 解决方案

文章目录 大魔头 RootGRUB 引导界面BootLoaderGRUB主要功能选择启动的操作系统编辑内核启动参数 进入GRUB 引导界面编辑内核启动参数单用户模式 进入内核编辑界面rd.break进入单用户模式 大魔头 Root 哈哈&#xff0c;你好&#xff01;今天&#xff0c;让我们来聊聊 Linux 系统…

Linux 端口

查看端口占用 1、使用nmap命令查看端口的占用情况 安装nmap&#xff1a;yum -y install nmap 语法&#xff1a;nmap 被查看的IP地址 可以看到&#xff0c;本机&#xff08;127.0.0.1&#xff09;上有7个端口现在被程序占用了。 2、使用netstat命令查看指定端口的占用情况 语…