首页 > 其他分享 >基于STM32设计的门禁照相机

基于STM32设计的门禁照相机

时间:2023-08-16 10:05:41浏览次数:28  
标签:照片 OV7725 STM32 LCD CAMERA 门铃 门禁 照相机 SD

一、项目介绍

当前文章介绍基于STM32设计的门禁照相机,本项目提供了一种更加智能、安全、便捷的门禁解决方案。门禁照相机采用STM32F103ZET6 MCU作为主控芯片,配合2.8寸LCD显示屏、OV7725数字摄像头、SD卡和模拟门铃按键等外设模块,实现了摄像头画面实时显示、门铃触发拍照、图片存储等功能。

在使用该门禁照相机时,来访客人只需按下门铃按键,摄像头即可自动拍摄照片并保存到SD卡中。同时,用户也可以通过LCD屏幕进行时间调整和本地图片浏览等操作,提高了门禁系统的可操作性和用户体验。

门禁照相机的设计为了提高门禁系统的安全性和智能化程度,解决传统门禁系统存在的诸多问题。通过采用数字摄像头替代传统猫眼,并实现照片自动拍摄和存储功能,有效提高了门禁系统的安全性。同时,通过LCD屏幕进行时间调整和本地图片浏览等操作,实现了门禁系统的智能化,提高了用户的使用体验。

基于STM32设计的门禁照相机_门禁照相机

二、硬件设计

本照相机的主要硬件包括 STM32F103ZET6 MCU、3.5寸 LCD 显示屏、OV7725 数字摄像头、SD 卡和一个模拟门铃的按键。

(1)STM32F103ZET6 MCU

STM32F103ZET6 MCU 是本照相机的主控芯片,它可以通过 GPIO 口驱动其他外设模块。

(2)3.5寸 LCD 显示屏

3.5寸 LCD 显示屏可以实时显示摄像头捕捉的画面,并且支持多个页面的切换。

(3)OV7725 数字摄像头

OV7725 数字摄像头可以采集来访客人的画面,并将其实时显示在 LCD 显示屏上。

(4)SD 卡

SD 卡用于存储照相机拍摄的照片,照片的名称由当前时间日期命名。

(5)模拟门铃的按键

模拟门铃的按键用于触发照相机拍摄照片。

三、软件设计

3.1 技术要求

(1)实时显示画面

本照相机通过 OV7725 数字摄像头捕捉来访客人的画面,并通过3.5寸 LCD 显示屏实时显示。

(2)拍照并保存到 SD 卡

当有来访者按下模拟门铃按键时,照相机会拍摄照片并保存到 SD 卡中,照片名称以当前时间日期命名。

3.2 软件流程

(1) 初始化STM32F103ZET6 MCU及外部设备; (2) 启动OV7725 数字摄像头; (3) 开启LCD; (4) 进入主循环: a. 读取按键状态是否是门铃被按下; b. 若发现门铃按下,则照相机开始拍照并将照片保存到 SD 卡; c. 更新屏幕上的内容。

3.3 代码实现

代码实现过程:

(1) 初始化STM32F103ZET6 MCU及外部设备;

(2) 启动OV7725 数字摄像头,并设置其采集参数;

(3) 初始化 SD 卡,并在 SD 卡上创建一个文件夹用于存储照片;

(4) 开启LCD,并设置其显示参数;

(5) 进入主循环,读取按键状态并更新屏幕上的内容;

(6) 当发现门铃被按下时,开始拍照并将照片保存到 SD 卡中。

四、代码实现

4.1 整体代码框架

#include "stm32f10x.h"
#include "sdio_sdcard.h"
#include "ff.h"

/* 定义一些宏和变量 */

int main(void) {
    /* 初始化系统时钟(例如使用 HSE 8MHz 作为系统时钟) */
    /* 初始化 GPIO 端口、SDIO、LCD、OV7725 等外设模块 */
    /* 初始化 SD 卡,并在其上创建用于存储照片的文件夹 */

    while(1) {
        /* 读取门铃按键状态 */
        if(/* 检测到门铃被按下 */) {
            /* 拍摄照片并保存到 SD 卡中,照片名以当前时间日期命名 */
        }

        /* 更新屏幕显示内容,包括实时摄像头画面、时间日期、照片预览等 */
    }
}

4.2 拍照存储

下面是采用 STM32 的HAL 库设计的代码,控制OV7725 拍照保存为 BMP 图片到 SD 卡中。

#include "stm32f1xx_hal.h"
#include "sdio_sdcard.h"
#include "ff.h"
#include "ov7725.h"

extern SD_HandleTypeDef hsd;
extern DCMI_HandleTypeDef hdcmi;
extern DMA_HandleTypeDef hdma_dcmi;

FATFS fs;
FIL file;
UINT bw;

/* 定义一些宏和变量 */

int main(void) {
    /* 初始化系统时钟(例如使用 HSE 8MHz 作为系统时钟) */
    /* 初始化 GPIO 端口、SDIO、LCD、OV7725 等外设模块 */
    /* 初始化 SD 卡,并在其上创建用于存储照片的文件夹 */

    while(1) {
        /* 读取门铃按键状态 */
        if(/* 检测到门铃被按下 */) {
            /* 拍摄照片并保存到 SD 卡中,照片名以当前时间日期命名 */
            HAL_GPIO_WritePin(OV7725_RESET_GPIO_Port, OV7725_RESET_Pin, GPIO_PIN_SET); // 复位 OV7725
            HAL_Delay(50);
            HAL_GPIO_WritePin(OV7725_RESET_GPIO_Port, OV7725_RESET_Pin, GPIO_PIN_RESET);

            ov7725_init(); // 初始化 OV7725

            HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)RGB565_buffer, (uint32_t)(CAMERA_RWIDTH * CAMERA_RHEIGH), 1); // 开始采集

            HAL_DMA_PollForTransfer(&hdma_dcmi, HAL_DMA_FULL_TRANSFER, 1000); // 等待采集完成

            /* 将 RGB565 数据转换成 BMP 格式 */
            uint16_t bmp_header[54/2] = {0x4D42, 54+CAMERA_RWIDTH*CAMERA_RHEIGH*3, 0, 0, 54,
                                          40, CAMERA_RWIDTH, CAMERA_RHEIGH, 1, 24, 0, CAMERA_RWIDTH*CAMERA_RHEIGH*3, 0, 0, 0, 0};
            uint8_t bmp_data[CAMERA_RWIDTH*CAMERA_RHEIGH*3];
            uint16_t i = 0, j = 0;
            for(i = 0; i < 54/2; i++) {
                bmp_data[i*2] = bmp_header[i]; // 拷贝 BMP 文件头
                bmp_data[i*2+1] = bmp_header[i]>>8;
            }
            for(i = 0; i < CAMERA_RWIDTH*CAMERA_RHEIGH; i++) {
                bmp_data[54+i*3+0] = RGB565_buffer[i]>>8; // RGB565 转换为 BMP 格式的 RGB 24位色
                bmp_data[54+i*3+1] = RGB565_buffer[i]>>3;
                bmp_data[54+i*3+2] = RGB565_buffer[i]<<3;
            }

            /* 保存 BMP 图片到 SD 卡中 */
            if(f_mount(&fs, SD_Path, 1) == FR_OK) { // 挂载 SD 卡
                char filename[20];
                /* 将文件名设置为当前时间日期,例如"202206151243.bmp" */
                sprintf(filename, "%04d%02d%02d%02d%02d%02d.bmp", year, month, day, hour, minute, second);

                if(f_open(&file, filename, FA_CREATE_ALWAYS | FA_WRITE) == FR_OK) { // 创建文件并写入数据
                    f_write(&file, bmp_data, sizeof(bmp_data), &bw);
                    f_close(&file);
                }
            }

            HAL_Delay(1000); // 防止连续拍照
        }

        /* 更新屏幕显示内容,包括实时摄像头画面、时间日期、照片预览等 */
    }
}


标签:照片,OV7725,STM32,LCD,CAMERA,门铃,门禁,照相机,SD
From: https://blog.51cto.com/u_11822586/7098763

相关文章

  • nuttx-on-the-stm32f103c8t6
    https://microcontrollerelectronics.com/nuttx-on-the-stm32f103c8t6/......
  • STM32单片机实现固件在线升级(IAP)
    固件升级方案综述单片机的固件升级方式有很多种,1、ICP:InCircuitPrograming,简单说就是在单片机开发时使用烧录器升级程序,比如使用J-Link烧录单片机程序。2、ISP:InSystemPrograming,在单片机内部实现了基于通信接口(如串口、I2C、SPI等等)的FLASH引导程序,配合厂家提供的烧录软件......
  • STM32F103C8T6测试点亮小灯
    目录代码代码#include"stm32f10x.h"//Deviceheaderintmain(void){ // 寄存器操作,stm32有很多寄存器,操作不方便,推荐使用标准库或HAL库// RCC->APB2ENR=0x00000010;// GPIOC->CRH=0x00300000;// GPIOC->ODR=0x00002000; //注意:步骤二中,需引......
  • stm32cubemx 配置波特率
    1、参考链接:https://www.cnblogs.com/forever-youth/p/15807690.html 2、步骤:   1、先算出连接can总线的PCLK1时钟频率   2、再根据公式:can波特率=pclk1/((tbs1+tbs2+sync_seg)*brp)     其中PCLK1就是时钟频率,sync_seg一般默认固定为1   ......
  • 野火stm32指南者开发板点亮LED
    目录1.芯片手册中的LED电路图2.官网手册3.代码演示3.1stm32f10x.h头文件3.2点亮绿灯3.3点亮蓝灯3.4点亮红灯3.5LED灯闪烁,绿灯闪烁。3.6红绿蓝三色LED灯切换闪烁1.芯片手册中的LED电路图2.官网手册3.代码演示3.1stm32f10x.h头文件#ifndef_STM32F10X_H#define_ST......
  • 01-了解STM32以及ARM
    目录一.ARM概念二.什么是STM32一.ARM概念1.ARM全称AcornRISCMachine(英国Acorn公司精简指令集机器).ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省35%,却能保留32位系统的所有优势.2.Acorn公司在英国,它本身并不生产芯片而是为芯片厂......
  • stm32 HAL UART DMA 发送
    MCU STM32H743IIT6     constuint8_tTEXT_TO_SEND[]={"ALIENTEKApolloSTM32H7DMA"};constuint8_tTEXT_TO_SEND2[]={"helloworld!"};externUART_HandleTypeDefhuart1;intmain(void){/*USERCODEBEGIN1*//*USERCODE......
  • STM32标准库实现Flash存储和读取
     在STM32F103C8T6微控制器上使用标准库实现Flash存储和读取数据可以通过以下步骤完成:首先,确保你已经配置好了STM32F103C8T6的Flash存储器。默认情况下,Flash存储器已经被分成了两个扇区,一个用于存放程序代码(MainFlashMemory),另一个用于存放数据(DataEEPROM)。在代码中包含s......
  • stm32 f103c8 clion 引入标砖库 CMakeLists.txt
    使用ClionIDE开发stm32使用标准库可以使用qemu代替开发版使用CMakeLists.txt编译项目set(CMAKE_SYSTEM_NAMEGeneric)set(CMAKE_SYSTEM_VERSION1)cmake_minimum_required(VERSION3.26)set(CMAKE_C_COMPILERarm-none-eabi-gcc)set(CMAKE_CXX_COMPILERarm-no......
  • 基于CUBEMX的STM32F4 Hal库,配置LVGL(无操作系统版)
    本篇文章移植思路适用于所有嵌入式MCU,包括Arm,STM32,NXP,乐鑫,Nuvoton,Arduino,RT-Thread,Zephyr,NuttX,Adafruit等等。为什么要写这一篇移植教程?也许你会说各种开源论坛上面上,已经有很多移植教程了,为什么还要再重新写一篇?因为很简单我按照前辈们的思路和移植步骤,到最后没有一个成功的,这......