电动车报警器

news/2024/11/15 0:43:01/

项目需求

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

项目连接图

在这里插入图片描述

一,完成振动传感器实战

震动是点亮LED灯,具体思路如下

单片机供电VCC GND接单片机
产品不震动,输出高电平,模块上的DO口
产品震动,输出低电平,绿色指示灯亮

AO口不用
在这里插入图片描述
cubeMX配置如下

  1. 设置串口
    在这里插入图片描述
  2. 设置时钟
    在这里插入图片描述
    在这里插入图片描述
  3. 设置GPIO初始化
    在这里插入图片描述
  4. 打开中断(使能中断)
    在这里插入图片描述
  5. 配置工程
    在这里插入图片描述
    代码如下
// 重写中断服务函数,如果检测到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);

二、 继电器介绍及实战

继电器工作原理

单片机供电VCC GND接单片机,VCC需要接3.3V,5V不行!

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

引脚 IN 接收到低电平时,开关闭合。导通电
在这里插入图片描述
在这里插入图片描述
由于在震动的时候 PB8 会被拉低,所以继电器的 IN 接到 PB8无需额外再修改代码。

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

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

433M供电VCC GND 接单片机的 VCC GND

接收到信号,接收模块对应针脚输出高电平

有D0 D1 D2 D3,对应遥控器的ABCD
在这里插入图片描述
编程实现
需求:按下遥控器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{//如果未检测到PA6,则关闭LED1HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);}break;}// 一根中断线上接有多个中断源,判断中断源是否来自PA4if(GPIO_Pin == GPIO_PIN_4){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. 如果检测到PA4被拉低(小偷偷车),并且警报模式打开。
    • 则将PB7拉低(喇叭响),2秒后恢复电平(喇叭不响),表示进入警报模式。
  2. 如果检测到PA5被拉高(按键A按下),设定为开启警报模式。
    • 则将PB7拉低(喇叭响),2秒后恢复电平(喇叭不响),表示进入警报模式。
    • 同时将标志位设置为ON。
  3. 如果检测到PA6被拉高(按键B按下),设定为关闭警报模式。
    • 则将PB7拉低(喇叭响),1秒后恢复电平(喇叭不响),表示关闭警报模式
    • 同时将标志位设置为OFF

接线和上面有一点点区别
在这里插入图片描述
去掉PB8 PB9 配置,新增PB7配置
在这里插入图片描述
代码如下:

#define J_ON 1
#define J_OFF 0void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{static int mark = J_OFF;switch(GPIO_Pin){case GPIO_PIN_4://如果检测到PA4被拉低(小偷偷车),并且警报模式打开if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_RESET && mark == J_ON){//则将PB7拉低,继电器通电,喇叭一直响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){// 则将PB7拉低(喇叭响),2秒后恢复电平(喇叭不响),表示进入警报模式HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);HAL_Delay(2000);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);// 同时将标志位设置为ONmark = J_ON;}break;// 如果检测到PA6被拉高(按键B按下),设定为关闭警报模式case GPIO_PIN_6:if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_SET){// 则将PB7拉低(喇叭响),1秒后恢复电平(喇叭不响),表示关闭警报模式HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);HAL_Delay(1000);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);// 同时将标志位设置为OFFmark = J_OFF;}break;}
}

http://www.ppmy.cn/news/236881.html

相关文章

飞翔的小鸟--easyx版

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 今天我们来尝试一下用easyx窗口创建飞翔的小鸟游戏 (相关游戏图片我已在末尾给出&#x…

电动车控制器电路原理图讲解分析

电动车控制器 控制器电路板 电动车控制器在电动车中的作用 电动车控制器的主要作用就是用来控制电动车电机的,需要控制包括电机启动、电机转速、刹车断电等。 电动车控制器接线图 我们可以看到一个电动车控制器上面有非常多的接线,每一个接线都有其作…

栈帧之操作数栈(Operand Stack)和动态链接(Dynamic Linking)解读

操作数栈 概念 每一个独立的栈帧除了包含局部变量表以外,还包含一个后进先出(Last-In-First-Out)的 操作数栈,也可以称之为表达式栈(Expression Stack) 操作数栈,在方法执行过程中&#xff0c…

一文说清Task及其调度问题

ask对于.NET的重要性毋庸置疑。通过最近的一些面试人员经历,发现很多人对与Task及其调度机制,以及线程和线程池之间的关系并没有清晰的认识。本文采用最简单的方式模拟了Task的实现,旨在说明Task是什么?它是如何被调度执行的&…

armeabi-v7a、arm64-v8a、armeabi、x86、x86_64的区别

1、armeabi-v7a:第七代及以上的ARM处理器,2011年以后生产的大部分Android设备都使用。 2、arm64-v8a:第8代、64位ARM处理器,很少设备,三星GalaxyS6是其中之一。 3、armeabi:第5代、第6代的ARM处理器,早期的手机用的比较多。 4、…

ATMEGA168A-AU

ATMEGA168A-AU 现货13632767652 amega 48a/PA/88A/PA/168 a/PA/328/P是一款低功耗、CMOS 8位微控制器,基于 增强型RISC架构。通过在单个时钟周期内执行指令,这些器件可以实现 CPU吞吐量接近每秒一百万条指令(MIPS)每兆赫,允许系统设计人员…

signature=e618f5cbeb2ef7c71ca976bd6d8d2406,E618.full

摘要: —We present the first implementation of RSA in the Residue Number System (RNS) which does not require any conversion, either from radix to RNS beforehand or RNS to radix afterward. Our solution is based on an optimized RNS version of Mont…