“声震四方,贼人退散;平安守护,行者无忧。”#STM32项目一 《电动车报警器》

news2024/11/17 20:40:18

“声震四方,贼人退散;平安守护,行者无忧。”#STM32项目一 电动车报警器

    • 前言
    • 预备知识
    • 1.电动车报警器项目概述
      • 1.1项目需求
      • 1.2项目框图
      • 1.3.硬件清单
    • 2.振动传感器介绍及实战
      • 2.1振动传感器介绍
      • 2.2振动传感器接线
      • 2.3使用STM32CubeMX建立工程
      • 2.4程序代码实现思路
      • 2.5重新编写中断服务函数
      • 2.6解决单片机卡主BUG
    • 3.继电器介绍及实战
      • 3.1继电器工作原理
      • 3.2继电器接线
      • 3.3延用上一个工程代码,继电器接线与LED1相同。
    • 4. 433M无线发射接收模块介绍及实践
      • 4.1 433M无线发射接收模块介绍
      • 4.2 433M接线
      • 4.3 433M编程实现
    • 5.电动车报警器项目设计及实现
      • 5.1电动车报警器项目接线
      • 5.2修改STM32CudeMX内433M无线发射接收模块介绍及实践工程,使之达到项目要求。如下图步骤
      • 5.3项目设计思路见中断服务函数
      • 5.4中断服务函数代码及哄定义
    • 结束语

前言

  本篇博文介绍的是基于STM32F103C8T6单片机第一个项目《电动车报警器》,包含电动车报警器项目概述,振动传感器介绍及实战,继电器介绍及实战,433M无线发射接收模块介绍及实践,电动车报警器项目设计及实现。看到这篇博文的朋友,可以先赞再看吗?

预备知识

  一、基本电路标识识别和接线,例如VCC,GND。
  二、电脑基本操作复制粘贴
  三、分文件编程
  四、C变量
  五、基本输入输出
  六、流程控制
  七、函数

  如果以上知识不清楚,请自行学习后再来浏览。如果我有没例出的,请在评论区写一下。谢谢啦!

1.电动车报警器项目概述

1.1项目需求

  点击遥控器 A 按键,系统进入警戒模式,一旦检测到震动(小偷偷车),则喇叭发出声响报警,吓退小偷。

  点击遥控器 B 按键,系统退出警戒模式,再怎么摇晃系统都不会报警,否则系统一直发出尖叫,让车主尴尬。

1.2项目框图

在这里插入图片描述

1.3.硬件清单

  • 振动传感器
  • 继电器
  • 高功率喇叭
  • 433M无线接收发射模块
  • 杜邦线

2.振动传感器介绍及实战

2.1振动传感器介绍

  产品不振动,DO输出高电平

  产品振动,DO输出低电平,绿色指示灯亮

2.2振动传感器接线

  VCC、GND接单片机供电部分

  DO接PA4口

  AO不使用

2.3使用STM32CubeMX建立工程

  1. 配置SYS。如下图步骤

在这里插入图片描述

  1. 配置RCC。如下图步骤。

在这里插入图片描述

  1. 配置时钟。如下图步骤。

在这里插入图片描述

  1. 配置GPIO口。如下图步骤。

在这里插入图片描述
在这里插入图片描述

  1. 将PA4配置成低电平触发的外部中断4。如下图步骤。

在这里插入图片描述

  1. 配置PB8默认输出高电平,使LED1默认关闭。如下图步骤。

在这里插入图片描述

  1. 配置NVIC,打开使能外部中断4。如下图步骤。

在这里插入图片描述

  1. 修改工程名字,路径和能用Keil 5打开。如下图步骤。

在这里插入图片描述

  1. 勾选建立工程所必须生成的文件。如下图步骤。

在这里插入图片描述

2.4程序代码实现思路

  程序需求:当振动传感器接收到振动,STM32单片机控制LED灯亮。

  思路:重新编写中断服务函数,检测中断源状态,控制LED点亮。

2.5重新编写中断服务函数

  1. 中断服务函数构建思路请看代码注释

  2. 中断服务函数代码体现

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	//外部中断线让有很多中断源
		//检测中断源是否来自PA4
	if(GPIO_Pin == GPIO_PIN_4)
	{
			//检测PA4是否等于低电平
		if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_RESET)
		{
				//等于就开灯
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
		}
		else
		{
	      //不等于就关灯
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
		}
	}
}
  1. 烧写程序进入STM32单片机后灯能与振动同时亮,但是这样的话在构成电动车报警器时喇叭会振动就响,不振动就不响。所以得优化。解决办法就是在检测到振动时,让LED亮一会儿。使用延时函数。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	//外部中断线让有很多中断源
		//检测中断源是否来自PA4
	if(GPIO_Pin == GPIO_PIN_4)
	{
			//检测PA4是否等于低电平
		if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_RESET)
		{
				//等于就开灯
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
			HAL_Delay(1000);
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);	
		}
		else
		{
	      //不等于就关灯
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
		}
	}
}
  1. 此时将程序烧写进单片机后会出现LED一直亮的结果,也就是单片机运行卡住了。

2.6解决单片机卡主BUG

  1. BUG分析

  直接在中断服务函数里调用 HAL_Delay 函数,则会造成系统卡死。
  原因:程序初始化时默认把滴答定时器的中断优先级设为最低,其它中断源很容易打断它导致卡死。

  1. 解决办法

  在 main 函数里使用以下函数提高滴答定时器的中断优先级(提升至0) :

HAL_NVIC_SetPriority(SysTick_IRQn,0,0);

  降低EXTI4的中断优先级,例如2。

在这里插入图片描述

  此时通过STM32CudeMX重新生成的工程会对原文件进行修改,所以Keil 5会提示是否重载文件。

在这里插入图片描述

3.继电器介绍及实战

3.1继电器工作原理

  引脚 IN 接收到低电平时,开关闭合,使COM与NO连接,接收到高电平,开关打开,COM与NO断开。

  最大负载电路交流250V/10A,直流30V/10A

3.2继电器接线

  VCC接STM32单片机3V3也就是3.3V5V容易出问题。

  IN接PB8,也就是LED1连接的引脚。

在这里插入图片描述

在这里插入图片描述

3.3延用上一个工程代码,继电器接线与LED1相同。

4. 433M无线发射接收模块介绍及实践

4.1 433M无线发射接收模块介绍

  433M接收模块收到遥控器的信号,对应引脚输出高电平。有D0、D1、D2、D3,对应遥控器的ABCD按钮。

4.2 433M接线

  VCC接单片机5V

  GND接单片机GND

  D0接单片机PA5

  D1接单片机PA6

请添加图片描述

4.3 433M编程实现

  1. 需求:按下遥控器A按键,LED1亮2秒;按下遥控器B按键,LED2亮1秒。
  2. 在STM32CudeMX内修改继电器实战工程,使之达到需求的要求。工程建立如下面的图片

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 编程核心思路见代码注释。

  2. 中断服务函数代码。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	//外部中断线让有很多中断源
	switch(GPIO_Pin)
	{
		//检测中断源是否来自PA5
		case GPIO_PIN_5:
			if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_SET)
			{
					//来自开灯
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
				HAL_Delay(2000);                                    //使用延时函数,让灯亮2秒
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);	  //关灯
			}
			else
			{
					//不来自就关灯
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
			}
			break;
		//检测中断源是否来自PA5	
		case GPIO_PIN_6:
			if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_SET)
			{
					//来自就开灯
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);
				HAL_Delay(1000);                                    //使用延时函数,让灯亮1秒
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);	  //关灯
			}
			else
			{
					//不来自就关灯
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
			}
			break;
	}
	
}

5.电动车报警器项目设计及实现

5.1电动车报警器项目接线

  振动传感器接单片机PA4

  433M接收模块D0、D1接单片机PA5、PA6

  继电器接单片机PB7

  所有模块VCCGND要求接单片机对应引脚

在这里插入图片描述

5.2修改STM32CudeMX内433M无线发射接收模块介绍及实践工程,使之达到项目要求。如下图步骤

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.3项目设计思路见中断服务函数

5.4中断服务函数代码及哄定义

//定义警报标志宏
#define J_OFF 0
#define J_ON  1

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	//设立警报标志,使用静态变量,防止程序运行中多次调用中断函数导致标志重置
	static char mark = J_OFF;
	
	//外部中断线让有很多中断源
	switch(GPIO_Pin)
	{
		case GPIO_PIN_4:
			//当处于打开警报模式,有小偷偷车
			if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_RESET && mark==J_ON)
			{
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
			}
			break;
		//检测中断源是否来自PA5,(按下按键A)
		case GPIO_PIN_5:
			if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_SET)
			{
					//按下按键A,驱动继电器吸合
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
				HAL_Delay(2000);                                    //使用延时函数,使喇叭响2秒
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);	  //关闭喇叭
				mark = J_ON;                                        //设置打开警报标志
			}
			break;
		//检测中断源是否来自PA6	,(按下按键B)
		case GPIO_PIN_6:
			if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_SET)
			{
					//按下按键A,驱动继电器吸合
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
				HAL_Delay(1000);                                    //使用延时函数,使喇叭响1秒
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);	  //关闭喇叭
				mark = J_OFF;                                       //设置关闭警报标志         
			}
			
			break;
	}
	
}

结束语

  很高兴您能看到这里,点个赞再走呗。谢谢您啦!!!

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

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

相关文章

Spring 类型转换、数值绑定与验证(三)— Formatting 与 Validation

1 Formatting 在Spring中用于格式化数据及根据地域展示不同格式的数据。 图 Formatting接口 UML 1.1 注解驱动Formatting 自定义像“DateTimeFormat”注解来对相关字段格式化的步骤为: 自定义注解。定义一个实现AnnotationFormatterFactory接口的工厂类。往容器…

亚马逊卖家做市场分析业务可以用静态IP代理完成吗?

亚马逊作为全球最大的电商平台之一,其庞大的销售数据和用户行为数据成为了许多商家和市场研究人员进行市场分析和竞争研究的重要来源。而使用IP代理则能够为亚马逊市场分析带来许多帮助,下面就来一一介绍。静态IP代理可以为市场分析带来哪些帮助&#xf…

DatasetsDataLoader

PyTorch 提供了两个数据基类: torch.utils.data.DataLoader 和 torch.utils.data.Dataset。允许你使用预加载的数据集以及你自己的数据集。 Dataset 存储样本和它们相应的标签,DataLoader 在 Dataset 基础上添加了一个迭代器,迭代器可以迭代数…

【Java JVM】对象回收判断

Java 对象回收判断是程序设计中至关重要的一环。在面向对象的编程中, 合理的对象回收策略直接影响着程序的性能和内存利用效率。 因此, 深入了解和准确判断 Java 对象的回收时机, 不仅可以优化程序的运行性能, 还能有效避免内存泄漏和资源浪费。 本文将简单的分析一下 JVM 中对…

Java递归生成本地文件目录树形结构

Java递归生成本地文件目录(树行结构) 1.读取txt文件保存的文件目录结构 2.递归生成本地文件目录树形结构,并修改目录文件前缀进行递增 3.结果截图 4.代码 package com.zfi.server.device;import io.swagger.annotations.Api; import org.springframework.web.bind…

springcloud:3.2测试超时机制

服务提供者 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 PaymentController【控制层】 /*** 测试超时机制** return*/GetMapping("/timeout")public String TimeOut() {try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {…

win11下安装mysql

一、下载MySQL 官方下载传送门 我安装的版本是5.7.83 二、安装MySQL 1.双击安装包 2.选择Custom(自定义安装),然后Next> 3.根据你的系统做选择,我的是64位,所选MySQL Servers 5.7.38 -x64,然后按箭头将选中的版本移到右边…

android开发工具,美团安卓面试

1、java中和equals和hashCode的区别 基本数据类型的比较的值相等. 类的比较的内存的地址,即是否是同一个对象,在不覆盖equals的情况下,同比较内存地址,原实现也为 ,如String等重写了equals方法. hashCode也是Object类…

电子设备内幕:RAM和ROM小百科

大家好,我是知微。 在智能手机出现之前,大家对RAM和ROM这两个词都没什么概念。如今很多手机在宣传的时候,都会标明有多大的RAM(运行内存)和ROM(存储空间),因为这在很大程度上影响手机的使用流畅度和使用寿命。 其实,…

【ONE·基础算法 || 双指针】

总言 主要内容:编程题举例,理解双指针思想。       文章目录 总言1、双指针2、零移动(easy)2.1、思路分析2.2、题解 3、复写零(easy)3.1、题解 4、快乐数(medium)4.1、思路分析4…

82407太赫兹扩频模块系列

82407太赫兹扩频模块系列 简述: 82407扩频模块系列产品主要为信号/频谱分析仪进行毫米波扩频测量而设计。该系列扩频模块还可用作毫米波信号接收机的前端。 82407扩频模块系列输入接口采用相应频段的标准矩形波导,其中82407/NB/A/B/C/D小型化产品本振输…

安装算法依赖时版本报错,依赖之间对应版本

困惑了很久,毕竟不是计算机专业专业出身,才知道安装深度学习算法各个依赖之间是有版本对应关系的。 (本文使我随笔记录,无价值) 比如: 再比如: 由于我第一步安装cuda时就和其他博主不一致&…

仓储仓库广播-仓储仓库无线应急广播对讲智能管理系统建设重点解析

仓储仓库广播-仓储仓库无线应急广播对讲智能管理系统建设重点解析 北京海特伟业科技有限公司任洪卓发表于 2024年3月5日 一、仓储仓库无线应急对讲广播系统客户需求 中央储备粮北京某某直属库,为国有粮食仓储企业,具备30多个粮食储备仓和8个成品油储备…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Scroll容器组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Scroll容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Scroll容器组件 可滚动的容器组件,当子组件的布局尺寸超过父组件…

JavaScript观察者模式:实现对象间的事件通信!

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

CDC控制仿真--综合实验,模型+代码

一、工况设置 加减速:从0开始加速--匀速40Km/h--减速至0; 转向:在道路65m~70m之间,有一个转向变道再回来的避障动作。 路面设置:C级路面,300m处,设置高30mm的减速带。 二、实验目标 1、对比车…

VBA技术资料MF126:移动或复制文件到新创建的文件夹

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

前端- 基础 表单标签 - 使用场景及组成

大家都有到银行去办理业务的时候,大多数情况下会填一些 纸质的表之类的东西如下图 而我们在网页中也会经常遇到 像现实生活中在银行填表那样的情景,如下图 : 上示就是 网页中的表单的使用场景了 表单标签 : 为什么需要表单 …

PMP和NPDP持证人员福利大曝光!全国这些城市都可…

近年来,各个城市之间为争夺人才竞争更加激烈。为了吸引具备国际职业资格认证的人才,各大城市纷纷制定了相关优惠和福利政策。这些政策旨在鼓励重点行业领域的用人单位采取更加优化的方式吸引海外高端人才。目前,已经有多个城市针对项目管理及…

【优选算法】前缀和

前缀和思想其实就是一种简单的dp思想,也就是动态规划 什么时候用到前缀和?当要快速求出数组中某一个区间的和 前缀和模板 暴力解法 定义一个指针从左向右遍历,并且累加值即可,这里就不过多赘述,主要还是来看前缀和…