基于STM32的智能存储物流柜(单片机毕设)

前言

源代码下载链接:

需要实物的可以私信博主或者在文章最下方添加好友。

目录

一、项目简介和视频演示

二、硬件实现

1. 具体功能

2. 硬件框图和原理图

3. 主控部分

4. 驱动模块 

4.1 SG90 180°舵机

4.2 LED发光二极管

4.3 语音播报模块JQ8900-16P

5. 显示模块

5.1 0.96寸OLED屏幕

5.2 2.8寸TFTLCD屏幕

6. 输入模块

6.1 4x4矩阵按键

6.2 触摸模块

三、软件实现

1. 上位机

2. 软件流程介绍

2.1 工程文件夹介绍

2.2 程序实现流程


一、项目简介和视频演示

        这里有两个版本,一个是触摸屏,另一个是0.96寸oled➕矩阵按键,他们除了这里有所区别,其他地方都是完全一模一样的,我们就以0.96寸oled➕矩阵按键版本的进行讲解。

0.96寸oled➕矩阵按键实现

触摸屏实现:

演示视频:

基于STM32的智能物流柜

二、硬件实现

1. 具体功能

✨通过按键输入密码进行物体的储存放置

✨存放后设置接收短信手机 进行密码接收

✨点击存储按钮存储物品 并发送密码短信

✨通过手机APP查看手机号以及取件码 输入取件码可打开柜门

✨通过led灯显示柜子状态

✨语音模块进行播报,实时进行状态播报

✨手机APP可以远程进行柜子的开关

2. 硬件框图和原理图

硬件框图:

原理图:

3. 主控部分

STM32F103C8T6 是一种微控制器,基于 ARM Cortex-M3 内核,运行频率可达 72 MHz。它有 64 KB 闪存和 20 KB SRAM,支持多种外设如定时器、ADC、DAC、USART、SPI 和 I2C,适用于各种嵌入式应用。

主控部分通过逻辑控制,通过输入模块,显示模块、上位机通讯、驱动模块,实现我们项目的完整功能,这里用到了STM32的多个外设,I2C、定时器、GPIO、USART......

4. 驱动模块 

4.1 SG90 180°舵机

        舵机的控制信号为周期是20ms 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0—180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。控制电路板接受来自信号线相应的PWM控制信号,进而控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。舵机的控制需要MCU产生一个周期为20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机转动的角度。我们通过STM32的定时器外设,输出相应的PWM波形,从而控制输入的占空比,从而改变舵机旋转的角度,实现了柜门的开关。

4.2 LED发光二极管

        STM32 微控制器通过其 I/O 引脚控制 LED 的开关,将GPIO设置为推挽输出模式。LED 被连接到一个 STM32 的 I/O 引脚,通常通过一个限流电阻,以限制通过 LED 的电流,保护 LED 不被烧毁,这里LED亮灭表示了柜子的开光状态,用于提示用于柜门开关。

4.3 语音播报模块JQ8900-16P

        JQ8900-16P 选用的是 SOC 方案,集成了一个 16 位的 MCU,以及一个专门针对音频解码的 ADSP,采用硬解码的方式,更加保证了系统的稳定性和音质。小巧尺寸更加满足嵌入其它产品的需求。此芯片最大的优势在于能够灵活的更换 SPI-flash 内的语音内容,省去了传统语音芯片需要安装 上位机更换语音的麻烦,SPI FLASH 直接模拟成 U 盘,跟拷贝 U 盘一样,非常方便。使得产品研发和生产变得便捷简单。一线串口控制模式、RX232 串口控制可选,为研发提供更多的选择性。我们利用一线串口模式,通过编写对应的通信协议,在需要播报特定语音的时候,STM32通过一线串口,发送对应的信息,语音模块就会播放提前存好在自己FLASH内的语音内容,实现播报特定的语音。

5. 显示模块

5.1 0.96寸OLED屏幕

        0.96寸 OLED 屏幕是一种小型显示器,通常用于嵌入式项目中。能够独立发光,不需要背光,显示对比度高,屏幕对角线长度为 0.96 英寸,显示区域小巧,适合紧凑型设备。分辨率通常为 128 x 64 像素,用于显示简单的图形和文本。接口类型:使用 I2C(Inter-Integrated Circuit)通信协议,通过四根针脚进行连接:VCC(电源)、GND(接地)、SCL(时钟线)、SDA(数据线)。优点为低功耗、高对比度、视角宽广,适合低功耗设备和需要清晰显示的应用。OLED 屏幕通过 I2C 接口与微控制器STM32通信,实现数据传输和显示内容更新,来进行柜子UI界面的显示。

5.2 2.8寸TFTLCD屏幕

        这个操作起来就比前面的oled复杂很多,由于这个屏幕引脚很多,而且需要使用到FSMC外设,我们要将主控换掉,我自己采用的是STM32F407ZGT6,不仅仅引脚多,Flash、ROM和RAM都大很多,可以搭载大型的项目。

6. 输入模块

6.1 4x4矩阵按键

        4x4 矩阵按键是一种常见的输入设备,通常由 16 个按键组成,按键排列在 4 行 4 列的矩阵中。结构由4行和4列交错排列的按键组成,通过行列扫描来识别按键输入。当按键被按下时,行列交点接通,单片机扫描行列组合来确定哪个按键被按下。

        单片机应用中的优势:节省引脚,通过矩阵扫描,4x4 的按键矩阵只需要 8 个引脚(4 行 + 4 列)来处理 16 个按键,大大减少了所需的 I/O 引脚数量。通过扫描行列,能够快速检测多个按键的状态,适合需要较多输入的场景。

        在 STM32 中,通过配置 STM32 的 GPIO 引脚为输入或输出,用于行列扫描。编写扫描程序,通过轮询或中断方式检测按键状态,并处理输入。实现按键去抖动,确保输入的稳定性和准确性。可选用中断来提高响应速度和效率。通过矩阵按键,STM32 可以有效地处理多个按键输入,减少硬件复杂度。

6.2 触摸模块

使用触摸芯片为XPT2046,使用i2c进行通信,通过检测哪里被按下,可以进行i2c告诉主控有地方被按下并且告诉按下的坐标位置,实现触摸功能。

我们柜子需要有很多按键,比如数字键 0-9,确认键,删除键,存储键、等等,通过识别出哪个按键被按下,从而单片机进行逻辑控制。

三、软件实现

1. 上位机

机智云手机APP

使用机智云手机 app 作为 STM32 的上位机,通过 ESP8266 进行连接的流程可以分为以下几个步骤:

1.硬件准备:STM32:主控制器,用于处理数据和控制外设。ESP8266:无线模块,用于与互联网连接。机智云:云平台,用于接收和发送数据。

2.ESP8266 配置:通过 AT 命令或其他方式将 ESP8266 连接到 Wi-Fi 网络。

3.云平台连接:配置 ESP8266 以连接到机智云平台,通过 MQTT 或 HTTP 协议进行通信。

4.STM32 编程:数据处理:编写程序来读取传感器数据或处理控制信号。串口通信:使用串口(UART)与 ESP8266 进行数据传输。

5.机智云配置:设备注册:在机智云平台上注册并配置 STM32 设备。数据流设置:创建数据流或接口,以接收和发送 STM32 和手机 app 之间的数据。

6.手机 app 配置:下载和安装:在手机上下载机智云 app。设备绑定:通过 app 绑定和管理 STM32 设备。数据监控:查看来自 STM32 的数据和控制设备。数据交换:

7.发送数据:STM32 将数据通过 ESP8266 发送到机智云。

8.接收数据:手机 app 从机智云获取数据,进行显示或控制操作。

通过这些步骤,可以实现 STM32 与机智云手机 app 的无缝连接,实现数据监控和控制,从而实时显示出我们柜子的状态,柜子的取件码以及手机号码。

2. 软件流程介绍

下载资源包,可以获得

2.1 工程文件夹介绍

USER:存放main函数以及系统文件和中断文件。

HARDWARE:存放硬件驱动文件。

SYSTEM:存放系统初始化文件。

CORE:存放内核驱动文件以及STM32启动文件。

FWLIB:标准库移植文件。

2.2 程序实现流程

  1. 进行各项初始化,包括延时函数初始化、引脚配置、按键初始化、定时器初始化、语音模块初始化、串口初始化、网络配置初始化、屏幕初始化.......
  2. 之后进入线程的处理,包括按键扫描处理、随机数生成、舵机和LED状态更新、网络参数同步、网络协议任务处理。
  3. 按键扫描与处理:项目的核心线程,通过不断扫描按键状况,通过逻辑控制进行对应按键的处理,包括:密码的输入、手机号码的输入、存件的确认、密码的删除、柜门的关闭......,之后在根据对应的状态进行对应的控制,比如:语音播报、柜门开关、取件码的更新、手机号码的更新......,柜子的基本功能都在这个线程里面进行处理。
  4. 随机数的生成:通过定时器不断的计时,通过采样计数器的值,来不断生成随机数,需要用到的时候,可以当作取件码,保证了取件码的随机性,防止快递密码被人为篡改。
  5. 舵机和LED状态更新:通过全局变量,调控着柜子和LED指示灯的状态,这里如果全局变量改变,我们及时进行状态更新,保证柜子响应正确。
  6. 网络参数同步:我们这里要和手机APP进行通信,我们网络协议里面规定了APP中的显示数据,包括可读以及可写,我们不断的进行消息的同步,以确保上位机和STM32的正确通信和正确状态显示。
  7. 网络协议处理:我们上位机会发来消息,我们这个时候,就要调用这个函数,不断的进行对应协议的回复,保证与上位机的正常通信。

代码如下:

int main(void)
 {	
	 //延时函数初始化	
	delay_init();	 
	 //引脚配置
	GPIOD_Init();	
    //LED灯控制
	LED1=KG1;
	LED2=KG2;
	LED3=KG3;
	LED4=KG4;			 
	//4*4按键初始化   
    Key_Init();
	//定时器3初始化,控制舵机和生成随机数
	Timer0Init();	
	Timer2_Configuration();//1ms进入一次中断,给机智云协议提供时钟
    //初始化OLED  	 
	OLED_Init();			
	OLED_Clear(); 
	 //初始化语音模块
	voice_init();
	uart1_init(9600);//初始化串口1
	//清屏
 	xianshiClear();	
	//显示-主界面
	xianshi_zjm();
	//开机播报
	//欢迎使用自动存取快递柜
	//播放指定的铃声
 	lingsheng(11);
	//延迟5s让语音播报完成
	delay_ms(1000);	
	delay_ms(1000);
	delay_ms(1000);
	delay_ms(1000);
	delay_ms(1000);	 
	lingsheng(1);
	delay_ms(1000);	 
	delay_ms(1000);	 
	delay_ms(1000);	 	
	/*机智云初始化*/
	userInit();
	gizwitsInit();
	/*一件配网模式*/
	//播报:请打开手机app进行连接

	gizwitsSetMode(2);
	
	while(1)
	{
		//按键扫描和处理
		anjianchuli();		
		//生成随机数
		zhongzi();	
    	//LED灯状态更新
		LED1=KG1;
		LED2=KG2;
		LED3=KG3;
		LED4=KG4;
		/*网络参数更新,对数据点的数值变量进行赋值操作*/
		userHandle();
		/*联网,上传数据,接收下发数据*/
		gizwitsHandle((dataPoint_t *)&currentDataPoint); 
	}
}

                                                                     👇🏻 需要实物 添加 博主👇🏻

智能快递柜的测试用例可以包括以下几个方面: 1. 用户登录和注册功能的测试:测试用户能否成功注册账号,并能够使用已注册的账号登录到系统中。 2. 快递存取功能的测试:测试用户能否成功存放和取出快递,并确保存放和取出的过程中快递的安全性。 3. 手机验证码功能的测试:测试系统是否能够正确发送手机验证码,并且用户能够成功收到和使用验证码进行验证。 4. 快递查询功能的测试:测试用户能否通过输入快递单号或其他查询信息来查询自己的快递,并确保查询结果准确可靠。 5. 通知功能的测试:测试系统是否能够及时向用户发送取件通知或其他相关通知,确保用户能够及时获得有关快递的信息。 6. 系统安全性的测试:测试系统是否能够防止未经授权的人员进入子区域或者访问系统,确保用户的快递和个人信息的安全性。 7. 子状态监测功能的测试:测试系统是否能够准确监测子的使用状态,包括门是否打开或关闭、子是否已满等情况。 8. 系统稳定性和容错性的测试:测试系统在面对大量用户同时使用时是否能够保持正常运行,并且能够处理异常情况和错误输入。 以上是智能快递柜的一些测试用例,你可以根据具体的系统需求和功能来进行进一步的测试规划和测试执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [家用智能摄像机测试用例.xlsx](https://download.csdn.net/download/neeicy/12115554)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [快递柜管理系统微信小程序-计算机毕业设计](https://blog.csdn.net/qq_375279829/article/details/126225796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱嵌入式的小佳同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值