STM32 智能家居项目 FreeRTOS 密码锁 指纹锁 GSM远程控制 设计报告
资料下载: https://download.csdn.net/download/vvoennvv/88503621
一、概述
使用STM32F407芯片,FreeRTOS系统,门禁支持密码输入、指纹输入;人体感应灯可实现家居环境中人体自动识别,并用来控制灯光部分的开、关以及延时功能;GSM远程控制通过手机远程向GSM模块发送短信,并识别短信的内容,根据器内容实现对家庭电器、窗帘、照明的本地或远程控制。
二,整体设计
2.1 密码系统
设计为有两个6位数字密码,并可以进入系统后选择修改密码。首先,系统会不断扫描是否有按键按下。当检测到密码输入时,会将输入的数值保存在一个字符串中,并显示“*”来防止偷窥,可以通过“显示”按键来显示或隐藏密码。密码最多输入6位。输入完成后按确认键,系统就会将字符串的密码一位位地和系统保存的密码进行比较,当存在不同时,系统会显示“密码错误”并清空输入的密码。输入密码正确则跳转进入系统的主界面。在主界面可以选择修改密码进入,然后选择密码修改。
2.2 指纹识别
(1)不断检测指纹;
(2)录入图像。当你的手指放在光学指纹窗口的时候执行这个指令,就可以把指纹的图像拍下来。
(3)生成特征。当你的指纹图像拍下来之后,调用这个指令就可以把图像中的指纹特征记录下来。AS608里面有2个缓存区可以存这个特征。
(4)搜索指纹。调用这个指令就会将已经存在Flash里面的指纹模板和缓存区的指纹特征一一比对,如果有搜索到,则开锁进入系统主界面。
要注意的是,调用的时候需要指明比对的特征是缓存区1还是缓存区2,即你要选择第二步生成的特征所存储的缓存区。
2.3 人体感应
人体红外检测模块HC-SR501只有三个管脚(VCC,GND,DATA),电源VCC和地GND,数据输出管脚DATA。当检测到有人体活动时,DATA输出高电平,平常没有检测到有人体活动时输出为低电平。
2.4 GSM远程控制
系统不断检测是否有短信输入,当接收到信息时,屏幕提示信息输入,并读取判断短信内容,如果短信中有“on”则开灯,有“off”则关灯,如果都没有则不执行退出。该开灯关灯功能都会使人体感应功能关闭,可在设置中恢复。
三,设计报告
在该项目的系统中我主要以stm32F407系列单片机作为主控芯片,正点原子STM32F4开发板的接口丰富,芯片功能强大,资源都可以灵活配置,可以方便的进行各种外设的实验和开发,适合新手的开发学习。
门禁系统方面主要有密码输入部分和指纹识别部分组成。密码输入部分我选择4*4的键盘输入模块,该模块结构简单,易于连接实现密码键盘功能。通过对键盘的按键不断扫描,可以检测被按下的按键,进而确定用户的密码输入。通过编程实现将输入密码一位位与系统保存的密码相比较。正确密码后,主控芯片就会发送指令控制继电器驱动进行开锁,输入密码错误则会提示错误信息。进入系统内部后,能对用户的密码进行修改功能。这里就要用到stm32内部的flash来存储密码。将修改后的密码写入到flash中,防止密码掉电后丢失。
指纹模块部分则使用as608指纹模块,ATK-AS608指纹识别模块是一款比较成熟的指纹模块,官方提供了指纹录入、指纹识别、指纹删除等一系列功能,方便我们进行设计调用。通过给AS608发送特定的指令,就可以调用里面的算法,进行相应的指纹操作。所以我们编程实现,系统开机就会自动读取模块中存储的指纹方便进行比对,然后不断检测指纹模块是否有指纹输入,检测到指纹后调用指纹匹配指令进行指纹对比,匹配成功则开锁进入系统总界面,匹配失败则显示错误信息。开锁后可以选择进行添加指纹、删除指纹的操作。添加指纹时,系统发送添加指纹指令,然后与指纹模块通讯一步步进行指纹录取,最后通过4*4按键模块输入指纹ID存储进指纹模块当中;删除指纹,调用模块的删除指纹指令,然后使用4*4按键模块进行输入指纹ID进行删除,也可以选择一键清空操作。
人体识别控制灯光部分使用HC-SR501人体检测模块来实现,当该模块检测到有人体靠近的时候,模块引脚就会输出高电平到开发板,开发板检测到电平的输入后,控制连接灯光的引脚输出,来达到人体识别控制灯光的目的。当我们进入系统控制界面时,就可以选择灯光设置来对灯光各项参数进行设置。该灯光设置部分需要有总的开关控制和延时设置。总开关设置,该部分通过定义一个全局变量来判断控制实现。当总开关按钮按下,先判断全局变量是0还是1,是0说明灯功能是开着的,就进行关灯并将全局变量置1;反之是1说明灯是关闭的,就开灯并将全局变量置0。延时设置,用户可以直接通过4*4按键模块输入需要的延时数值,确定后该数值会存储到系统内部flash,每一次亮灯前都会先自动读取flash中的数值,确定延时时间再进行亮灯。这样就能方便精确地去控制灯光的延时时间了。
短信远程控制家电部分采用sim800c实现短信的接收、和开发板通讯。开发板系统可以通过调用模块的指令实现与模块的通讯和模块功能的设置。系统开机时,我们首先需要通过串口与sim800c建立通讯,检测sim卡是否正常。通讯成功后,系统需要不断检测串口的输入,检测到有短信传入后有显示提示,然后直接读取短信内容,检测短信内容字符串中是否含有“开灯”、“关灯”等操作内容,有则执行相关操作否则当作其他短信过滤掉。
关于系统的显示,我们采用正点原子的2.8寸电阻触摸屏进行显示,使系统的操作界面简洁明了便于操作,同时显示返回错误信息,提醒用户。最后将这些模块和功能都集合到一起,就能构建成我们的系统作品了。
3.3可能出现的工作难点与拟解决的方法
其中的难点就是实现开发板与各部分模块的正确通讯,还有各部分功能的组合,协调不发生冲突。在此,查阅了有关资料,决定采用freertos操作系统来实现各部分功能任务协调执行。将需要实时检测执行的功能任务设置成高优先级,随时去执行,而缺少实时性的任务设置成低优先级。在执行后或不执行时通过延时挂起函数来暂时挂起高优先级任务,去执行低优先级的任务。这样就能解决各功能任务相互冲突的问题了。
四,总结
一个学习STM32不可多得的项目,通过该项目可以熟悉STM32各种片内资源的使用。