基于嵌入式的智能物流柜( 触摸屏/0.96寸oled屏)

news2024/11/13 12:47:58

演示

智能物流柜(基础版)

智能物流柜(升级版)

前言

        这是本人在大二在学校接的一个简单的实验室项目,之前发布了一个,由于那是在暑假,家里器材有限,代码敲完之后,用面包板接完,现象正常之后,就没去理过了,最近正好比较闲,我决定把他整理出来,供大家进行学习。

简介

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

具体功能

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

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

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

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

✨通过led灯显示柜子状态

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

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

硬件框图

主控部分

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

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

驱动模块 

SG90 180°舵机

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

LED发光二极管

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

语音播报模块JQ8900-16P

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

 显示模块

0.96寸OLED屏幕。

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

2.8寸TFTLCD屏幕

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

输入模块

4x4矩阵按键

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

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

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

触摸模块

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

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

上位机

机智云手机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 的无缝连接,实现数据监控和控制,从而实时显示出我们柜子的状态,柜子的取件码以及手机号码

软件流程介绍

 工程文件夹介绍

USER

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

 

HARDWARE

存放硬件驱动文件。

SYSTEM

存放系统初始化文件。

CORE

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

FWLIB

标准库移植文件

 

Gizwits以及Utils

存放网络协议代码

程序实现流程

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

总结

以上就是我对这个项目的解释,这里我感觉还没有做到完美,暂且不开源......,读者可以根据我的思路,自己进行设计。

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

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

相关文章

PyTorch深度学习快速入门教程【土堆】基础知识篇

Juptyer 版本: Python 3.9.19Pytorch 2.4.1 (pytorch0) C:\Users\25694>conda install nb_conda_kernels(pytorch0) C:\Users\25694>jupyter notebook使用conda环境的pytorch: 成功解决python.exe无法找到程序入口 无法定位程序输入点 shifte…

机器学习-深度学习数据集之打架斗殴识别数据集

关于“打架识别数据集”,这是一个专门设计用于训练计算机视觉模型以识别打架、摔倒以及持械行为的数据集。此类数据集对于开发安全监控系统至关重要,可以帮助在公共场所如学校、酒吧或地铁站等地及时发现潜在的暴力事件,从而快速采取行动来防…

anaconda的windows新手安装及配置教程(适用于物联网工程、计算机专业)

第一步:点击免费下载 点击我直达anaconda官网">——>点击我直达anaconda官网 第二步:跳过注册 第三步:下载windows版本 第四步:安装步骤 1.Next (下一步) 2.I Agree (我同意) 3.默认即可,下一步 4.安装地址可以选到D盘,如果没有默认也行,只是一个…

上传富文本插入文件时报错:JSON parse error: Unexpected character解决办法

方式一(加密解密): 1.前端 (1)安装 crypto-js npm install crypto-js(2)util下创建asc.js asc.js import CryptoJS from crypto-js// 需要和后端一致 const KEY CryptoJS.enc.Utf8.parse(…

《Linux基础》练习操作

一、文件目录类操作 1. 创建新用户user,其中用户名为学生姓名首字小写(如:张三,用户名为zsan) 将/etc/passwd拷贝到/home/user下面。修改/home/user/passwd,在文件的第15行下添加“hello 学号姓名”,光标停留在 hello 学号姓名…

[漏洞复现]泛微e-mobile cdnfile文件读取漏洞分析复现

如果觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。 免责声明 本号所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性…

金属3D打印经济效益高吗?

在我国制造业迈向产业升级的重要阶段,3D打印技术如同一股强劲的新风,特别是在航空航天、汽车、生物医疗等领域,已成为复杂构件制造的“明星”技术。那么,对于众多生产厂家而言,金属3D打印的经济账到底怎么算&#xff1…

永磁同步电机谐波抑制算法(8)——基于神经网络的傻瓜式(无需知道谐波频率)谐波抑制

1.简介 前面的内容已经介绍了很多谐波抑制的方法:多同步、PIR、陷波器等等。也介绍了比较多的谐波来源:死区(5、7、11、13等次相电流谐波)、绕组不对称(基波不等幅值、3次相电流谐波)等等。 上述的方法都…

基于springboot+vue超市管理系统

基于springbootvue超市管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本无人超市管理系统就是在这样的大环境下诞生,其可以帮助使用者在…

进程间关系与进程守护

一、进程组 1、理解 每一个进程除了有一个进程 ID(PID)之外 还属于一个进程组, 进程组是一个或者多个进程的集合, 一个进程组可以包含多个进程。 每一个进程组也有一个唯一的进程组 ID(PGID), 并且这个 PGID 类似于进程 ID, 同样…

不只是模仿,伯克利新研究赋予机器人跨实体自主学习的能力,零样本时代已来

导读: 在当今科技飞速发展的时代,机器人技术正不断地给我们带来惊喜和变革。2024 年 9 月,一篇来自加州大学伯克利分校、丰田研究所和Physical Intelligence 的研究论文RoVi-Aug: Robot and Viewpoint Augmentation for Cross-Embodiment Rob…

2024/9/20 使用QT实现扫雷游戏

有三种难度初级6x6 中级10x10 高级16x16 完成游戏 游戏失败后&#xff0c;无法再次完成游戏&#xff0c;只能重新开始一局 对Qpushbutton进行重写 mybutton.h #ifndef MYBUTTON_H #define MYBUTTON_H #include <QObject> #include <QWidget> #include <QPus…

基于ACMEv2协议的免费SSL证书申请-支持Let‘s Encrypt/Google/ZeroSSL

项目&#xff1a;https://github.com/cook-code-jazor/acmex 非开源&#xff0c;使用webui管理证书的申请&#xff0c;所有文件本地化存储&#xff0c;支持windows/linux/osx。 证书申请直连ACMEv2服务商&#xff0c;没有任何中间接口&#xff0c;支持Lets Encrypt/Google/Ze…

【HTML5】html5开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第二篇-着色器制作】

在上一篇文章中&#xff0c;我们已经理顺了实现流程。 接下来&#xff0c;我们将在UE5中&#xff0c;从头开始一步一步地构建一次流程。 通过这种方法&#xff0c;我们可以借助一个熟悉的开发环境&#xff0c;使那些对着色器不太熟悉的朋友们更好地理解着色器的工作原理。 这篇…

百望云生态伙伴大会在北京、深圳、昆明三地举办,携手共赢数字化未来!

伴随着金税四期数电票、乐企加速扩围&#xff0c;激发了企业大量的财税数字化转型的需求&#xff0c;为财税服务市场注入了前所有未有的活力。2024年7月9日&#xff0c;百望云成功登陆港交所&#xff0c;成为港股“电子发票第一股”&#xff0c;加码财税业务布局&#xff0c;纵…

Spring Boot利用dag加速Spring beans初始化

1.什么是Dag&#xff1f; 有向无环图(Directed Acyclic Graph)&#xff0c;简称DAG&#xff0c;是一种有向图&#xff0c;其中没有从节点出发经过若干条边后再回到该节点的路径。换句话说&#xff0c;DAG中不存在环路。这种数据结构常用于表示并解决具有依赖关系的问题。 DAG的…

生信初学者教程(一):欢迎

文章目录 配套数据R包版本安装包版权答疑在生物信息学(生信)领域,随着高通量测序技术的不断发展,大量数据涌现,为科研工作者提供了丰富的资源。然而,对于初学者而言,如何从海量的数据中挖掘有价值的信息,并开展一个完整的生信项目,仍然是一个挑战。目前,市面上针对初…

网络层协议 ——— IP协议

文章目录 概念协议头格式分片与组装网段划分IP地址的数量限制私有IP和公有IP路由 概念 IP协议&#xff08;Internet Protocol&#xff09;是互联网上使用的一种网络协议&#xff0c;也是互联网的基础协议之一。它属于TCP/IP体系中的网络层协议&#xff0c;主要负责将数据包从源…

OpenCV特征检测(5)检测图像中的角点函数cornerMinEigenVal()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算用于角点检测的梯度矩阵的最小特征值。 该函数类似于 cornerEigenValsAndVecs&#xff0c;但它计算并存储协方差矩阵导数的最小特征值&…