草庐IT

基于STM32单片机的智能家居毕设

请叫我鱼同学 2023-04-03 原文

文章目录

一、硬件选型

1、硬件清单

序号名称型号/作用数量
1STM32单片机正点原子精英板(STM32F103ZET6)1
2温湿度传感器DHT111
3光敏传感器3针制光敏传感器模块1
4空气质量传感器MQ1351
5人体红外传感器微型人体红外感应模块1
6语音识别模块/播报模块LD3320/JQ8900 MP3(可插SD/TF卡)1
7喇叭3W/4Ω1
8继电器1路5V1
9风扇5V供电1
10舵机SG90 9g舵机 90度1
11步进电机28BYJ-481
12电机驱动板ULN20031
13板载LED2
14触摸/显示屏2.8寸 TFT液晶屏LCD(与正点原子精英版匹配)1/1
15WiFi模块esp8266/esp32 nodemcu1/1
16短信模块SIM900A1
17人脸识别模块SIPEED的Maxipy Bit(K210模块,不建议用这个做,性价比不高)1
18杜邦线母对母/公对公/公对母若干
19电源适配器12V 1A1
20USB数据线/STLink/供电/烧录程序/仿真用1

注:以上的硬件选型并不都是最优选,都是笔者根据自己现有的资源和后续购买的硬件配合使用的,读者可根据自己的情况选购。

2、硬件展示(部分)

注:上图展示的是项目中使用到的部分器件,如TFTLCD、esp32和风扇等是后续添加的,上图并没有显示,并且最后的功能中已不再使用红外遥控还有LCD1602的功能,还有就是上图中的“人体红外传感器”和“光照传感器”的位置弄反了,大家知道就行,哈哈。

二、效果展示

1、整体效果展示

视频效果看这里 :
第一版视频效果展示
第二版视频效果展示

2、显示屏(触摸)效果展示



本设计中的触摸屏的功能都是笔者完全从0开发的,没有使用lvgl,都是简单的页面切换,图案所有都是通过在阿里巴巴矢量图标库找到适合的图标然后再转化为bmp图片让触摸屏显示的。

三、功能分析

1、系统总体结构框图

系统主要由主控制器、人机交互、设备控制、客户端和各终端节点组成。其中设备控制包括电机控制和触摸屏控制等,客户端为移动手机端,实现系统的远程控制功能。

2、主要包含的功能

本设计主要实现以下功能:
(1)传感器数据采集及显示。
(2)微信小程序远程监测及控制。
(3)TFTLCD触摸屏多功能(七大功能)页面显示及触摸控制。
(4)人脸识别开门,离家模式下人体红外检测及报警。
(5)语音控制及播报、音乐播放、天气预报播报。
(6)根据设定阈值自动报警以及根据光照度自动开关窗帘。
(7)短信警报/语音拨打特定电话
(8)重要变量的掉电保存

四、怎么做?

1、STM32单片机部分

主要使用到了GPIO的输入输出、定时器、PWM、RTC、ADC、IIC、串口通信(中断)等功能。这部分主要使用的是正点原子的例程模板。
STM32负责处理的内容有很多,如传感器数据的采集、家电硬件的控制、触摸屏的控制、与语音(播报)模块/短信模块/esp32/esp8266等的串口通信等,其中触摸屏显示部分又有闹钟、音乐(乞丐版)、设置、家电控制、模式选择、环境数据采集、天气预报等七大功能模块,而音乐播放其实只有播放/暂停/上下首/增减音量的功能,且只能播放SD卡里面指定的歌曲,没有文件读写功能,其实超级垃圾😄,大家看看就好,哈哈~
其中,天气时钟是参考的以下资料:
1、基于STM32的ESP8266天气时钟
2、C语言 | JSON格式天气数据的解析(附详细代码)
3、使用cJSON解析JSON字符串

2、语音识别与播报部分

(1)实现流程简介
语音识别模块使用的是LD3320,例程资料可以去某宝上买该模块的店铺下面找网盘链接进行下载。播报模块使用的是JQ8900(可以插TF卡的那款,这个没有要求,根据自己情况买就行),笔者开发的方法是通过STM32的串口与两个模块进行连接(如使用串口2的RX端连接LD3320的TX,TX端连接JQ8900的RX),LD3320识别语音指令后,通过TX端发送对应的指令给STM32的RX端,然后STM32再根据接收到的指令执行对应的控制,并且通过串口的TX端发送特定的指令控制JQ8900播放已存在TF卡(SD卡)里面对应的语音曲目,这样便实现了语音交互的功能。 详细通信格式可看JQ8900的通信手册(某宝有)。
(2)部分命令展示

LD3320识别指令JQ8900播放的语音
xiao ai(小爱)我在
da kai ke ting deng(打开客厅灯)客厅灯已打开
guan bi ke ting deng(关闭客厅灯)客厅灯已关闭
zhi ma kai men(芝麻开门)门已打开
kai chuang(开窗)窗已打开
jie shao yi xia ni zi ji(介绍一下你自己)你好,我叫小爱,…
da dian hua gei***(打电话给***)好的

需要注意的是,这些指令都是需要提前设置好的,并不是真正的AI识别,并且播放的语音要通过语音合成器提前转换好并存入SD卡中(要插入JQ8900)。

3、微信小程序开发部分

小程序开发可以看这个B站UP主的视频学习哦,参考学习资料:stm32+esp8266+小程序智能家居毕设
下面这个是有大佬学习之后做的笔记,大家可以参考一下,应该可以少走很多弯路,这也是笔者做完之后才发现的:
大佬整理的stm32+esp8266+小程序智能家居毕设笔记
本设计是经过扩展了的哦,除了小程序是参考的视频,其他很多设计都是自己开发的哦。
小程序的设计主要由3部分组成,分别为天气显示、环境监测、命令下发。天气数据主要通过调用知心天气的API接口获取;环境监测部分显示的数据主要由STM32单片机通过MQTT协议上传;命令下发由小程序通过MQTT协议下发给STM32单片机,单片机再根据接收到的命令控制执行对应的操作。


可能需要用到的网站:
1、阿里巴巴矢量图标库
2、vue安装网站
3、阿里云镜像
4、mpvue安装

4、人脸识别开发部分

人脸识别使用的是Maix Bit开发板(K210模块),这个模块功能很强大,可以跑机器视觉和神经网络等算法,因为笔者想要实现一个人脸识别开关门的功能,所以就随便买了这个模块,但只是会用一点,主要是通过修改和烧录官网的人脸识别程序即可,通过串口与STM32通信,若人脸识别成功则通过K210的串口TX引脚发送指定命令给单片机,从而让单片机控制舵机(模拟窗户)的开关。但不推荐大家使用这个模块来实现人脸识别的功能,因为性价比不高,这里推荐大家使用esp32 cam来实现,该模块性价比更高,使用Arduino环境开发,会更加的简单(虽然我没做)😄。
但如果你想玩k210的人脸识别的话,可以参考这个网站Maxipy人脸识别文档

下面是人脸识别成功的情况,识别成功后绿灯会亮,并且显示已录入的人脸信息,如果识别失败则红灯亮,且显示“X”(未知人脸)

内容大概就是这几大方面,因为项目比较大,所以只能简略的介绍一下,大家可以参考一下,目前项目还有不少的BUG,但笔者不打算完善了,因为有更重要的事做~

五、还可以怎么完善?

1、增加视频监控功能,推荐使用esp32 cam。
2、语音播报可以把JQ8900改为SYN6288(这个笔者没有用过),SYN****是一款TTS文字转语音模块,在播报方面会更加的灵活。
3、移植lvgl,显示的内容更加丰富。
4、绘制电路板,将硬件焊接在一起。
5、基于freeRTOS等操作系统开发等等…

六、总结

总体来说,本设计实现的功能主要是对家居的控制,有本地控制、远程控制和语音控制,整体上实现了一个功能较杂的智能家居系统(基于裸板开发的),但该系统整体上还有很多内容需要优化,也还存在一定的BUG,所以大家在参考的时候可以带有辩证的眼光去看待,希望不要被我带偏了😄

这是笔者第一次写博客,如果写得不好请见谅哈!都看到这里了,各位大佬难道不给笔者点个赞再走嘛~~~

有关基于STM32单片机的智能家居毕设的更多相关文章

  1. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  2. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  3. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  4. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  5. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  6. ruby-on-rails - (Ruby,Rails) 基于角色的身份验证和用户管理...? - 2

    我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源

  7. ruby - 在 Rakefile 中动态生成 Rake 测试任务(基于现有的测试文件) - 2

    我正在根据Rakefile中的现有测试文件动态生成测试任务。假设您有各种以模式命名的单元测试文件test_.rb.所以我正在做的是创建一个以“测试”命名空间内的文件名命名的任务。使用下面的代码,我可以用raketest:调用所有测试require'rake/testtask'task:default=>'test:all'namespace:testdodesc"Runalltests"Rake::TestTask.new(:all)do|t|t.test_files=FileList['test_*.rb']endFileList['test_*.rb'].eachdo|task|n

  8. ruby - 如何使用 Ruby 基于字母数字字符串生成颜色? - 2

    我想要像“嘿那里”这样的东西变成,例如,#316583。我希望将任意长度的字符串“归结”为十六进制颜色。我不知道从哪里开始。我在想,每个字符串的MD5散列都是不同的-但如何将该散列转换为十六进制颜色数字? 最佳答案 你可以只取几位前几位:require'digest/md5'color=Digest::MD5.hexdigest('Mytext')[0..5] 关于ruby-如何使用Ruby基于字母数字字符串生成颜色?,我们在StackOverflow上找到一个类似的问题:

  9. 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一) - 2

    前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型

  10. 【自动驾驶环境感知项目】——基于Paddle3D的点云障碍物检测 - 2

    文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3

随机推荐