基于STM32的智能门锁控制系统设计

引言

本项目基于STM32微控制器设计了一个智能门锁控制系统,用户可以通过密码输入或指纹识别来控制门锁的开关。该系统集成了键盘、指纹传感器、舵机等外设,实现了门锁的安全、便捷控制,同时也具备了较强的扩展性。该项目展示了STM32在安防领域的应用。

环境准备

1. 硬件设备
  • STM32F103C8T6 开发板(或其他 STM32 系列)
  • 4x4 矩阵键盘(用于密码输入)
  • 指纹传感器模块(如 R307)
  • 舵机(用于控制门锁开关)
  • 蜂鸣器(用于提示音)
  • OLED 显示屏(用于显示状态)
  • 面包板和杜邦线
  • USB-TTL 串口调试工具
2. 软件工具
  • STM32CubeMX:用于初始化 STM32 外设。
  • Keil uVision 或 STM32CubeIDE:用于编写和下载代码。
  • ST-Link 驱动程序:用于下载程序到 STM32。

项目实现

1. 硬件连接
  • 矩阵键盘连接:将 4x4 键盘的行和列引脚连接到 STM32 的 GPIO(如 PB0-PB7)上,用于读取按键输入。
  • 指纹传感器连接:将指纹传感器的 TX 和 RX 引脚分别连接到 STM32 的 UART 接口(如 PA9 和 PA10)。
  • 舵机连接:将舵机的信号引脚连接到 STM32 的 PWM 引脚(如 PA8),用于控制舵机开合门锁。
  • 蜂鸣器连接:将蜂鸣器的控制引脚连接到 STM32 的 GPIO 引脚(如 PA3),用于发出提示音。
  • OLED 显示屏连接:将 OLED 显示屏的 SDA 和 SCL 引脚连接到 STM32 的 I2C 接口(如 PB6 和 PB7)。
2. STM32CubeMX 配置
  • 打开 STM32CubeMX,选择你的开发板型号。
  • 配置系统时钟为 HSI 以确保系统稳定。
  • 配置 GPIO 引脚用于矩阵键盘、蜂鸣器、舵机控制。
  • 配置 UART 用于指纹传感器通信。
  • 配置 I2C 用于 OLED 显示屏控制。
  • 生成代码,选择 Keil 或 STM32CubeIDE 作为工具链。
3. 编写主程序

在生成的项目基础上,编写密码输入、指纹识别、舵机控制以及 OLED 显示屏显示的代码。以下是智能门锁控制系统的基本代码示例:

#include "stm32f1xx_hal.h"
#include "fingerprint.h"
#include "keypad.h"
#include "servo.h"
#include "oled.h"// 密码和指纹 ID
const char correct_password[] = "1234";  // 预设的密码
uint8_t authorized_fingerprint_id = 1;   // 预设的指纹 ID// 函数声明
void Lock_Control(uint8_t state);
uint8_t Check_Password(void);
uint8_t Check_Fingerprint(void);
void System_Init(void);// 初始化系统
void System_Init(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();MX_I2C1_Init();OLED_Init();Keypad_Init();Servo_Init();Fingerprint_Init();OLED_ShowString(0, 0, "Welcome");
}// 控制舵机打开或关闭门锁
void Lock_Control(uint8_t state)
{if (state == 1){Servo_Open();  // 打开门锁OLED_ShowString(0, 1, "Lock Open");}else{Servo_Close();  // 关闭门锁OLED_ShowString(0, 1, "Lock Closed");}
}// 检查密码输入
uint8_t Check_Password(void)
{char input[5] = {0};OLED_ShowString(0, 0, "Enter Password:");for (uint8_t i = 0; i < 4; i++){input[i] = Keypad_GetKey();  // 获取按键输入OLED_ShowChar(i * 8, 1, '*');  // 显示星号代替密码HAL_Delay(500);  // 防抖延时}return (strcmp(input, correct_password) == 0);  // 返回密码比对结果
}// 检查指纹
uint8_t Check_Fingerprint(void)
{OLED_ShowString(0, 0, "Place Finger:");uint8_t result = Fingerprint_Scan();  // 扫描指纹if (result == authorized_fingerprint_id){OLED_ShowString(0, 1, "Fingerprint OK");return 1;}else{OLED_ShowString(0, 1, "Fingerprint Fail");return 0;}
}int main(void)
{System_Init();while (1){// 检查密码输入if (Check_Password()){Lock_Control(1);  // 密码正确,打开门锁HAL_Delay(5000);  // 保持门锁打开5秒Lock_Control(0);  // 关闭门锁}// 检查指纹if (Check_Fingerprint()){Lock_Control(1);  // 指纹正确,打开门锁HAL_Delay(5000);  // 保持门锁打开5秒Lock_Control(0);  // 关闭门锁}HAL_Delay(1000);  // 每秒更新一次状态}
}
4. 密码输入处理

以下是矩阵键盘处理密码输入的代码示例:

#include "keypad.h"// 初始化键盘
void Keypad_Init(void)
{// GPIO 初始化代码
}// 获取按键输入
char Keypad_GetKey(void)
{// 轮询键盘,返回按下的按键字符char key = '0';  // 示例,实际需要轮询检测return key;
}
5. 指纹识别处理

以下是指纹识别模块的基本代码示例:

#include "fingerprint.h"// 初始化指纹模块
void Fingerprint_Init(void)
{// UART 初始化代码
}// 指纹扫描
uint8_t Fingerprint_Scan(void)
{// 模拟指纹识别return 1;  // 假设返回的指纹ID为1
}
6. 舵机控制

通过 PWM 控制舵机开合门锁:

#include "servo.h"// 初始化舵机
void Servo_Init(void)
{// PWM 初始化代码
}// 打开门锁
void Servo_Open(void)
{// 设置舵机角度,打开门锁
}// 关闭门锁
void Servo_Close(void)
{// 设置舵机角度,关闭门锁
}
7. OLED 显示处理

用于显示状态和提示信息:

#include "oled.h"// 初始化 OLED
void OLED_Init(void)
{// I2C 初始化代码
}// 显示字符串
void OLED_ShowString(uint8_t x, uint8_t y, char *str)
{// 在 OLED 上显示字符串
}// 显示字符
void OLED_ShowChar(uint8_t x, uint8_t y, char chr)
{// 显示单个字符
}

⬇帮大家整理了单片机的资料

包括stm32的项目合集【源码+开发文档】

点击下方蓝字即可领取,感谢支持!⬇

点击领取更多嵌入式详细资料

问题讨论,stm32的资料领取可以私信!

 

8. 系统工作原理
  • 密码输入:用户通过4x4键盘输入密码,系统对比输入的密码和预设密码,若匹配则打开门锁。
  • 指纹识别:用户可以通过指纹传感器进行身份验证,指纹匹配时系统打开门锁。
  • 舵机控制:使用舵机通过PWM信号控制门锁的开合。
  • 状态显示:OLED显示屏用于显示输入状态、门锁状态以及提示信息,提升用户体验。

常见问题与解决方法

1. 密码输入无反应
  • 检查键盘连接是否正确,确保行列引脚与 STM32 的 GPIO 引脚对应。
  • 检查键盘驱动代码,确保轮询或中断处理键盘按键。
2. 指纹识别失败
  • 确保指纹传感器的 UART 通信配置正确,波特率匹配。
  • 检查指纹库中是否已注册指纹,确保指纹 ID 一致。
3. 舵机无法控制门锁
  • 确认舵机的 PWM 信号是否正常,检查舵机的供电是否充足。
  • 调整 PWM 的脉宽,确保舵机的角度控制准确。

结论

通过本项目,我们成功设计了基于STM32的智能门锁控制系统,实现了通过密码和指纹识别来控制门锁开关的功能。该系统具有较强的安全性和便捷性,可应用于智能家居和安防系统中,展示了STM32在物联网设备控制领域的强大功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 FMEA软件的智能制造质量控制策略_SunFMEA软件

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。一站式数智工厂解决方案服务商】 在智能制造的大背景下&#xff0c;制造业正经历着深刻的变革&#xff0c;质量控制也面临着新的挑战和机遇。FMEA&#xff08;失效模式与影响分析&#xff09;作为一…

躺平成长-运营日记-第三天

开源竞争&#xff1a; &#xff08;自己没有办法完全掌握技术的时候就开源掉&#xff0c;培养出更多的技术依赖&#xff0c;让更多的人完善你的技术&#xff0c;那么这不就是在砸罐子吗&#xff1f;一个行业里面你不去砸罐子&#xff0c;其他人就会砸罐子&#xff0c;你不如先砸…

中文文本分类 pytorch实现

前言 使用pytorch实现了TextCNN&#xff0c;TextRNN&#xff0c;FastText&#xff0c;TextRCNN&#xff0c;BiLSTM_Attention&#xff0c;DPCNN&#xff0c;Transformer&#xff0c;开箱即用。 中文数据集 我从THUCNews&#xff1a;THUCTC: 一个高效的中文文本分类工具中抽取…

JAVA利用方法实现四道题

目录 1.给定一个字符串 s &#xff0c;找到 它的第一个不重复的字符&#xff0c;并返回它的索引 。如果不存在&#xff0c;则返回-1 2.计算字符串最后一个单词的长度&#xff0c;单词以空格隔开。&#xff08;注&#xff1a;字符串末尾不以空格为结尾&#xff09; 3.如果在将所…

前端三件套(HTML + CSS + JS)

前言&#xff1a; 前端三件套&#xff0c;会用就行 毕竟在后面学习JavaWeb&#xff0c;以及在学习vue的时候也有帮助 前端三件套&#xff1a; HTML 定义网页的结构和内容。CSS 负责网页的样式和布局。JavaScript 添加动态交互和功能。 使用到的工具是Visual Studio Code 即…

Android -- [SelfView] 自定义圆盘指针时钟

Android – [SelfView] 自定义圆盘指针时钟 ps:简约圆盘指针时钟&#xff0c;颜色可调、自由搭配&#xff1b;支持阿拉伯数字、罗马数字刻度显示&#xff1b;效果图 使用&#xff1a; <!-- 自定义属性参考 attrs.xml 文件 --> <com.nepalese.harinetest.player.Virg…

边缘计算【智能+安全检测】系列教程--agx orin解决RTC时间问题

因为是离线运行&#xff0c;首要问题是时间不准确&#xff0c;就在主板上加装了纽扣电池&#xff0c;但是会有一系列问题&#xff0c;比如无法将RTC时间回写到系统时间&#xff0c;或者无法将系统时间写到RTC中等等一些列问题。为解决这些问题&#xff0c;一劳永逸的方式&#…

智能家居10G雷达感应开关模块,飞睿智能uA级别低功耗、超高灵敏度,瞬间响应快

在当今科技飞速发展的时代&#xff0c;智能家居已经逐渐成为人们生活中不可或缺的一部分。从智能灯光控制到智能家电的联动&#xff0c;每一个细节都在为我们的生活带来便利和舒适。而在众多智能家居产品中&#xff0c;10G 雷达感应开关模块以其独特的优势&#xff0c;正逐渐成…

【源码+文档】基于SpringBoot+Vue旅游网站系统【提供源码+答辩PPT+参考文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

Python Matplotlib:基本图表绘制指南

Python Matplotlib&#xff1a;基本图表绘制指南 Matplotlib 是 Python 中一个非常流行的绘图库&#xff0c;它以简单易用和功能丰富而闻名&#xff0c;适合各种场景的数据可视化需求。在数据分析和数据科学领域&#xff0c;Matplotlib 是我们展示数据的有力工具。本文将详细讲…

开源库 FloatingActionButton

开源库FloatingActionButton Github:https://github.com/Clans/FloatingActionButton 这个库是在前面这个库android-floating-action-button的基础上修改的&#xff0c;增加了一些更强大和实用的特性。 特性&#xff1a; Android 5.0 以上点击会有水波纹效果 可以选择自定义…

【Hello World 】

【Hello World 】! C语言实现C实现Java实现Python实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 几乎每一个程序员都是从Hello World!开始自己的程序人生&#xff0c;作为一个初学编程的小朋友&#xff0c;也需要先编程来输出Hello Wo…

从实验室到生活:超分子水凝胶湿电发电机的应用之路

大家好&#xff01;今天来了解一种新型的绿色湿电发电机&#xff08;MEG&#xff09;——《Green moisture-electric generator based on supramolecular hydrogel with tens of milliamp electricity toward practical applications》发表于《nature communications》&#xf…

零基础学习Java AI Spring AI

零基础学习Java AI Spring AI 随着人工智能&#xff08;AI&#xff09;技术的超速发展&#xff0c;越来越多的开发者开始将目光投向AI应用的开发。作为一名java程序员&#xff0c;如果不转型就会面临淘汰&#xff0c;程序员的世界就是这么的实现。 现在&#xff0c;市面上大多…

【周末推荐】Windows无缝连接iPhone

关注“ONE生产力”&#xff0c;获取更多精彩推荐&#xff01; 又到了周末推荐时间了&#xff0c;今天我们介绍一个Windows内置的功能&#xff0c;能够帮助大家将自己的电脑和iPhone连接在一起。 很多用Windows的小伙伴羡慕macOS可以和iPhone无缝连接&#xff0c;轻松阅读和回…

OV5640摄像模组从入门到精通(1)

本文内容参考&#xff1a; 《OmniVision OV5640 datasheet》 《OV5640 Camera Module — Software Application Notes》 OV5640学习_ov5640手册-CSDN博客 OV5640手册解读-CSDN博客 【FPGA】摄像头模块OV5640-CSDN博客 Camera开发-OV5640(MIPI)-CSDN博客 特此致谢&#x…

el-table type=“selection“换页多选数据丢失的解决办法

element里有一个 reserve-selection属性 设置以后就可以保留之前选中的选项&#xff0c;但还要设置row-key 代码如下&#xff1a; <el-tableref"mytable":data"HostRows"borderv-loading"loading"element-loading-text"正在加载中...&q…

CPU算法分析LiteAIServer视频智能分析平台视频诊断对比度检测:提升视频监控质量的关键技术

在现代安防、工业生产、智能家居等领域&#xff0c;视频监控系统扮演着至关重要的角色。然而&#xff0c;视频质量的好坏直接影响到监控效果&#xff0c;而对比度作为衡量图像质量的重要指标之一&#xff0c;对于视频内容的清晰度和细节表现至关重要。为了应对这一挑战&#xf…

双向 Type-C 转 DP 线:高清视频输出的灵活解决方案

在当今数字化生活中&#xff0c;人们对高效能和高清晰度的需求日益增长。双向 Type-C 转 DP 线应运而生&#xff0c;它以其灵活便捷的特点&#xff0c;为用户提供了一种高清视频输出的解决方案。本文将详细介绍双向 Type-C 转 DP 线的技术原理、适用设备、性能参数以及市场选择…

萤石设备视频接入平台EasyCVR私有化部署视频平台高速公路视频上云的高效解决方案

经济的迅猛发展带来了高速公路使用频率的激增&#xff0c;其封闭、立交和高速的特性变得更加显著。然而&#xff0c;传统的人工巡查方式已不足以应对当前高速公路的监控挑战&#xff0c;监控盲点和响应速度慢成为突出问题。比如&#xff0c;非法占用紧急车道的情况屡见不鲜&…