基于STM32设计的门禁照相机

发布者:BlossomBeauty最新更新时间:2024-07-25 来源: elecfans关键字:STM32 手机看文章 扫描二维码
随时随地手机看文章

一、项目介绍

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


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


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

image-20230615205237018

二、硬件设计

本照相机的主要硬件包括 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?imageView2/2/w/1000' */

                 sprintf(filename, '%04d%02d%02d%02d%02d%02d.bmp?imageView2/2/w/1000', 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); // 防止连续拍照

         }

 

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

     }

 }


关键字:STM32 引用地址:基于STM32设计的门禁照相机

上一篇:STM32MP135强悍的性能介绍
下一篇:如何快速上手学习STM32

推荐阅读最新更新时间:2026-03-25 10:26

基于STM32的矿井作业环境监测系统设计与实现
针对煤矿开采中瓦斯爆炸等严重安全隐患,设计了一套矿井安全系统。该系统实时监测瓦斯浓度、温度、火情、粉尘等环境参数,自动控制除尘、灭火、通风等设备,以保障矿井安全。通过WiFi将数据传输至监控平台,并支持APP远程监控与操作,从而提升应急响应速度和管理效率。 PART 01 系统总体结构 系统实现了对矿井内甲烷气体体积分数、粉尘浓度、火焰及温湿度等关键参数的实时采集与分析;并通过预设的自动控制策略触发联动设备,实现安全隐患的快速响应与主动防控。同时,支持数据远程传输至云端平台,并通过机智云APP提供实时监控、报警及远程操控功能,为矿井安全管理提供高效、可靠的技术支撑。系统总体结构如图1所示。 PART 02 系统详细设计
[单片机]
基于<font color='red'>STM32</font>的矿井作业环境监测系统设计与实现
STM32驱动WS2811实现渐变色、跑马灯
一、WS2811简介 输出端口耐压12V 芯片内置稳压管,24V以下电源端只需串电阻IC到VDD脚,无需外加稳压管 灰度调节电路(256级灰度可调) 内置信号整形电路,任何一个IC收到信号后经过波形整形后在输出,保证线路波形畸变不会累加 内置上电复位和掉电复位电路 PWM控制端能够实现256级调节,扫描频率不低于400HZ/S 串行接口级联,一根信号线DI完成数据的接收与解码 任意两点传输距离不超过2米无需增加任何电路 当刷新速率30帧/秒时,低速模式级联数不小于512点,高速模式下不小于1024点 数据发送速度可达与400Kbps与800Kbps两种模式 二、通讯协议 数据协议采用单线归零码的通讯方式,
[单片机]
<font color='red'>STM32</font>驱动WS2811实现渐变色、跑马灯
【07】STM32备忘_RTC硬件电路设计
正点原子的 STM32F103官方文档
[单片机]
STM32单片机学习】第12章 GPIO—按键轮询
12.1 关于按键 前面控制LED灯是让GPIO输出高低电平,而获取按键则是读取GPIO电平,从而获知用户是否按下按键。 按键监测一般有两种:按键扫描和按键中断。按键扫描是间隔很短时间反复查询GPIO状态,从而得知是否有按键动作,这种方式代码简单,但比较耗资源。按键中断而是通过按键产生中断信号,从而实现按键的检测,这种方式需要使用到中断机制,需要对MCU了解深入一点,效果是最好的。 本节先介绍按键扫描,理解按键的基本原理,下一章再介绍按键中断,同时了解STM32F103的中断使用方法。 按键一般占用一个GPIO口,通过监测该GPIO的电平变化得知按键操作,典型的电路如图 12.1.1 所示。当所需按键比较多时,则可以采用矩阵按键减
[单片机]
STM32 USART学习
USART(同步异步串口通信) 在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。还可以使用DMA方式,实现高速数据通信 STM32 中的USART框图 框图 1、引脚编号 TX:发送数据输出 RX:接收数据串行输入 SCLK(位于最右边):发送器时钟输出,仅同步通信时使
[单片机]
STM32下载编程工具 | STM32CubeProg介绍、下载、安装和使用教程
STM32CubeProg介绍 STM32CubeProg(TM32CubeProgrammer)是针对STM32的一款多功能的编程下载工具。 STM32CubeProg提供图形用户界面(GUI)和命令行界面(CLI)版本。 STM32CubeProg还允许通过脚本编写选项编程和上传、编程内容验证以及编程自动化。 1.支持格式 Motorola S19 ELF bin hex 2.支持操作系统 Windows Linux macOS 3.支持调试和引导接口 ST-LINK:JTAG、 SWD Bootloader接口:UART、 USB DFU、 I2C、 SPI和CA 4.支持操作/功能 擦除 编程
[单片机]
STM32单片机学习】第8章 GPIO—LED点灯
本章实验的目的是通过LED点灯,让读者熟悉STM32F103最基本的外设GPIO。首先介绍了GPIO的一些基本概念和知识,然后介绍开发板LED灯部分硬件设计,再结合硬件进行软件设计,最后展示实验效果。本章阅读提示:8.1 关于GPIO(介绍GPIO的一些知识,刚开始概念有些多,读者慢慢理解)8.2 硬件设计(分析LED灯部分的硬件设计和RGB灯,需要理解)8.3 软件设计(讲解如何编写LED程序,需要重点理解)8.4 实验效果(展示实验效果,操作即可) 8.1 关于GPIO GPIO(General-Purpose IO ports,通用输入/输出接口),用于感知外界信号(输入模式)和控制外部设备(输出模式),如图 6.1
[单片机]
【<font color='red'>STM32</font>单片机学习】第8章 GPIO—LED点灯
【嵌入式】简评STM32单片机入门之路
【STM32可以做什么?】 STM32产品广泛应用于工业控制、消费电子、物联网、通讯设备、医疗服务、安防监控等应用领域。 【用寄存器还是库函数?】 STM32有两种编程方式,一种是用寄存器的方式,另一种是库函数的方式。对于初学者而言,可能后者较容易上手。 学从难处学,用从易处用。学习阶段,能学多深就尽量学多深,这样基础会打得比较牢。不只是为了学STM32而学STM32,我们的目标是:学完STM32,换另一款芯片也能很快上手。基础有多牢固,换另一款芯片上手就有多快。 【学习重点】 一些基本的、通用的、常用的外设:GPIO输入输出(点灯、按键)、EXIT、TIMER、UART、I2C、SPI、ADC、DAC等,这些用得多,先把这些
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved