电动车智能防盗监控系统设计
设计要求:
(1)实时图像采集:系统应能连续采集环境中的图像数据。
(2)振动传感器设置:振动传感器能够对异常振动信号进行检测(如对电动车暴力拖拽等)。
(3)报警功能:当振动传感器检测到异常振动信号,系统应能触发向车主手机发送报警信息(包括采集的异常图像),且通过扬声器发出警报声。
(4)数据存储与分析:系统应能存储采集的图像数据,并提供简单的数据分析功能。
1 系统框图
在电动车智能防盗系统中,陀螺仪传感器实时测量电动车的姿态。并将所采集到的数据定时传入到单片机最小系统中,通过对陀螺仪传感器数据的分析和处理。当发现有特殊情况发生时,通过单片机最小系统发送控制信号到以ESP32为核心的WIFI模块中,ESP32控制摄像头进行拍照,然后以WIFI的形式上传到用户终端,除了拍照之外,还能够识别是否是人为造成的。此外声光报警器还会通过蜂鸣器发出声音,红色的LED灯也会打开,以提醒外界进行刻意的操作。
2 硬件设计
电动车智能防盗系统的硬件总体设计采用了以STM32F103C8T6为核心的单片机最小系统作为主控,搭配陀螺仪传感器和ESP-CAM模块实现智能防盗功能。同时,系统还集成了按键模块,用于手动操控系统功能,并配备声光报警模块,以提供实时警示。这一设计通过单片机的处理能力和稳定性,结合陀螺仪传感器实现对车辆位置和状态的监测,ESP-CAM模块实现实时图像传输和智能识别,以及按键模块和声光报警模块为用户提供多样化的交互和警示方式,构建了一套全面的智能防盗系统,有效保障电动车的安全性。
-
STM32F103C8T6最小系统模块:负责整个系统的控制和协调。STM32F103C8T6最小系统模块与陀螺仪传感器、ESP-CAM模块、按键模块和声光报警模块等其他硬件组件相连接,实现了系统的智能防盗功能。
-
陀螺仪传感器:陀螺仪传感器模块通过实时监测车辆的位置和状态,为系统提供了关键的信息。陀螺仪传感器能够感知车辆的姿态、倾斜和转动等动态变化,从而实现对车辆的实时监测和定位。这种信息对于智能防盗系统至关重要,因为它能够帮助系统准确地识别车辆是否受到了异常的移动或者碰撞。
-
电源模块:电源模块负责为整个交通信号控制系统提供稳定的电源供应,以确保系统的正常运行。该模块通常包括电源管理电路、稳压电路和滤波电路,能够对输入电压进行稳定的调节和滤波处理,以保证单片机和其他模块的正常工作。
-
ESP32-Cam模块:ESP32-CAM模块具有多功能性,不仅可以实现智能防盗功能,还能扩展使用其他功能。ESP32-CAM模块通过其强大的处理能力和丰富的接口,实现了对车辆周围环境的实时监测和图像捕获。其高性能的处理器使其能够处理复杂的图像算法,如目标检测和人脸识别,从而提供更加智能化的防盗功能。
-
声光报警模块:这个模块主要通过声音和光线两种方式来提醒周围的人们车辆存在的风险或异常情况。红色LED作为视觉警示信号,能够在夜间或模糊环境下清晰地标识车辆状态,警示的威胁,起到震慑作用。而有源蜂鸣器则通过发出高分贝的声音警报,吸引周围人们的注意力,从而进一步增强了警报的效果。这种声光报警器模块的组成简单明了,由红色LED和有源蜂鸣器组成,二者能够有效地协同工作,提供多重警示。
-
按键模块:按键模块由多个按钮组成,每个按钮对应下面功能,解锁车辆、启动警报、设置系统参数。这些按钮的设计需要考虑易用性和可靠性,以确保用户能够方便地操作,同时保证按键的耐用性和抗干扰能力。
3 软件设计
3.1 主程序设计
电动车智能防盗系统的软件总体设计是一个涵盖多个关键模块的复杂系统。这些模块之间通过数据传输和控制指令进行联系。暴力拖拽检测模块可以与图像分析模块共享数据,以提升安全状态的准确性和可靠性。暴力拖拽检测模块利用MPU6050的角度变化来检测的暴力拖拽事件,以识别非法移动或拖拽情况。远程图传模块通过ESP32-Cam模块实时采集车辆周围图像,并通过WIFI传输到用户手机,以提供远程监控和实时警报功能。手机APP模块采用MIT APP Inventor 2进行拖拽式设计,允许用户获取电动车周围图像并控制蜂鸣器状态,实现远程监控和控制。图像分析模块利用ESP32-Cam进行人脸识别,以提高系统的安全性。软件整体流程图如下图所示:
3.2 暴力拖拽检测
暴力拖拽检测模块的具体流程包括首先初始化MPU6050传感器;然后进入主循环,持续监测传感器数据,检测车辆的角度变化情况;接着通过设定的阈值判断是否发生暴力拖拽事件;最后若检测到暴力拖拽事件,则触发系统警报。其软件流程图如图所示:
3.3 远程图传
ESP32-Cam远程图传模块的具体流程包括首先初始化ESP32-Cam模块和WIFI连接;然后进入主循环,持续采集周围图像数据;接着通过WIFI连接将图像数据传输到用户手机;最后用户可以通过手机APP实时查看车辆周围环境。
3.4 Phone与ESP32-Cam通讯
在电动车智能防盗系统的软件设计中,手机APP软件扮演着至关重要的角色。该应用作为上位机,实现了多重功能:首先,它接收并显示由ESP32-CAM远程图传软件传输的电动车周围环境图像信息,用户能够通过手机实时查看车辆周围情况,有效提升监控能力。其次,手机APP具备图像分析功能,如人脸识别等,进一步加强了系统的安全性,用户可根据识别结果采取相应措施。
4 系统调试与测试
4.1 系统调试
电动车智能防盗系统包括STM32F103C8T6最小系统板、有源蜂鸣器模块、4按键的按键模块、陀螺仪MPU6050、以及ESP32-Cam摄像头模块。实物制作过程中首先是对各个模块的引脚进行分配,然后就是进行焊接。在焊接过程中需要注意不能虚焊或者短路,在上电之前需要用万用表对整个系统的电源进行测试。具体步骤就是将万用表的档位调到蜂鸣器档。将红黑表笔置于系统电源的两端,如果3V3和5V与GND之间不短路,则万用表的蜂鸣器不会叫,说明系统正常、即可上电运行。焊接完成后实物如下图所示:
当系统在500ms内,检测到两次陀螺的变化角度大于20°时就会触发系统报警,认定为电动车出现被盗窃的行为。此时LED灯由绿色变成红色并且蜂鸣器发出声音。然后可以通过手机查看到电动车车位的情况,如果有人则会在图像中框出来。如下图所示:
如果认为是误判断则可以通过按下第一颗按键停止鸣叫,第二颗按键可以开启或者关闭系统防盗监控功能。第三颗按键与第四颗按键可以调整智能防盗监控系统的灵敏度。
4.2 指标测试
在暴力拖拽检测中,我对不同检测灵敏度都做了以下检测,检测通过摇晃系统板子,通过串口调试输出信息查看是否检测成功。不同的灵敏度各进行了10次摇晃实验,然后统计其识别率。灵敏度分为1,2,3,4,5五个档位,五个档位中1档灵敏度最高,表示只要在500ms内检测角度变化大于20度有1次就认定为电动车被暴力拖拽,同理2档中的2表示500ms内检测角度变化大于20度有2次。检测结果如下表所示:
敏感度 | 准确率 |
---|---|
1档 | 100% |
2档 | 90% |
3档 | 90% |
4档 | 80% |
5档 | 70% |
在人脸检测中,主要通过人脸检测时不同分辨率图像下,人脸检测的帧率来进行判定。由于ESP32-CAM硬件的局限性,其帧率较低,但是在电动车智能防盗监控系统中,也能够使用。检测结果如下表所示:
分辨率 | 帧率 |
---|---|
240×240 | 6 Fps |
240×144 | 14 Fps |
160×120 | 24 Fps |
5 总结
随着电动车的普及,车辆的安全性逐渐成为人们关注的焦点之一。为了有效防范电动车被盗风险,本文设计并实现了一款电动车智能防盗系统。本文在深入分析电动车防盗需求的基础上,结合现有技术,设计了一套包括暴力拖拽检测、远程图传、手机APP通信和图像分析等功能的综合防盗系统。通过该系统,用户可以实现远程监控、实时警报和追踪定位等功能,有效提升了电动车的安全性和防盗能力。
在系统设计阶段,本文对电动车智能防盗系统的功能和架构进行了详细规划。在暴力拖拽检测模块中,采用MPU6050传感器监测车辆的角度变化,实时检测可能的暴力拖拽事件。在远程图传模块中,通过ESP32-Cam模块实时采集车辆周围图像,并通过WIFI传输到用户手机,实现远程监控和实时警报功能。手机APP模块采用MIT APP Inventor 2进行拖拽式设计,允许用户获取电动车周围图像并控制蜂鸣器状态,实现远程监控和控制。最后,在图像分析模块中,利用ESP32-Cam进行人脸识别,提高系统的安全性。
在系统实现与测试阶段,本文利用选定的硬件和软件平台,逐步实现了系统的各个模块,并进行了初步的功能测试和性能评估。通过不断的调试和优化,解决了数据传输稳定性、功耗管理等问题,验证了系统的基本功能和可靠性,并对存在的问题进行了修复和改进。
附件A(Keil源代码)
main.c
/***********************************************
代码名称:电动车智能防盗监控系统
MCU :STM32F103C8T6
时钟频率: 8MHz
作者 :LoongSTUDIO
QQ :443385785
***********************************************/
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "key.h"
#include "menukey.h"
#include "sys.h"
#include "delay.h"
#include "mpu6050.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
uint8_t is_error = 0;
uint8_t timer_1s = 0;
uint8_t state = 0;
uint8_t is_startup = 1;
uint8_t sensitivity = 2;
uint8_t cnt = 0;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM4_Init();
MX_USART1_UART_Init();
MX_USART3_UART_Init();
MX_TIM1_Init();
MX_TIM3_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
delay_init(72);
// ssd1306_TestDrawBitmap();
uint8_t flag = 0;
while(flag!=true)
{
flag = mpu6050_init();
delay_ms(200);
printf("mpu6050 inining \r\n");
}
printf("mpu6050 finishing \r\n");
HAL_TIM_Base_Start_IT(&htim1);
HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Base_Start_IT(&htim3);
HAL_TIM_Base_Start_IT(&htim4);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);// 前右
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);// 前左
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);// 后左
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);// 后右
LED_R=0;
LED_G=1;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
if(is_startup == 1)
{
ImuUpdata(0.005);
LED = !LED;
LED_G = !is_error;
if(is_error == 1)
{
if(timer_1s == 1)
{
timer_1s = 0;
state++;
switch(state)
{
case 0:
BEEP = 0;
break;
case 1:
BEEP = 1;
break;
case 2:
BEEP = 0;
break;
case 3:
BEEP = 1;
break;
case 4:
BEEP = 0;
break;
case 5:
BEEP = 1;
break;
case 6:
BEEP = 0;
break;
case 7:
BEEP = 1;
is_error = 0;
state = 0;
break;
default :
break;
}
}
LED_R = is_error;
}
}else{
LED_G = 0;
LED_R = 0;
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}
/* USER CODE BEGIN 4 */
/* USER CODE END 4 */
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
while (1)
{
}
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
附件B(制作资料)
私信。
附件C(Question答疑)
标签:CODE,最细,系统,防盗,USER,模块,源代码,RCC From: https://blog.csdn.net/LoongSTUDIO/article/details/144905931见首页简介
企鹅:443385785 绿泡泡:Loong_STUDIO