版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计以STM32为基础的智能储物柜系统设计目录TOC\o"1-2"\h\u摘要 概述1.1选题背景及实际意义快递服务已经成为人们日常生活中必不可少的一环。而传统的储物柜则不能及时通知用户快递已送达。为了解决这一问题,智能储物柜系统的设计就很有实际意义了。通过综合微控制器、GSM通信模块、OLED显示屏和矩阵键盘等技术,智能储物柜系统满足了快递员与客户之间的便捷沟通这一需求。首先,用户和快递员都可以在存货后通过储物柜的通信功能,及时给另一方发送取货验证码,另一方收到验证码后也可以及时响应。二是验证码开锁功能保证了储物柜只有授权人员才能开启,使其安全性得到了提高。此外,系统还可以区分不同大小的箱体,方便快递员选择合适的储物柜进行存货REF_Ref18922\r\h[1]。智能储物柜系统在实际运用中具有很大的应用前景和实际意义。首先,对于物流和电商行业而言,该系统可以提高快递配送的效率和准确性,减少人力成本。其次对于用户而言,能够随心所欲地对快递进行存取,可以节省自己的时间和精力。同样,智能储物柜系统还能应用于超市货架管理、外卖寄存等场景,为不同的场景提供方便快捷的存取方案REF_Ref31236\r\h[2]。1.2国内外研究现状智能储物柜系统是目前国内外研究和应用较多的一种系统。研究人员致力于提升储物柜系统的安全性、便捷性和智能性。现将部分研究方向及结果介绍如下:通信技术:研究人员运用了多种通信手段,包括GSM、蓝牙和物联网等,实现快递员和用户之间的便捷沟通。安全技术:研究者们关注储物柜系统的安全性,采用验证码解锁等技术,确保仅授权人员可以进行开锁操作。远程控制:通过手机应用或网页远程控制储物柜,进行存取快递、开锁等操作REF_Ref388\r\h[3]。快递追踪:通过物联网技术和传感器实现快递状态的实时监控和追踪REF_Ref19585\r\h[4]。用户提醒:系统可以通过短信、推送通知等方式,及时提醒用户有快递到达或快递即将过期。电商物流:提升快递配送效率和精准度的智能储物柜系统被广泛应用于电商物流领域。社区服务:将智能储物柜系统安装到社区或者公寓,方便居民存取快递、外卖等物品REF_Ref19833\r\h[5]。综上所述,智能储物柜系统在国内外的研究中涉及了多种技术手段和功能设计,旨在提高储物柜的安全性、便捷性和智能化水平。这些研究成果在电商物流、社区服务等领域具有重要的应用价值。1.3课题主要内容本次设计以STM32为核心设计了智能储物柜系统,并实现了如下几个功能。实现通信模块与用户的手机通信功能。实现矩阵键盘的验证码开锁功能和储物柜选择功能。实现OLED显示屏的各种界面显示功能。实现继电器模拟储物柜的开启/关闭功能。实现声光报警功能。2系统设计方案2.1系统基本功能本设计的智能储物柜系统具有以下基本功能:使用人员可以通过身份选择按键S4和S8去选择身份为快递员还是用户。选择身份为快递员后,快递员可以通过矩阵键盘功能按键S12选择存快递选项,然后通过矩阵键盘数字键S1、S2、S3三个键选择储物柜的大、中、小三个型号其中之一打开并存放好快递,然后再通过矩阵键盘数字键输入用户手机号码,最后由通信模块发送随机的6位验证码到用户手机上。选择身份为用户后,用户可以通过矩阵键盘功能键S16选择取快递选项,并通过矩阵键盘数字键输入手机接收到的6位验证码,验证码输入无误,则储物柜门自动打开,用户可以进行快递拿取;若验证码输入有误,储物柜就会当场发出声光报警。用户同样可以选择存快递选项并通过矩阵键盘输入快递员的手机号码让通信模块给快递员发送6位验证码,快递员接收到验证码后则可以通过取快递选项进行取快递。图1系统基本功能组成图2.2系统整体方案图2系统组成图该智能储物柜系统以STM32单片机为核心控制器,分为控制器、输入部分和输出部分三大模块。1、控制器:单片机负责接收输入部分的数据,并进行内部处理,最终控制输出部分的各个模块。2、输入部分:(1)按键模块除了用于选择身份、选择储物柜、选择快递的存/取以及代表删除和确认的功能按键以外,还有用于输入手机号码、验证码的数字按键。(2)电源模块为各个模块进行供电,确保系统稳定运行。3、输出部分:(1)显示模块:用于显示身份选择、快递员存/取选择、用户存/取选择、储物柜型号、空/满等界面。(2)继电器模块:包括三个继电器,用于模拟大、中、小三个储物柜的开启和关闭。(3)报警模块:由蜂鸣器和LED灯组成,用于在验证码输入错误时发出声光警报。(4)通信模块:采用GSM通信模块,在有快递员来存快递的时候,GSM通信模块会给用户手机发送验证码。3硬件设计与分析3.1单片机的选择相比于其他设计,单片机设计是最佳选择。微控制器的设计方案和价格政策与法规的总数相对较低。根据目前的标准要求,集成IC具有较高的处理速度,较小的尺寸和良好的稳定性。各种功能组件都集成在集成IC上,应用系统总线减少了集成IC之间的连接,并进一步提高了微电源的稳定性和抵抗静音工作的能力。另外,由于小型单片机的尺寸小,因此便于磁屏蔽材料使用或进行密封措施,并且还适用于在极端标准下工作。在众多单片机类型中STM32F103C6T6和STC89C52的使用较为常见,现通过性能参数的对照来选择两者中更加合适的方案。STM32F103C6T6和STC89C52的参数对照如表1所示。表1STM32F103C6T6和STC89C52参数对照表单片机类型STM32F103C6T6STC89C52核心尺寸32位8位I/O口总数37个32个最高运作频率72MHz35MHz内存RAM容量20KB512字节FLASH存储器容量64KB8KB外设ADC、I2C、IrDA,LIN、PI、UART/USART、USB等串口、定时器、中断等低功耗模式睡眠/停机/待机模式空闲/掉电模式开发工具/环境GCCKeil
MDKSTM32CubelDEIAR
Embedded
WorkbenchSDCCKeilC51IAR
Embedded
WorkbenchSTC89C52产品系列的微处理器设计在关键网络媒体上有许多解决方案,包括官方网站资源,包括开发软件和系统配置。但是它的性能比较孱弱,8051内核单片机放到现在显然已经略显过时。STM32F103C6T6是一款微控制器,核心为32位ARMCortex-M3,而STC89C52则为8位单片机。因此,STM32F103C6T6在运算速度和存储容量方面拥有显著优势。而且STM32F103C6T6还内置了丰富的外设,如多个定时器、UART、SPI、I2C、USB、ADC等,使其适用于更多的应用场景,而STC89C52的外设相对较少,功能相对有限。除此以外,STM32F103C6T6具备多种低功耗模式,而STC89C52的低功耗模式相对较基础。在软件开发方面,STM32F103C6T6支持Keil、IAR等广泛的开发工具和集成开发环境,拥有强大的生态系统和丰富的技术支持,使开发人员开发调试应用程序更加方便。由于STM32系列在工业和嵌入式领域广泛使用,开发者可以轻松获取到大量的参考文档、示例代码和社区支持,这有助于快速解决问题和学习新的技术。STM32F103C6T6还拥有较大的Flash存储器和RAM容量,可以存储更多的程序代码和数据,而STC89C52的存储空间相对有限。尽管STM32F103C6T6的价格可能稍高于STC89C52,但考虑到其性能和功能优势,它提供了更好的性价比,适合需要高性能的应用场景。总体而言,STM32F103C6T6在性能、功能、开发环境等方面都优于STC89C52单片机,适用于更复杂和要求较高性能的项目。STM32F103C6T6和STC89C52分别如图3、图4所示。图3STM32F103C6T6单片机图4STC89C52单片机综合考虑以上因素,最终选择了STM32F103C6T6单片机,其最小系统如图5所示。图5STM32F103C6T6单片机最小系统STM32F103C6T6单片机最小系统的复位电路是确保系统启动和恢复可靠的重要环节。复位电路采用多种机制,以确保系统在各种情况下能够可靠、稳定地恢复到初始状态。首先,复位引脚(NRST)是一个专门的引脚,用于外部触发复位操作。当复位引脚被拉低时,微控制器会进入复位状态,将所有寄存器和状态清除,系统重新初始化REF_Ref10049\r\h[6]。这是最常见的复位触发方式。其次,电源上电复位(POR)是监测电源电压的机制。如果电源电压不稳定或低于一定阈值,复位电路将触发电源上电复位,将微控制器带到初始状态,确保系统在电源供电时能够正常启动。另外,低功耗复位(LPWR)是为了应对低功耗模式下的复位需求。当系统从低功耗模式唤醒时,复位电路会执行低功耗复位,确保系统在从低功耗模式恢复时能够正确初始化。最后,看门狗定时器复位(WDT)是通过监控系统运行情况来预防死锁或无响应。如果系统在一定时间内没有更新看门狗计数器,看门狗定时器会触发复位操作,将系统恢复到初始状态。综上所述,STM32微控制器的复位电路保证了系统在各种情况下都能可靠地启动和恢复,并通过外接脚板触发、电源监控、低功耗模式处理以及看门狗计时器等多重机制保证系统运行稳定。本设计主要采用的为电源上电复位和手动复位。图6复位电路3.2电源模块的选择开关电源的选择直接关系到系统软件的可靠性。电源的选择至关重要,适合的电源会给系统带来更少的麻烦。因此,提前准备2个方案是有必要的。现在通过如下对比来证明这两个方案的优劣,最后确定相对较好的方案REF_Ref22779\r\h[7]。方案1:通过选择合适的电源变压器和相应的集成电路芯片,有效地降低了工作电压并实现了智能驱动软件设计。该方案已经过验证并且相对稳定。具体方案显示在图7中。在市场上,可以看到它的价格较为实惠,但是集成IC比较简单。图7LM7805稳压电路原理图方案2:使用5V开关电源直接驱动。选取一款适配器,以确保提供稳定的5V电压。在电源变压器的连接处增加一个电解电容器可以很好地滤除电路中的噪声和无用的谐波REF_Ref26840\r\h[8]。电源电路的可靠性可以更强。具体方案显示在图8中。在两个方案的对比下,方案2相对于方案1更加便宜可靠。因此,根据成本和可靠性,最终选择方案2。图8电源电路原理图3.3按键模块的选择按键模块选用DIP-6X6X5型号的方形按键开关,其基本参数如表2所示,原理图如图9所示。表2DIP-6X6X5型号方形按键开关参数型号DIP-6X6X5尺寸6x6x5mm操作类型通常是单极单刀(SPST)类型,意味着它只有一个触点,并且只能打开或关闭一个电路操作力一般操作力在60gf至120gf之间额定电流/电压几毫安至几安的电流和几伏至几十伏的电压工作温度范围通常工作温度范围为-25°C至+70°C用途DIP-6X6X5按键通常用于各种电子设备和电路中,如键盘、遥控器、电子玩具、电子仪器等,作为触发或选择功能的开关元件图9矩阵按键原理图3.4显示模块的选择在选择显示模块时,需要考虑多个方面,包括产品结构、产品优势和使用场景等。为此准备了两个常见的方案进行对比,最后选择更好的那个方案。方案1:数码管显示。数码管显示系统通过连接到控制面板上的CF卡进行操作和管理,可以展示多种引人注目的实际效果和界面显示图像标识符。每个数码管拥有6、8或16像素,可实现离线操作或与电子计算机连接以实现实时控制。数码管优势在于便捷的操作和更换,只需将已编译的文件格式复制到CF卡中。数码管控制面板可独立操作,并且能够通过多套网络进行控制。该系统的安装和编辑方法非常灵活,适用于各种复杂的项目需求。它可广泛应用于各种广告显示、娱乐设备、数字时钟、家用电器、电子仪器仪表及其他场所。然而,数码管显示的内容较为单一。方案2:OLED12864液晶显示屏。显示更清晰,实际操作更简单,液晶显示器的光更对称,使用寿命更长,环保性更强。OLED显示屏集成了电子信息技术和信息资源管理。具有色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等多项优势。最终本次选择的显示模块为OLED12864液晶显示屏。该显示屏采用点阵式显示,通过取字模的方式进行显示,该显示屏的显示较为清楚,而且这款液晶屏的价格很低,此次选择4脚的显示屏是通过I2C进行通信,更加节省单片机的GPIO资源REF_Ref17746\r\h[9]。OLED12864液晶显示屏基本参数如表3所示,接口信息如图10所示。表3OLED12864液晶显示屏参数型号OLED12864分辨率128x64尺寸0.96寸工作电压3.3V或5V范围内响应时间OLED显示屏响应速度较快,可以实现高速刷新和流畅的图像显示显示技术OLED显示屏具有自发光特性,无需背光,能够实现高对比度图10OLED12864显示屏模块接线图3.5继电器模块的选择用三个SRD-05VDC-SL-C继电器分别模拟大、中、小三个储物柜。该继电器的基本参数如表4所示:表4SRD-05VDC-SL-C通用型功率继电器参数表型号SRD-05VDC-SL-C输入电压直流5V输出电压最高250V交流电压;最高30V直流电压触发电流20mA负载电流10A触发方式通常采用电压触发,当输入电压达到或超过继电器的触发电压时,继电器吸合;当输入电压低于继电器的释放电压时,继电器断开。应用范围适用于各种家用电器、电动工具、工业控制、通信设备、智能家居、照明、新能源设备、汽车控制等领域这些参数表明SRD-05VDC-SL-C继电器是一种适合多种应用的功率继电器,如图11,它能够支持较高的电流和电压,适用于多种领域,这也是选择该继电器的原因。图11继电器模块原理图3.6报警模块的选择报警模块由声音模块和LED模块组成;声音模块选用常见的蜂鸣器,如图12;LED模块选用常见的LED灯,如图13;由蜂鸣器和LED灯共同的组成声光报警系统REF_Ref16423\r\h[10]。当取货验证码输入错误时便会触发声光报警,此时LED灯亮起,蜂鸣器响起。图12声音模块原理图图13LED模块原理图3.7通信模块的选择功能需求:首先要明确项目的功能需求,确定需要的通信功能和性能指标。如果只需要基本的短信和语音通信功能,SIM800C就足够满足要求。如果需要更高速的数据传输和更广泛的网络覆盖,可以考虑选择4G模块。网络覆盖:考虑项目所在地区的网络覆盖情况。如果项目所在地区4G网络覆盖较好,且需要快速数据传输,那么选择4G模块可能更适合。如果网络覆盖不稳定或者只需要基本的通信功能,SIM800C是一个可靠的选择。成本和功耗:SIM800C相对于4G模块来说,成本较低且功耗较低。考虑到本次项目只需要基本的通信功能,且成本和功耗有限,所以选择SIM800C通信模块。SIM800C通信模块是基于GSM/GPRS技术的通信模块,其工作原理如下:电源供给:SIM800C模块需要接收电源供给,通常是通过连接到电池或外部电源来提供工作电压。通信网络连接:SIM800C模块内置了GSM/GPRS通信功能,可以通过SIM卡与移动通信网络进行连接。首先,SIM800C模块会搜索可用的移动网络运营商,并与其建立通信连接REF_Ref22035\r\h[11]。AT指令控制:SIM800C模块与外部主控设备(如STM32)通过串口进行通信,通过发送AT指令对模块的各项功能进行控制。AT指令是一种通用的控制指令集,用于控制和配置SIM800C模块的各种功能和参数REF_Ref12887\r\h[12]。通信功能:SIM800C模块支持SMS、语音通话和数据传输等通信功能。通过发送相应的AT指令来进行发送/接收短信、拨打/接听电话、传送数据等多种操作手段。数据处理:SIM800C模块可以处理接收到的短信和数据,可以将其解析并传递给外部主控设备进行进一步处理。同时,外部主控设备发送的数据也可以通过GPRS通信网传输到目标设备上。总体而言,SIM800C模块通过与移动通信网络建立连接,通过AT指令控制实现短信、语音通话和数据传输等通信功能,为嵌入式设备提供了与移动通信网络沟通的能力。SIM800C的基本参数如表5所示。接口信息如图14所示。表5SIM800C的基本参数型号SIM800CC通信技术支持2G网络,包括GSM/GPRS/EDGE,适用于基于2G网络的通信应用尺寸紧凑小巧,适合嵌入式应用工作频段支持多个频段,包括850/900/1800/1900MHz等,可在全球范围内使用数据传输速率支持最高为GPRSClass12的数据传输速率电源要求工作电压通常为3.4V至4.4V,典型值为3.8V,支持电池供电,适用于移动设备和便携式应用温度范围通常工作温度范围为-40°C至+85°C功能特性支持短信、语音通话、GPRS数据传输、HTTP/FTP协议、TCP/IP协议等功能,适用于物联网、远程监控、定位跟踪等应用图14SIM800C通信模块接口图
4系统程序设计4.1编程软件介绍Keil5是一款专业的嵌入式系统开发工具,它提供了一套完整的开发环境,包括编译器,调试器和仿真器等功能。使用Keil5编写代码有以下优势:1、集成开发环境(IDE):Keil5提供了一个统一的集成开发环境,集编辑、编译、调试和仿真于一体,简化了开发流程,提高了工作效率REF_Ref31964\r\h[13]。2、广泛支持微控制器:Keil5支持多种微控制器的开发,包括常见的ARM
Cortex-M系列、8051系列等,满足了不同项目对微控制器的选择需求。3、优秀的编译器:Keil5内置ARM公司研发的编译器,具备出色的代码优化和生成能力,产生高效且紧凑的目标代码,有助于提升程序运行效率。4、直观的图形界面:Keil5采用直观的图形用户界面,使得开发者可以方便地进行代码编写、编译、调试等操作,降低了学习曲线,提高了开发效率。5、强大的工具链支持:Keil5提供了丰富的工具链支持,包括与其他工具的集成、外部设备的支持等,能够满足复杂项目的开发需求。综合考虑上述因素,Keil5是一款功能强大的嵌入式系统开发工具,可以帮助使用者快速高效的完成切入是应用程序。所以本设计最终采用的编程软件为Keil5,其界面如图15所示。图15Keil5开发界面本设计选用了Keil5作为自然编程环境。相较于其他自然电脑编程环境,它更为轻便,速度更快,更方便实际操作。嵌入式软件开发者也对此表示了热烈的欢迎。4.2主程序流程设计在这个系统中,主机程序包括:按键函数、显示函数、监测函数和处理函数。按键函数被设计用于执行多项操作,比如切换不同模式、选择合适的储物柜、输入必要的验证码和手机号码等。监测函数的作用是生成一个介于100000到999999之间的随机数。显示函数则负责在OLED屏幕上展示各种界面,包括身份选择界面、存/取快递界面、储物柜选择界面以及手机号码和验证码输入界面等。在处理函数中,当有快递员寄送快递或用户存放快递时,GSM通信模块将被触发以发送验证码REF_Ref22531\r\h[14]。这一过程旨在确保安全性,并为用户提供便捷的服务体验。系统主程序流程图如图16所示。当系统模式为取物模式时,那么它会逐一比较输入的验证码与预设的验证码是否匹配;匹配则打开储物柜,不匹配则发出声光警报。其程序流程图如图17所示。图16主程序总体流程图图17储物柜验证码验证流程图4.3按键模块流程图按键模块流程图如图18所示,首先,系统会通过按键扫描功能来检测是否有按键被按下REF_Ref11176\r\h[15]。如果用户按下的是数字键,系统会识别这个操作为选择储物柜、输入手机号码或验证码等功能。当按键键值为3时,系统会切换至快递员存/取模式;当按键键值为7时,系统会切换至相应的用户存/取模式;而当按键键值为11时,系统会进入储物柜选择模式;如果按键键值为15,可以进行验证码的输入;如果按键键值为12,表示确定;如果按键键值为14,则表示删除。矩阵按键对应的键值及对应的功能如表6所示。表6矩阵按键基本情况表矩阵按键对应键值对应功能矩阵按键对应键值对应功能S10数字键1;选择“大”储物柜S98数字键7S21数字键2;选择“中”储物柜S109数字键8S32数字键3;选择“小”储物柜S1110数字键9S43选择“快递员”身份S1211选择“存快递”并跳转到手机号输入界面S54数字键4S1312确定S65数字键5S1413数字键0S76数字键6S1514删除S87选择“用户”身份S1615选择“取快递”并跳转验证码输入界面图18按键模块流程图4.4显示模块流程图显示函数流程图如图19所示,根据不同的显示模式标志位,系统将呈现不同的界面。在身份选择界面上,将显示"我是快递员S4"和"我是用户S8";在快递员存/取选择界面上,将展示"存快递S12"和"取快递S16";而在用户存/取选择界面上,同样会呈现"存快递S12"和"取快递S16"。当进入储物柜选择界面时,系统将展示储物柜的型号以及当前状态(空/满)。另外,在手机号输入界面上,屏幕会显示提示信息:"请输入手机号";而在验证码输入界面,则会显示相应提示:"请输入验证码"。图19显示模块流程图4.5通信模块流程图通信模块流程图如图20所示,在发送短信标志位界面,若有快递员/用户存快递,通信模块给手机发送验证码。图20通信模块流程图5实物测试与总结5.1电路焊接总图在进行集成板上的电路焊接时,首先要处理的是电源模块。这包括焊接电源插座、电源开关、10k电阻和指示灯。确保焊接完成后,接入电源进行测试,验证电源模块是否正常工作。接下来是显示模块的处理,需要焊接排针后插入OLED12864显示屏。然后是单片机模块,采用STM32F103C6T6单片机。紧接着是矩阵按键模块的连接,然后安装蜂鸣器,随后是短信发送模块,最后处理继电器的连接。焊接过程中务必注意焊点的质量和连接正确性,以确保整个电路能够正常运行。在测试时,逐步验证各个模块的功能是否正常,确保整个系统能够稳定可靠地工作。如图21为焊接实物全图。、图21电路焊接总图5.2智能储物柜系统实物测试智能储物柜系统实物测试如表7所示:表7智能储物柜系统实物测试表功能实物测试测试结果使用人员身份选择如图21成功储物柜型号选择如图22成功矩阵键盘输入手机号,通信模块发送验证码如图23成功通过矩阵键盘输入验证码进行开箱取货如图24成功验证码输入错误报警如图25成功如图22所示,该图为上电后快递员准备存货时的实物全图,此时OLED12864显示屏可以显示大、中、小三个储物柜的基本情况。图22智能储物柜状态实物图如图23所示,该图为快递员存货后向用户手机发送验证码,以方便用户在空闲的时间取货。图23发送验证码实物图如图24所示,用户在输入正确的验证码之后就会打开对应的箱体进行取货。图24验证码开箱实物图如图25所示,当用户输入错误的验证码之后便会进行声光报警,同时OLED12864显示屏也会进入清屏状态。图25验证码错误报警实物图综合上述测试内容,智能储物柜系统测试成功。
5.3总结这个基于STM32的智能储物柜设计成功地实现了手机通信、验证码开锁、储物柜控制和OLED显示等多项功能。通过使用GSM通信模块、OLED显示模块和矩阵键盘等元器件,实现了储物柜、快递员和客户之间的无线通信、安全开锁和智能控制功能。该设计为快递物流行业提供了一种高效、智能的储物柜解决方案,提高了储物柜的安全性和便利性。未来可以进一步优化和扩展该设计,以满足不同场景和需求的智能储物柜应用。本设计的优点包括:多功能性:本设计实现了手机通信功能、验证码开锁、储物柜控制等多种功能,提供了全方位的储物柜服务。高安全性:通过验证码开锁和手机通信功能,确保了储物柜的安全性,只有授权用户才能够打开柜门。方便易用:用户可以通过手机与储物柜进行通信,无需额外的物理钥匙,提供了便捷的使用体验。可扩展性:基于STM32主控芯片,设计可以进行进一步的扩展和改进,以满足不同场景和需求。但这一设计也存在不足和需要改进的地方:可靠性:在实际应用中需要确保系统稳定可靠,以避免出现通信故障或泄露验证码等问题。用户体验:在设计上,进一步优化界面设计和交互方式,提升用户体验,需要考虑用户的操作习惯和便捷性。成本控制:储物柜设计需要考虑成本因素,包括硬件元器件和生产成本,需要在保证功能的前提下,尽可能降低成本。安全性加强:为了进一步提高储物柜的安全性,可以考虑加入更高级的身份验证方式,如指纹识别或人脸识别等技术。综上所述,本设计在功能性、安全性和便利性方面具有优势,但仍需要在可靠性、用户体验、成本控制和安全性方面进行改进和加强。
参考文献蔡亲富.基于单片机的家用智能电子密码锁设计[J].造纸装备及材料,2023,52(07):63-65.张乐,张宝宁,杨红,等.基于STM32的超市指纹识别储物柜系统设计[J].物联网技术,2022,12(09):10-12.DOI:10.16667/j.issn.2095-1302.2022.09.003.赵静芬,阮海鹏,李境学.基于FPGA的手机控制智能密码锁的设计与实现[J].计算机光盘软件与应用,2013,16(02):228+230.田晨,任斌.基于物联网和人工智能的现代物流及仓储应用技术研究[J].中国物流与采购,2023,(20):119-120.DOI:10.16079/ki.issn1671-6663.2023.20.022.赵佳鹏,任新平.大数据背景下智慧社区与物流配送的深度融合——智能快递柜行业创新发展路径的研究[J].中国储运,2022,(12):179-180.DOI:10.16301/12-1204/f.2022.12.104.王怡.浅析数字电路系统中复位功能的设计[J].科学技术创新,2019,(23):87-88.谭记锋,柏佳,陈金鹰,等.基于互联网的共享智能储物柜系统[J].电子测量技术,2020,43(1):5.郭璐.费锐公司智能储物柜系统开发项目管理与实施研究[D].吉林大学.DOI:CNKI:CDMD:2.1015.588899.周浩.基于STC89C52单片机的小球滚落计时系统设计[J].轻工科技,2024,40(01):109-112+141.朱静,马维.基于单片机的声光报警控制系统设计[J].电子技术,2023,52(07):19-21.杨记鑫,胡伟霞,陈会丽.基于嵌入式的自动快递管理柜的设计[J].电工技术,2021,(15):119-121.DOI:10.19768/ki.dgjs.2021.15.038.杨晓龙.基于单片机的GSM家庭防盗门电子锁的设计[J].机械工程与自动化,2018,(06):187-189.杨学存,刘飞.基于Proteus+Keil5的“由虚入实”理念在嵌入式系统教学中的应用[J].电子测试,2020,(16):120-122.DOI:10.16520/ki.1000-8519.2020.16.050.杨振宇,刘燕,张万尧,等.基于单片机的智能快递储物柜的设计[J].电子制作,2023,31(17):30-33.DOI:10.16589/11-3571/tn.2023.17.015.马小梅,马宝宝,刘强强,等.STM32在智能外卖存取系统中的应用[J].电子世界,2021,(15):184-185.DOI:10.19353/ki.dzsj.2021.15.077.
附录原理图:PCB版图:部分代码:#include"main.h"#include"tim.h"#include"usart.h"#include"gpio.h"#include"./HAL/key/key.h"#include"./HAL/OLED/OLED_NEW.H"#defineLED(a)(a?HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET):HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET))#defineRELAY1(a)(a?HAL_GPIO_WritePin(RELAY1_GPIO_Port,RELAY1_Pin,GPIO_PIN_RESET):HAL_GPIO_WritePin(RELAY1_GPIO_Port,RELAY1_Pin,GPIO_PIN_SET))#defineRELAY2(a)(a?HAL_GPIO_WritePin(RELAY2_GPIO_Port,RELAY2_Pin,GPIO_PIN_RESET):HAL_GPIO_WritePin(RELAY2_GPIO_Port,RELAY2_Pin,GPIO_PIN_SET))#defineRELAY3(a)(a?HAL_GPIO_WritePin(RELAY3_GPIO_Port,RELAY3_Pin,GPIO_PIN_RESET):HAL_GPIO_WritePin(RELAY3_GPIO_Port,RELAY3_Pin,GPIO_PIN_SET))#defineBEEP(a)(a?HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,GPIO_PIN_RESET):HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,GPIO_PIN_SET))uint8_tUSART1_TX_BUF[200];#defineu1_printf(...)HAL_UART_Transmit(&huart1,USART1_TX_BUF,sprintf((char*)USART1_TX_BUF,__VA_ARGS__),0xffff)voidKey_function(void); //按键函数voidMonitor_function(void); //监测函数voidDisplay_function(void); //显示函数voidManage_function(void); //处理函数uint8_tkey_num,key_bz; //按键标志位uint32_tranddata; //随机数字uint16_ttime_1ms,time_500ms; //时间变量uint16_tGSM_time; //发送短信时间uint8_tOpen_boxpsw[3][6]; //开门密码数组uint8_tIN_Password[6]; //输入密码数组uint8_tPassword_Num; //密码计数变量uint8_tPassword_Error; //密码错误标志位uint8_tPassword_Error_Num; //密码输入错误变量uint8_tGSM_Send_bz; //发送短信标志位//模式变量 0选择人员 1存2取uint8_tmode; //1快递员2用户uint8_tdelivery_mode; uint8_tflag_relay; //继电器标志位uint16_trelay; //继电器打开时间uint8_tPhone_Num; //手机号位数uint8_tPHONE_USER[11]; //手机号存放数组uint8_tbox_num; //验证码位数uint8_tflag_1day; //发送短信标志位uint32_tflag_1ms; //1毫秒变量uint32_tflag_1m; //1秒变量uint8_tflag_over; //储物柜状态标志位voidSystemClock_Config(void);voidGSM_Send(void){if(GSM_Send_bz==1){u1_printf(“AT+CMGF=1\r\n”);}elseif(GSM_Send_bz==2){u1_printf(“AT+CSMP=17,162,2,25\r\n”);}elseif(GSM_Send_bz==3){u1_printf(“AT+CSCS=\"UCS2\"\r\n”);}elseif(GSM_Send_bz==4){u1_printf(“AT+CMGS=\"003%c003%c003%c003%c003%c003%c003%c003%c003%c003%c003%c\"\r\n”,\PHONE_USER[0]+'0',PHONE_USER[1]+'0',PHONE_USER[2]+'0',\PHONE_USER[3]+'0',PHONE_USER[4]+'0',PHONE_USER[5]+'0',\PHONE_USER[6]+'0',PHONE_USER[7]+'0',PHONE_USER[8]+'0',\PHONE_USER[9]+'0',PHONE_USER[10]+'0';//此处修改手机号}elseif(GSM_Send_bz==5){u1_printf("9A8C8BC17801662FFF1A003%c003%c003%c003%c003%c003%c",\OPEN_boxspw[box_num][0]+'0',\OPEN_boxspw[box_num][0]+'0',\OPEN_boxspw[box_num][0]+'0',\OPEN_boxspw[box_num][0]+'0',\OPEN_boxspw[box_num][0]+'0',\OPEN_boxspw[box_num][0]+'0');u1_printf("%c",0x1A);}}*******按键设置函数voidKey_function(void){ key_num=Chiclet_Keyboard_Scan(); //按键扫描 if(key_num==0xff)key_bz=1; if((key_num!=0xff&&key_bz==1)) //有按键按下 { key_bz=0; if((key_num<12&&key_num%4<3)||key_num==13) //按下的是数字键 { if(mode==3) //输入号码 { if(Phone_Num<11) { /*数字为1~9*/if(key_num!=13)PHONE_USER[Phone_Num]=key_num/4*3+(key_num%4+1); elsePHONE_USER[Phone_Num]=0; Phone_Num++; } } if(mode==1) //选择储物柜存 { if(key_num==0) //第一个 { box_num=0; Open_boxpsw[box_num][0]=randdata/100000; Open_boxpsw[box_num][1]=randdata/10000%10; Open_boxpsw[box_num][2]=randdata/1000%10; Open_boxpsw[box_num][3]=randdata/100%10; Open_boxpsw[box_num][4]=randdata/10%10; Open_boxpsw[box_num][5]=randdata/1%10; flag_relay=1; flag_over=1; } elseif(key_num==1)//第二个 { box_num=1; Open_boxpsw[box_num][0]=randdata/100000; Open_boxpsw[box_num][1]=randdata/10000%10; Open_boxpsw[box_num][2]=randdata/1000%10; Open_boxpsw[box_num][3]=randdata/100%10; Open_boxpsw[box_num][4]=randdata/10%10; Open_boxpsw[box_num][5]=randdata/1%10; flag_relay=2; flag_over=1; } elseif(key_num==2)//第三个 { box_num=2; Open_boxpsw[box_num][0]=randdata/100000; Open_boxpsw[box_num][1]=randdata/10000%10; Open_boxpsw[box_num][2]=randdata/1000%10; Open_boxpsw[box_num][3]=randdata/100%10; Open_boxpsw[box_num][4]=randdata/10%10; Open_boxpsw[box_num][5]=randdata/1%10; flag_relay=3; flag_over=1; } OLED_Clear(); if(delivery_mode==1)//发送验证码 mode=3; elseif(delivery_mode==2) {for(i=0;i<11;i++){PHONE_USER[i]=Phone_Number_DEL[i];}GSM_Send_bz=1; mode=0; delivery_mode=0; } } if(mode==2) //输入验证码 { if(Password_Num<6) { /*数字为1~9*/if(key_num!=13)IN_Password[Password_Num]=key_num/4*3+(key_num%4+1); elseIN_Password[Password_Num]=0; Password_Num++; } } } switch(key_num) { case3: //按键4,发送验证码 OLED_Clear(); if(mode==0) { delivery_mode=1; } break; case7: //按键8,手机号 OLED_Clear(); if(mode==0) { delivery_mode=2; } break; case11: //按键12 OLED_Clear(); if(mode==0) { if(delivery_mode!=0) mode=1; } break; case12: //按键13,确定,验证码输入正确,锁自动打开 OLED_Clear(); if(mode==2) //取 {if(IN_Password[0]==Open_boxpsw[0][0]&&IN_Password[1]==Open_boxpsw[0][1]&&\IN_Password[2]==Open_boxpsw[0][2]&&IN_Password[3]==Open_boxpsw[0][3]&&\IN_Password[4]==Open_boxpsw[0][4]&&IN_Password[5]==Open_boxpsw[0][5]) { //第一个储物柜 flag_relay=1; memset(Open_boxpsw[0],0,6); mode=0; delivery_mode=0; Password_Num=0; flag_over=0; }elseif(IN_Password[0]==Open_boxpsw[1][0]&&IN_Password[1]==Open_boxpsw[1][1]&&\IN_Password[2]==Open_boxpsw[1][2]&&IN_Password[3]==Open_boxpsw[1][3]&&\IN_Password[4]==Open_boxpsw[1][4]&&IN_Password[5]==Open_boxpsw[1][5]) { //第二个储物柜 flag_relay=2; memset(Open_boxpsw[1],0,6); mode=0; delivery_mode=0; Password_Num=0; flag_over=0; }elseif(IN_Password[0]==Open_boxpsw[2][0]&&IN_Password[1]==Open_boxpsw[2][1]&&\IN_Password[2]==Open_boxpsw[2][2]&&IN_Password[3]==Open_boxpsw[2][3]&&\IN_Password[4]==Open_boxpsw[2][4]&&IN_Password[5]==Open_boxpsw[2][5]) { //第三个储物柜 flag_relay=3; memset(Open_boxpsw[2],0,6); mode=0; delivery_mode=0; Password_Num=0; flag_over=0; } else //否则打开失败,声光报警 { BEEP(1); LED(1); flag_relay=0; HAL_Delay(3000); mode=0; BEEP(0); LED(0); delivery_mode=0; Password_Num=0; } } elseif(mode==3) //发送验证码 {GSM_Send_bz=1; mode=0; delivery_mode=0; Phone_Num=0; } break; case14: //按键15,删除 if(Password_Num>0) { Password_Num--; IN_Password[Password_Num]=0; } if(Phone_Num>0) { Phone_Num--; PHONE_USER[Phone_Num]=0; } break; case15: //按键16,输入验证码 OLED_Clear(); if(mode==0) { if(delivery_mode!=0) mode=2; } break; default: break; } }}*******检测函数voidMonitor_function(void){ if(time_500ms==1) { time_500ms=0;randdata=rand()%(999999-100000+1)+100000;//获得100000~999999之间的随机数 }}*******显示函数voidDisplay_function(void){ uint8_ti; if(mode==0) { if(delivery_mode==0) //身份选择界面 { Oled_ShowCHinese(8,2,"我是"); Oled_ShowCHinese(0,4,"快递员"); Oled_ShowCHinese(80,2,"我是"); Oled_ShowCHinese(80,4,"用户"); Oled_ShowString(16,6,"S4"); Oled_ShowString(88,6,"S8"); } elseif(delivery_mode==1) //快递员拿/取选择界面 { Oled_ShowCHinese(40,0,"快递员"); Oled_ShowCHinese(0,4,"存快递"); Oled_ShowCHinese(80,4,"取快递"); Oled_ShowString(16,6,"S12"); Oled_ShowString(88,6,"S16"); } elseif(delivery_mode==2) //用户拿/取选择界面 { Oled_ShowCHinese(46,0,"用户"); Oled_ShowCHinese(0,4,"寄快递"); Oled_ShowCHinese(80,4,"取快递"); Oled_ShowString(16,6,"S12"); Oled_ShowString(88,6,"S16"); } } elseif(mode==1) //空箱选择界面 { Oled_ShowCHinese(0,0,"请选择一个空箱"); Oled_ShowCHinese(1,3,"大"); Oled_ShowCHinese(56,3,"中"); Oled_ShowCHinese(108,3,"小"); if(Open_boxpsw[0][0]!=0) { Oled_ShowCHinese(1,6,"满"); } else { Oled_ShowCHinese(1,6,"空"); } if(Open_boxpsw[1][0]!=0) { Oled_ShowCHinese(56,6,"满"); } else { Oled_ShowCHinese(56,6,"空"); } if(Open_boxpsw[2][0]!=0) { Oled_ShowCHinese(108,6,"满"); } else { Oled_ShowCHinese(108,6,"空"); } } elseif(mode==2) //输入验证码 { Oled_ShowCHinese(1,2,"请输入验证码"); for(i=0;i<6;i++) { if(i<Password_Num)OLED_ShowNum(40+8*i,5,IN_Password[i],1,16); elseOled_ShowString(40+8*i,5,""); } } elseif(mode==3) //输入手机号 { Oled_ShowCHinese(1,2,"请输入手机号"); for(i=0;i<11;i++) {
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026海南海钢产业园投资开发有限公司招聘8人备考题库及答案详解【历年真题】
- 2026中国中煤能源集团有限公司西南分公司(四川分公司)第三批招聘10人备考题库及答案详解【必刷】
- 2026海南海钢产业园投资开发有限公司招聘8人备考题库【含答案详解】
- 2026广西梧州市龙圩区招(补)录城镇公益性岗位人员11人备考题库及参考答案详解(夺分金卷)
- 2026吉林省长影集团有限责任公司招聘9人备考题库含答案详解(预热题)
- 2026湖南永州市江永县城乡农贸市场服务有限公司招聘5人备考题库(第二次)及参考答案详解(满分必刷)
- 2026中军五零五国际疗养康复中心招聘备考题库附参考答案详解(巩固)
- 2026河南郑州巩义市产业投资发展有限公司招聘副总经理1人备考题库含答案详解(综合题)
- 2026年上半年长信保险经纪(四川)有限公司第二批人员招聘1人备考题库附参考答案详解(完整版)
- 乡村教师教育管理制度范本(3篇)
- 建筑工地安全设施检查清单模板
- JJF2041-2023互感器二次压降及二次负荷现场测试方法
- 国有企业资产管理流程与制度汇编
- LNG气化站设备保养手册
- 煤矸石铺地面施工方案
- 基础计算机考试实操题及答案
- 2025年五类人员选拔考试试题及答案
- 压力储罐设计计算书
- 2025年疾病预防控制中心招聘考试笔试试题(含答案)
- 医院培训课件:《医疗机构消防安全知识讲座》
- 咯血护理常规课件
评论
0/150
提交评论