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

2024-03-13 09:20

本文主要是介绍基于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;}
}

这篇关于基于STM32的电动车防盗器设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/804381

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

SprinBoot+Vue网络商城海鲜市场的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订