STM32小项目———感应垃圾桶
文章目录
- 前言
 - 一、超声波测距
 - 1.超声波简介
 - 2.超声波测距原理
 - 2.超声波测距步骤
 
- 二、舵机的控制
 - 三、硬件搭建及功能展示
 - 总结
 
前言
一个学习STM32的小白~ 有问题请评论区或私信指出
提示:以下是本篇文章正文内容,下面案例可供参考
一、超声波测距
1.超声波简介
超声波传感器模块上面通常有两个超声波元器件,
 。一个用于发射,一个用于接收。
 电路板上有四个引脚:VCC GND Trig(触发),Echo(回应)
主要参数:
 工作电压与电流:5V,15mA
 感应距离: 2~400cm
 感测角度:不小于15°
 被测物的面积不要小于50cm并且尽量平整
 具备温度补偿电路

2.超声波测距原理
超声波模块的触发脚(Trig)输入10us以上的高电位,即可发射超声波,发射超声波后,与接收到传回的超声波之前,”响应”脚(Echo)位呈现高电平。因此,程序可以从”响应”脚位(Echo)的高电平脉冲持续时间,换算出被测物的距离。
距离公式:高电平持续时间 * 声速(340/秒)/2
 
2.超声波测距步骤
1.配置GPIO引脚结构体(Trig,Echo)。
2.配置定时器结构体
3.配置定时器中断结构体
4.开启时钟(定时器,GPIO)
5.Tria引脚输出高电平(10us以上),然后关闭
6.等待Echo引脚输入高电平开始,定时器打开–>开启计数器计数
7.等待Echo引脚输入高电平结束,定时器关闭—>停止计数器计数
8.通过计数器的值计算得出超声波测量距离
#include "HCSR04.h"
#include "stm32f10x.h"                  // Device header
#include "SysTick.h"
uint32_t ms_Count = 0;#define Trig_Value_High  GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define Trig_Value_LOW  GPIO_ResetBits(GPIOB,GPIO_Pin_11)#define Echo_Read  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)void HCSR04_Config(void)
{GPIO_InitTypeDef  HCSR04_Structure;TIM_TimeBaseInitTypeDef  TIM4_Structure;NVIC_InitTypeDef nvic_Structure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//TrigHCSR04_Structure.GPIO_Mode = GPIO_Mode_Out_PP;HCSR04_Structure.GPIO_Pin = GPIO_Pin_11;HCSR04_Structure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&HCSR04_Structure);//EchoHCSR04_Structure.GPIO_Mode = GPIO_Mode_IN_FLOATING;HCSR04_Structure.GPIO_Pin = GPIO_Pin_10;GPIO_Init(GPIOB,&HCSR04_Structure);TIM4_Structure.TIM_ClockDivision = TIM_CKD_DIV1;TIM4_Structure.TIM_CounterMode = TIM_CounterMode_Up;TIM4_Structure.TIM_Period = 1000-1;TIM4_Structure.TIM_Prescaler =72-1;TIM4_Structure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM4,&TIM4_Structure);TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);TIM_Cmd(TIM4,DISABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);nvic_Structure.NVIC_IRQChannel = TIM4_IRQn;nvic_Structure.NVIC_IRQChannelPreemptionPriority = 0;nvic_Structure.NVIC_IRQChannelSubPriority = 0;nvic_Structure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&nvic_Structure);}void open_TIM4(void)
{TIM_SetCounter(TIM4,0);//初始化CNT = 0ms_Count = 0;//计时器 = 0TIM_Cmd(TIM4,ENABLE);
}void close_TIM4(void)
{TIM_Cmd(TIM4,DISABLE);
}int Get_timeCount(void)
{uint32_t t_Count;t_Count = ms_Count*1000;//毫秒化微妙t_Count += TIM_GetCounter(TIM4);//加上当前CNT值TIM4->CNT = 0;//CNT置0delay_ms(50);return t_Count;
}float GetLenth(void)
{uint32_t time = 0;uint16_t i = 0;float lenth = 0;float sum = 0;while(i != 5)//取五次测距结果{Trig_Value_High;//发射20us超声波delay_us(20);Trig_Value_LOW;while(Echo_Read == 0);//等待Echo接收反射波open_TIM4();//接收到反射波打开定时器i = i+1;//记录次数while(Echo_Read == 1);等待Echo接收的反射波停止close_TIM4();//关闭定时器time = Get_timeCount();//获取反射波持续时间lenth = ((float)time/58.3);//计算距离cm/ussum += lenth;}lenth = sum/5.0;return lenth;
}void TIM4_IRQHandler(void)
{if( TIM_GetITStatus(TIM4,TIM_IT_Update) != RESET){ms_Count++;//每次中断代表1ms过去了TIM_ClearITPendingBit(TIM4,TIM_IT_Update);}} 
二、舵机的控制
本文讲述舵机控制电机方法点击直达
三、硬件搭建及功能展示
如图:


总结
局部变量初值一定不要忘记~~ 切记!!!
相关文章:
STM32小项目———感应垃圾桶
文章目录 前言一、超声波测距1.超声波简介2.超声波测距原理2.超声波测距步骤 二、舵机的控制三、硬件搭建及功能展示总结 前言 一个学习STM32的小白~ 有问题请评论区或私信指出 提示:以下是本篇文章正文内容,下面案例可供参考 一、超声波测距 1.超声波…...
嵌入式MCU平台汇总
文章目录 1. 单片机(MCU) 2. 数字信号处理器(DSP) 3. ARM Cortex 系列 4. 超低功耗MCU 5. 物联网MCU(IoT MCU) 6. 开源架构MCU(RISC-V) 7. 可编程逻辑器件(FPGA&a…...
C#udpClient组播
一、0udpClient 控件: button(打开,关闭,发送),textbox,richTextBox 打开UDP: UdpClient udp: namespace _01udpClient {public partial class Form1 : Form{public Form1(){Initi…...
《昇思25天学习打卡营第14天 | 昇思MindSpore基于MindNLP+MusicGen生成自己的个性化音乐》
14天 本节学了基于MindNLPMusicGen生成自己的个性化音乐。 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型的音乐生成模型,能够根据文本描述或音频提示生成高质量的音乐样本。 MusicGen模型基于Transformer结构,可以分解为三个不同的阶段…...
新奥集团校招面试经验分享、测评笔试题型分析
一、走进新奥集团 新奥集团成立于1989年,总部位于河北廊坊,是中国领先的清洁能源企业集团。业务涵盖城市燃气、能源化工、环保科技等多个领域,致力于构建现代能源体系,提升生活品质。 二、新奥集团校招面试经验分享 新奥集团的…...
【推荐】Prometheus+Grafana企业级监控预警实战
新鲜出炉!!!PrometheusGrafanaAlertmanager springboot 企业级监控预警实战课程,从0到1快速搭建企业监控预警平台,实现接口调用量统计,接口请求耗时统计…… 详情请戳 https://edu.csdn.net/course/detai…...
深度剖析:前端如何驾驭海量数据,实现流畅渲染的多种途径
文章目录 一、分批渲染1、setTimeout定时器分批渲染2、使用requestAnimationFrame()改进渲染2.1、什么是requestAnimationFrame2.2、为什么使用requestAnimationFrame而不是setTimeout或setInterval2.3、requestAnimationFrame的优势和适用场景 二、滚动触底加载数据三、Elemen…...
AI时代,你的工作会被AI替代吗?
AI在不同领域的应用和发展速度是不同的。在智商方面,尤其是在逻辑推理、数据分析和模式识别等领域,AI已经取得了显著的进展。例如,在国际象棋、围棋等策略游戏中,AI已经能够击败顶尖的人类选手。在科学研究、医学诊断、股市分析等…...
Java_日志
日志技术 可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中) 可以随时以开关的形式控制日志启停,无需侵入到源代码中去进行修改。 日志技术的体系结构 日志框架:JUL、Log4j、Logback、其他实现。 日志接口…...
springcould-config git源情况下报错app仓库找不到
在使用spring config server服务的时候发现在启动之后的一段时间内控制台会抛出异常,spring admin监控爆红,控制台信息如下 --2024-06-26 20:38:59.615 - WARN 2944 --- [oundedElastic-7] o.s.c.c.s.e.JGitEnvironmentRepository : Error occured …...
MySQL serverTimezone=UTC
在数据库连接字符串中使用 serverTimezoneUTC 是一个常见的配置选项,特别是当数据库服务器和应用程序服务器位于不同的时区时。这个选项指定了数据库服务器应当使用的时区,以确保日期和时间数据在客户端和服务器之间正确传输和处理。 UTC(协…...
基于YOLOv9的PCB板缺陷检测
数据集 PCB缺陷检测,我们直接采用北京大学智能机器人开放实验室数据提供的数据集, 共六类缺陷 漏孔、鼠咬、开路、短路、杂散、杂铜 已经对数据进行了数据增强处理,同时按照YOLO格式配置好,数据内容如下 模型训练  采用YOLO…...
高考结束,踏上西北的美食之旅
高考的帷幕落下,暑期的阳光洒来,是时候放下书本,背上行囊,踏上一场充满期待的西北之旅。而在甘肃这片广袤的土地上,除了壮丽的自然风光,还有众多令人垂涎欲滴的美食等待着您的品尝。当您踏入甘肃࿰…...
人工智能 (AI) 在能源系统中应用的机会和风险
现代文明极度依赖于电力的获取。电力系统支撑着我们视为理所当然的几乎所有基本生活功能。没有电力的获取,大多数经济活动将是不可能的。然而,现有的电网系统并未设计来应对当前——更不用说未来的——电力需求。与此同时,气候变化迫切要求我…...
[AIGC] 定时删除日志文件
文章目录 需求实现脚本解释 需求 实现一个定时任务,定时删除两天前的日志文件,如果某个目录使用量超过80%,则删除文件 实现 要实现这样的要求,我们可以创建一个shell脚本,在该脚本中使用find命令查找两天前的日志文…...
C++:typeid4种cast转换
typeid typeid typeid是C标准库中提供的一种运算符,它用于获取类型的信息。它主要用于类型检查和动态类型识别。当你对一个变量或对象使用typeid运算符时,它会返回一个指向std::type_info类型的指针,这个信息包含了关于该类型名称、大小、基…...
vue3的配置和使用
vue的使用需要配置node且node版本需要在15以上。管理员方式打开cmd,输入node -v,可以查看node版本。 创建vue有以下两种方式 npm init vuelatestnpm create vuelatest创建后输入项目名,其它的输入否即可,新手可以先不用 按照要求…...
决策树划分属性依据
划分依据 基尼系数基尼系数的应用信息熵信息增益信息增益的使用信息增益准则的局限性 最近在学习项目的时候经常用到随机森林,所以对决策树进行探索学习。 基尼系数 基尼系数用来判断不确定性或不纯度,数值范围在0~0.5之间,数值越低&#x…...
短视频利器 ffmpeg (2)
ffmpeg 官网这样写到 Converting video and audio has never been so easy. 如何轻松简单的使用: 1、下载 官网:http://www.ffmpeg.org 安装参考文档: https://blog.csdn.net/qq_36765018/article/details/139067654 2、安装 # 启用RPM …...
【计算机毕业设计】基于Springboot的智能物流管理系统【源码+lw+部署文档】
包含论文源码的压缩包较大,请私信或者加我的绿色小软件获取 免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
