Hello,大家好,我是阿金,本文仅供参考,提供一些建议。如有不对,还请指正。谢谢~

随着5G网络的迅速普及,“万物联网”的时代指日可待。针对传统鞋柜及目前市场上现有的智能鞋柜功能单一,鞋子护理效果不理想的问题,本文设计了一款以STM32F103ZET6为主控芯片,同时具有温湿度检测、杀菌除臭、APP端控制、触摸屏控制和语音交互等多种功能的智能鞋柜系统。该鞋柜主要应用场景为平常百姓家中,采用PVC发泡板所制作的模型,经济环保。

该系统主要分为下位机和上位机两个部分。下位机可通过点击触摸屏或唤醒语音助手来控制智能鞋柜的杀菌除臭、弹出鞋柜门或座椅等功能;上位机APP端可通过WiFi与之相连,实时检测鞋柜内部的温湿度值的同时也能控制鞋柜,已达到方便用户控制鞋柜的目的。测试结果表明,该系统的功能特性较为稳定,操作简便,具有较高的实用价值。

一、基于STM32的智能鞋柜设计实现的功能主要有以下几个方面:

(1)开发基于温湿度检测的除湿除臭系统。采用DHT11温湿度检测模块,实时采集智能鞋柜内部的温湿度数据,并通过STM32F103ZET6主控芯片预先设置好的程序来判断是否需要运行循环风调节系统。将活性炭吸附棉装置于通风口处,用以除臭。除湿除臭系统主要用以保持鞋柜内部环境为恒温恒湿状态,达到延长鞋子使用寿命的效果。

(2)开发基于紫外线灯光照射的杀菌系统。本系统采用紫外线LED灯带照射模块。根据鞋柜内部情况安置相对合适的紫外线led灯带。该杀菌系统可以由用户来调节每次启动后运行的时长,或者也可通过手机APP开启或关闭该功能。

(3)手机APP上位机。设计Android Studio上位机的界面,其中包括鞋柜控制情况、温湿度显示信息、鞋柜用户身份信息。通过串口来实现对智能鞋柜的整体控制。

(4)触摸屏。DHT11温湿度检测模块检测到的数据也会实时显示到触摸屏上,同时显示RTC实时时钟。最先设计的界面较为简洁,以实现按下触屏屏的按键块即可控制鞋柜功能开关为主。

(5)人机交互。采用启英泰伦的CI-B03GS01S语音模块,依托平台上的资源来开发属于自己的鞋柜唤醒词及功能命令词,最终实现语音交互来控制鞋柜上的各种功能模块。

二、系统结构图

三、主要技术路线

 四、APP上位机

代码:字节型协议传输,发送具体指令,控制鞋柜各种功能模块的开关。//自动填写按钮事件btnSearch.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//自动填写服务器固定的IP地址跟端口号edGateIp.setText("10.10.100.254");edGateSn.setText("8899");}});//连接服务器按钮事件btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//容错机制//取出文本框内容,用来判断输入框是否为空String ip = edGateIp.getText().toString();String sn = edGateSn.getText().toString();tempdisp.setText(Float.toString(25));humdisp.setText(Float.toString(62));if ((ip == null || ip.length() == 0) && (sn == null || sn.length() == 0))Toast.makeText(yemian.this, "IP地址、端口号不能为空", Toast.LENGTH_SHORT).show();else if (ip == null || ip.length() == 0)Toast.makeText(yemian.this, "IP地址不能为空", Toast.LENGTH_SHORT).show();else if (sn == null || sn.length() == 0)Toast.makeText(yemian.this, "端口号不能为空", Toast.LENGTH_SHORT).show();else {//判断服务器连接状态if (isConnected != true) {//创建一条新的Socket连接new ConnectThread(0).start();btnLogin.setText("断开连接");startTimer();//按钮文字改变//页面消息Toast.makeText(yemian.this, "服务器连接成功!", Toast.LENGTH_SHORT).show();} else {//按钮按下的时候已在连接情况下,服务器断开连接if (socket != null) {try {//退出服务器socket.close();//服务器状态改为空socket = null;//服务器连接转态改为空isConnected = false;//读数据线程不执行RD = false;btnLogin.setText("连接服务器");//页面文字显示Toast.makeText(yemian.this, "与服务器断开连接!", Toast.LENGTH_SHORT).show();} catch (IOException e) {e.printStackTrace();}}}}}});//消息处理机制messageHandler = new Handler() { // 等待socket连接成功@Overridepublic void handleMessage(android.os.Message msgMessage){String sendString = "";String receiveString = "";switch (msgMessage.what) {case 0:break;case 1:receiveString = "服务器端发送:" + msgMessage.obj.toString() + "\n";byte[] readbuffer = (byte[]) msgMessage.obj;byte[] pattendata = {0x44, 0x5a, 0x4c};List<Integer> start = CommonMethod.indexOf(readbuffer, pattendata);System.out.println("ceshi"+start.toString());for (int a = 0; a < start.size(); a++) {List<Byte> data = new ArrayList<Byte>();for (int b = 0; b < readbuffer[start.get(a) + 3] + 5; b++) {data.add(readbuffer[start.get(a) + b]);}//System.out.println(data.toString());if (data.get(4) == (byte)0x03) {// 准备数据byte[] tmptemp = new byte[]{data.get(11), data.get(12), data.get(13), data.get(14)};float tmpfloat = ByteArrayConvert.getFloat(tmptemp, 0);                         tempdisp.setText(Float.toString(tmpfloat));byte[] humtemp = new byte[]{data.get(19), data.get(20), data.get(21), data.get(22)};float humfloat = ByteArrayConvert.getFloat(humtemp, 0);                           humdisp.setText(Float.toString(humfloat));}}break;default:break;}}};

 五、下位机

#include "show.h"
#include "lcd.h"
#include "text.h"
#include "touch.h"
#include "dht11.h"
#include "delay.h"
#include "led.h"
#include "relay.h"//加载键盘控制界面
//x,y:界面起始坐标
void py_load_ui(u16 x,u16 y)
{POINT_COLOR=RED;//画矩形 LCD_DrawRectangle(x,y,x+300,y+500);  //画线    LCD_DrawLine(x,y+100,x+300,y+100);  //横1LCD_DrawLine(x,y+200,x+300,y+200); //横2LCD_DrawLine(x,y+300,x+300,y+300);   //横3LCD_DrawLine(x,y+400,x+300,y+400);   //横4LCD_DrawLine(x+150,y,x+150,y+500);   //竖//在指定区域内填充单个颜色
LCD_Fill(x+2,y+2,x+148,y+98,WHITE);//控制 Left1LCD_Fill(x+152,y+2,x+298,y+98,WHITE);//控制 Right1LCD_Fill(x+2,y+102,x+148,y+198,WHITE);//控制 Left2 LCD_Fill(x+152,y+102,x+298,y+198,WHITE);//控制 Right2 LCD_Fill(x+2,y+202,x+148,y+298,WHITE);//控制 Left3 LCD_Fill(x+152,y+202,x+298,y+298,WHITE);//控制 Right3
LCD_Fill(x+2,y+302,x+148,y+398,WHITE);//控制 Left3 LCD_Fill(x+152,y+302,x+298,y+398,WHITE);//控制 Right3
LCD_Fill(x+2,y+402,x+148,y+498,WHITE);//控制 Left3 LCD_Fill(x+152,y+402,x+298,y+498,WHITE);//控制 Right3//显示字符串  POINT_COLOR=BLACK;LCD_ShowString(x+51,y+38,lcddev.width,lcddev.height,24,"Left1");  LCD_ShowString(x+183,y+38,lcddev.width,lcddev.height,24,"Right1"); LCD_ShowString(x+51,y+138,lcddev.width,lcddev.height,24,"Left2");      LCD_ShowString(x+183,y+138,lcddev.width,lcddev.height,24,"Right2");   LCD_ShowString(x+51,y+238,lcddev.width,lcddev.height,24,"Left3");      LCD_ShowString(x+183,y+238,lcddev.width,lcddev.height,24,"Right3");POINT_COLOR=RED;                                Show_Font(200,20,(u8 *)"智",24,0);Show_Font(225,20,(u8 *)"能",24,0);Show_Font(250,20,(u8 *)"鞋",24,0);Show_Font(275,20,(u8 *)"柜",24,0);POINT_COLOR=BLACK;  Show_Str(30,60,200,16,"温度为:",16,0); Show_Str(120,60,200,16,"℃",16,0);Show_Str(30,90,200,16,"湿度为:",16,0);Show_Str(120,90,200,16,"%",16,0);Show_Font(150,540,(u8 *)"座",24,0);Show_Font(175,540,(u8 *)"椅",24,0);Show_Font(285,540,(u8 *)"风",24,0);Show_Font(310,540,(u8 *)"扇",24,0);Show_Font(150,640,(u8 *)"杀",24,0);Show_Font(175,640,(u8 *)"菌",24,0);Show_Font(285,640,(u8 *)"消",24,0);Show_Font(310,640,(u8 *)"毒",24,0);}
//按键状态设置
//x,y:键盘坐标
//key:键值(0~8)
//sta:状态,0,松开;1,按下;
void py_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
{                  u16 i=keyx/2,j=keyx%2;if(keyx>10)return;if(sta && keyx != 1)LCD_Fill(x+j*150+1,y+i*100+1,x+j*150+149,y+i*100+99,GREEN);else if(keyx != 1)LCD_Fill(x+j*150+1,y+i*100+1,x+j*150+149,y+i*100+99,WHITE);POINT_COLOR=BLACK;LCD_ShowString(x+51,y+38,lcddev.width,lcddev.height,24,"Left1");  LCD_ShowString(x+183,y+38,lcddev.width,lcddev.height,24,"Right1"); LCD_ShowString(x+51,y+138,lcddev.width,lcddev.height,24,"Left2");      LCD_ShowString(x+183,y+138,lcddev.width,lcddev.height,24,"Right2");   LCD_ShowString(x+51,y+238,lcddev.width,lcddev.height,24,"Left3");      LCD_ShowString(x+183,y+238,lcddev.width,lcddev.height,24,"Right3");Show_Font(150,540,(u8 *)"座",24,0);Show_Font(175,540,(u8 *)"椅",24,0);Show_Font(285,540,(u8 *)"风",24,0);Show_Font(310,540,(u8 *)"扇",24,0);Show_Font(150,640,(u8 *)"杀",24,0);Show_Font(175,640,(u8 *)"菌",24,0);Show_Font(285,640,(u8 *)"消",24,0);Show_Font(310,640,(u8 *)"毒",24,0);
}
//得到触摸屏的输入
//x,y:键盘坐标
//返回值:按键键值(1~9有效;0,无效)
u8 py_get_keynum(u16 x,u16 y)
{u16 i,j;static u8 key_x=0;//0,没有任何按键按下;1~4,1~4号按键按下u8 key=0;tp_dev.scan(0);                  if(tp_dev.sta&TP_PRES_DOWN) //触摸屏被按下{       for(i=0;i<5;i++){for(j=0;j<2;j++){if(tp_dev.x[0]<(x+j*150+150)&&tp_dev.x[0]>(x+j*150)&&tp_dev.y[0]<(y+i*100+100)&&tp_dev.y[0]>(y+i*100)) //决定每一块区域所代表的值{       key=i*2+j+1;         break;                           }}if(key){          if(key_x==key)key=0;else{py_key_staset(x,y,key_x-1,0);key_x=key;py_key_staset(x,y,key_x-1,1);   //决定哪一块区域发生按键捕获}break;}}  }else if(key_x)  //每次从0开始 不记录上次的状态{py_key_staset(x,y,key_x-1,0);key_x=0;}return key;
}
void show(void)
{u8 key;u8 t=0;                u8 temperature;         u8 humidity;py_load_ui(100,200); while(1){key=py_get_keynum(100,200);if(t%10==0)         //每1000ms读取一次{                                    DHT11_Read_Data(&temperature,&humidity);  //读取温湿度值                        LCD_ShowNum(30+60,60,temperature,2,16);//显示温度          LCD_ShowNum(30+60,90,humidity,2,16);//显示湿度 if(temperature > 30 | humidity > 60 ){key = 8;}}                delay_ms(100);t++;if(t==20){t=0;}switch(key){case 1  : LED0  = !LED0;break;//鞋柜 (左一) case 2  : LED1   = !LED1;break;//鞋柜 (右一)case 3  : LED0    = !LED0;break;//鞋柜 (左二)case 4  : LED1    = !LED1;break;//鞋柜 (右二)case 5  : LED0    = !LED0;break;//鞋柜 (左三)case 6  : LED1    = !LED1;break;//鞋柜 (右三)case 7  : RELAY1 =  !RELAY1;break;//座椅                    case 8  : RELAY2 =   !RELAY2;break;//风扇  两个case 9  : RELAY3 =   !RELAY3;break;//杀菌  灯带case 10 : RELAY4 =   !RELAY4;break;//烘干              }       }
}

基于STM32的智能鞋柜设计与实现--“臭臭没了”相关推荐

  1. 智能手环功能模块设计_基于STM32实现智能手环设计

    龙源期刊网 http://www.qikan.com.cn 基于 STM32 实现智能手环设计 作者:付海生 陈婷婷 韩百科 涂曾兵 来源:<科学导报 · 学术> 2017 年第 10 期 ...

  2. 【毕业设计】基于STM32的智能路灯设计与实现 - 物联网 嵌入式 单片机

    文章目录 1 简介 2 绪论 2.1 项目背景 2.2 需求分析 3 系统设计 3.1 功能设计 3.1.1 系统角色分析 3.1.2 开发环境 3.2 总体设计 3.3 硬件部分 3.3.1 整体架 ...

  3. 基于STM32的智能储物柜设计

    本设计是基于STM32的智能储物柜设计,主要实现以下功能: 1.实现快递箱.快递员和客户之间的手机通信功能 2.实现设置6位密码.密码开锁 3.实现快递箱控制,区分箱体大.中.小 4.实现OLED显示 ...

  4. 基于STM32的智能万年历设计

    [ps:该文章排版有点错乱,如果需要,有PDF版本和WORD版本可供下载观看,还有资源免费下载,请移步作者主页下载,仅供学习参考.该设计是学校要求的课程设计,也是第一次做,很多函数并没有进行封装,部分 ...

  5. 【毕业设计】基于STM32的智能台灯设计 物联网 电子信息 APP远程控制

    文章目录 一.项目简介 二.项目组成 三.原理图设计 四.源码设计 五.APP设计 六.成品展示 视频教程 1.项目开题 2.原理图讲解 3.程序讲解 4.实物展示 一.项目简介 本设计是基于一款ST ...

  6. 基于STM32的智能窗户设计

    基于STM32智能窗户设计 程序编译器:keil 5 编程语言:C语言 编号C0006 [腾讯文档]C0006 网盘链接 资料下载链接 功能说明: 1.智能模式:传感器采集的风力.雨水.温度.湿度.P ...

  7. 基于STM32的智能加湿器设计

    一.任务简述 本次设计采用基于单片机的智能加湿器系统,以STM32F103C8T6和温湿度传感器DHT11为核心,通过湿度传感器采集和转换温湿度信号,再利用单片机进行数据分析和处理,实现智能开启和关闭 ...

  8. 基于STM32的智能电子秤设计

    硬件设计 本设计是一款基于STM32单片机的电子秤系统,随着科学技术的不断发展,传统的机械秤逐渐被电子秤所取代,相比于计量不精确,费时费力的机械秤,电子秤采用在方便快捷的同时,又保证了结果的准确性.本 ...

  9. 基于stm32蓝牙智能小车设计

    前言: 本文描述了一个由STM32微处理器.步进电机.蓝牙,L298N等模块构成的.该系统采用STM32微处理器为核心,在MDK环境下进行编程,通知控制L298N模块IN1~IN4引脚的高低电平进而控 ...

最新文章

  1. Qt5.3.2openglVS2010_QSqlField_字段类型
  2. 8、mybatis之增删改查
  3. Redis高可用原理
  4. C++学习之路 | PTA(天梯赛)—— L2-010 排座位 (25分)(带注释)(并查集)(精简)
  5. Tomcat BIO . NIO . ARP 配置
  6. CentOS 7.4 ifconfig, ip/ss, nmcli, nmtui, 配置文件 修改ip信息用法
  7. 框架源码深入需要准备的知识之解析XML
  8. Python之抖音快手代码舞--字符舞
  9. H3C CLI基础笔记(交换机,链路聚合-DHCP)
  10. 黑客是怎样买彩票的?中奖率提示2倍
  11. 开源中国上几款免费又好用的OA协同办公系统,真心不错!
  12. 【esp8266】【Node.js】【Websocket】esp8266和Node.js通过websocket进行通信,实验记录及踩坑记录
  13. linux升级火狐浏览器
  14. 当前linux的ks文件,高手请进!请教linux自动安装文件ks.cfg
  15. C语言约分-化为最简分数
  16. git 教程(12)--分支管理
  17. Kubernetes RBAC 实战应用
  18. 打印机的ip地址怎么改?
  19. 【NISP一级】4.1 Windows终端安全
  20. Differential dataflow 微分数据流

热门文章

  1. Wix Candle Light Dark
  2. PyQt5:绘制九宫格方块
  3. codeigniter4,ci4 404问题
  4. 自动下载cs231n课件
  5. C# winform 实习语音播报
  6. 试用期,没转正,被辞退,不给赔偿 ?
  7. arduino 伸缩轨道_基于Arduino的多轨道Midi音序器的实现
  8. DDD—实体和值对象
  9. 13.pyg01-项目介绍及登录认证
  10. 新一代EEA的主干网:车载以太网