基于STM32的电动车防盗器设计

1.项目需求

点击遥控器 A 按键,系统进入警戒模式,一旦检测到震动(小偷偷车),则喇叭发出声响报警,
吓退小偷。
点击遥控器 B 按键,系统退出警戒模式,再怎么摇晃系统都不会报警,否则系统一直发出尖叫,
让车主尴尬。

2.项目框图

3.相应模块介绍及实战

3.1 振动传感器介绍

3.1.1 产品参数
  • 工作电压:3.3V到5V
  • 接口类型:数字
  • 引脚定义:1–输出 2–电源 3—地
  • 平时保持高电平输出,震动时输出低电平
  • 本开关在静止时为开路(OFF)状态,当受到外力碰触而达到适当震动力时,或移动速度达到适当离(偏)心力时,导电接脚会发生瞬间导通(ON)状态,使电气特性改变,而当外力消失时电气特性恢复开路(OFF)状态
  • 无方向性,任何角度均可以触发工作
  • 在外力震动时,达到适当的震动力时导电针将瞬间开启(ON)。
  • 无方向,任何角度可能检测震动。
3.1.2 硬件连接

单片机供电VCC GND接单片机;

产品不震动,输出高电平,模块上的DO口;

产品震动,输出低电平,绿色指示灯亮;(低电平有效)

AO口不用;        

3.1.3 编程实现

需求:当振动传感器接收到振动信号时,使用中断方式点亮LED1

//重写中断服务函数,如果检测到EXTI中断请求,则进入此函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{//一根中断线上接有多个中断源,判断中断请求是否来自PA4if(GPIO_Pin == GPIO_PIN_4){//如果检测到PA4被拉低if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_RESET){//则点亮LED1HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);//延时1秒HAL_Delay(1000);//关闭LED1HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);}else{//未检测到PA4被拉低,则关闭LED1HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);}}
}

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

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

HAL_NVIC_SetPriority(SysTick_IRQn,0,0); 

 并且将 EXTI4 的中断优先级设置比滴答定时器的中断优先级高,比如 1(大于0即可) 。

3.2 继电器介绍及实战

3.2.1 继电器工作原理

单片机供电VCC GND接单片机,VCC需要接3.3V,5V不行
最大负载电路交流250V/10A,直流30V/10A
引脚 IN 接收到低电平时,开关闭合。(低电平有效)

 

 3.2.2 编程实现

在STM32cubemx中 将PB8配置成输出模式(Output)即可 在代码中其类似与灯LED的电平改写

如上图硬件连接 连接完毕之后在代码中将继电器所在引脚给一个低电平 则喇叭会发出响声 代码与

振动传感器类似 此处省略(在最后总代码中有)

3.3 433M无线发射接收模块介绍及实战

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

单片机供电VCC GND接单片机
接收到信号,接收模块对应针脚输出高电平
有D0 D1 D2 D3,对应遥控器的ABCD

3.3.2 编程实现

需求:按下遥控器A按键,LED1亮1秒;按下遥控器B按键,LED2亮1秒。(高电平为按下)
D0 -- PA5
D1 -- PA6

//重写中断服务函数,如果检测到EXTI中断请求,则进入此函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{switch(GPIO_Pin){// 如果检测到PA5被拉高(按键A被按下)case GPIO_PIN_5:if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_SET){//则点亮LED1HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);HAL_Delay(1000);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);}else{//如果未检测到PA5,则关闭LED1HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);}break;// 如果检测到PA6被拉高(按键B按下)case GPIO_PIN_6:if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_SET){    //则点亮LED2HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);HAL_Delay(1000);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);}else{//如果未检测到PA4,则关闭LED1HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);}break;}
}

4.项目设计实现

4.1 项目设计

//如果检测到PA4被拉低(小偷偷车),并且警报模式打开
//则将PB7拉低,继电器通电,喇叭一直响


// 如果检测到PA5被拉高(按键A按下),设定为开启警报模式
// 则将PB7拉低(喇叭响),2秒后恢复电平(喇叭不响),表示进入警报模式
// 同时将标志位设置为ON


// 如果检测到PA6被拉高(按键B按下),设定为关闭警报模式
// 则将PB7拉低(喇叭响),1秒后恢复电平(喇叭不响),表示关闭警报模式
// 同时将标志位设置为OFF

4.2 项目实现

4.2.1 STM32CubeMx配置

配置时钟

 配置GPIO口

使能中断

4.2.2 编程实现
//外部定义
#define J_ON 1
#define J_OFF 0//重写中断服务函数,如果检测到EXTI中断请求,则进入此函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{	static int mark = J_OFF;//定义成一个静态变釿 若前面不加static 则mark丿直为J_OFF 当触发报警模式后解除警报模式 振动模块收到振动 喇叭还是会响switch(GPIO_Pin){case GPIO_PIN_4:if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4) == GPIO_PIN_RESET && mark == J_ON)//检测到PA4被拉低(振动模块低电平输出)并且报警模式打开{HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);//则将PB7拉低,继电器通电,喇叭一直响}break;case GPIO_PIN_5:if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5) == GPIO_PIN_SET)//若将PA5拉高(按键A按下 设定为开启警报模式{HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);// 则将PB7拉低(喇叭响),2秒后恢复电平(喇叭不响),表示进入警报模式HAL_Delay(2000);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);mark = J_ON;//设置警报模式(配合振动模块可让喇叭一直响 同时也是振动后喇叭一直响的前提条件)}break;case GPIO_PIN_6:if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6) == GPIO_PIN_SET)//若将PA6拉高(按键B按下{HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);// 则将PB7拉低(喇叭响),1秒后恢复电平(喇叭不响),表示关闭警报模式HAL_Delay(1000);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);mark = J_OFF;//解除警报模式}break;}
}

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

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

相关文章

正则表达式中元字符的使用

// 转义字符(\ 特定的普通字符),把这些特定的普通字符转义为具有特殊含义的字符, // \\字符(\ \) ,把转义字符 \ 转义为普通的字符 \,正则表达式元字符中若含有\,所以用\\表示是元字符自己的含义,而不是…

【DevOps实战之k8s】使用Prometheus和Grafana监控K8S集群

【DevOps实战之k8s】使用Prometheus和Grafana监控K8S集群 目录 【DevOps实战之k8s】使用Prometheus和Grafana监控K8S集群系统架构Kubernetes集群指标抓取指标可视化警告PromQL示例按命名空间统计集群中的Pod数按命名空间重启Pod未就绪的PodCPU过度使用Memory过度使用健康的集群…

Qt/C++音视频开发69-保存监控pcm音频数据到mp4文件/监控录像/录像存储和回放/264/265/aac/pcm等

一、前言 用ffmpeg做音视频保存到mp4文件,都会遇到一个问题,尤其是在视频监控行业,就是监控摄像头设置的音频是PCM/G711A/G711U,解码后对应的格式是pcm_s16be/pcm_alaw/pcm_mulaw,将这个原始的音频流保存到mp4文件是会…

Java代码审计工程师直播第六期

本期直播课程将深入探讨Java代码审计的关键概念和技术。涵盖课题包括安全漏洞分析、代码审查方法、常见漏洞案例分析等。学员将通过实例掌握代码审计实战技能,提升对Java应用程序安全的认知和技能水平。 课程大小:6.1G 课程下载:https://do…

从根到叶:深入了解Map和Set

窗间映出一片高远的天空, 向晚的天际宁静而又清明。 我孤独的心灵在幸福地哭泣, 它在为天空如此美好而高兴。 恬静的晚霞一片火红, 晚霞灼烧着我的热情。 此刻的世界没有别人, 只有上帝,我和天空。 ——&#x…

SpringBlade error/list SQL 注入漏洞复现

0x01 产品简介 SpringBlade 是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构、SpringBoot 单体式微服务架构并存的综合型项目。 0x02 漏洞概述 SpringBlade 框架后台 /api/blade-log/error/list路径存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞获取数…

让生活更加精致的APP?

晚上好,今天博主来介绍几款帮助你条理生活的APP,让你的生活更加精致,充满仪式感。 一.格志日记 一款以“格子”的方式记录日记的APP,非常简单明了,用户可以依据自己的喜好,来自由定义或者删除格…

SpringBoot实战项目——博客笔记项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍二、项目的整体框架 2.1 数据库模块 2.2 前端模块 2.3 后端模块三、项目图片展示四、项目的实现 4.1 准备工作 4.…

【R语言实战】——金融时序分布拟合

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

Android audiotrack尾帧无声

前言 产品一直有用户反馈音频截断问题。在机遇巧合下现学现卖音频知识处理相关问题。 问题描述 我们查看以下简化播放器代码: class AACPlayer(private val filePath: String) {private val TAG "AACPlayer"private var extractor: MediaExtractor? …

TortoiseSVN 报错:The server unexpectedly closed the connetion

前言 CentOS7Linux 安装subversionmod_dav_svn,搭建subversion(svn)服务器 The server unexpectedly closed the connetion 解决办法 重启Apache服务 shell> systemctl restart httpd

uniapp—day02

个人名片: 😊作者简介:一名大二在校生 🤡 个人主页:坠入暮云间x 🐼座右铭:给自己一个梦想,给世界一个惊喜。 🎅**学习目标: 坚持每一次的学习打卡 文章目录 WXML 和HTML区…

系统及其分类

系统定义 系统:指若干相互关联的事物组合而成的具有特定功能的整体。 系统的基本作用:对输入信号进行加工和处理,将其转换为所需要的输出信号。 系统分类 系统的分类错综复杂,主要考虑其数学模型的差异来划分不同类型。主要分为…

怎么绕过CDN查找真实IP

一、怎么绕过CDN查找真实IP 首先使用全球ping查看该域名是否存在cdn 方法一:使用phpinfo等探针的方式找到真实IP 方法二:网站根域或子域查找真实IP 大部分CDN服务都是按流量进行收费的,所以一些网站管理员只给重要业务部署CDN&#xff0c…

大华智慧园区综合管理平台 clientServer SQL注入漏洞复现

0x01 产品简介 “大华智慧园区综合管理平台”是一款综合管理平台,具备园区运营、资源调配和智能服务等功能。平台意在协助优化园区资源分配,满足多元化的管理需求,同时通过提供智能服务,增强使用体验。 0x02 漏洞概述 由于大华智慧园区综合管理平台clientServer接口处未…

使用reprepro+nginx搭建apt服务器

目录 项目背景 项目要求 项目开发过程 1、apt服务器的搭建 2、实现自定义指定源文件列表来实现apt update更新 3、实现软件启动时自动更新 4. source.list中镜像源地址的格式 项目开发的难点/坑点 总结 项目背景 前面写过一篇“利用Nginx搭建一个apt服务器”&#xff…

STM32嵌入式开发需要掌握硬件、嵌入式系统、C编程语言以及相关的外设驱动等知识

学习STM32嵌入式开发需要掌握硬件、嵌入式系统、C编程语言以及相关的外设驱动等知识。以下是学习STM32的路线及重要的学习内容: 阶段学习内容目标1.基础知识- 理解嵌入式系统的基本概念和原理 - 了解STM32系列微控制器的特点和应用领域掌握嵌入式系统基本概念&…

Midjourney绘图欣赏系列(十)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

用Docker Compose实现负载均衡【入门篇】

在本文中,我们将讨论如何使用Docker Compose管理多个容器,并实现负载均衡。 首先,让我们简要介绍一下Docker Compose。Docker Compose是一个用于定义和运行多个Docker容器的工具,通过一个单独的文件来描述应用程序的整个服务架构…

vue项目:webpack打包优化实践

本文目录 一、项目基本信息二、分析当前项目情况1、使用 webpack-bundle-analyzer 插件2、使用 speed-measure-webpack-plugin 插件 三、解决构建问题1、caniuse-lite 提示的问题2、 warning 问题 四、打包速度优化1、修改source map2、处理 loader 五、webpack性能优化1、使用…