发作品签到
标准版

【训练营_进阶班】基于阿里云的智能插座

工程标签

3.1k
0
0
2

简介

基于阿里云的智能插座,选择stm32为主控,emw3080作为无线通讯模块,添加一路继电器开关,四个led指示灯,ds18b20温度传感器。设计目标为通过公版app控制继电器,同时上传温度到app。

简介:基于阿里云的智能插座,选择stm32为主控,emw3080作为无线通讯模块,添加一路继电器开关,四个led指示灯,ds18b20温度传感器。设计目标为通过公版app控制继电器,同时上传温度到app。

开源协议

GPL 3.0

创建时间:2020-08-05 13:04:08更新时间:2020-11-18 11:08:22

描述

演示视频在最后!

第1章 绪论

1.1 项目背景与意义

近年来,随着人们生活及科技水平的不断提高,智能开关在家居、别墅等领域领先兴起,让这一部分人优先享受到现代科技带来的智能感受,必然带动用户的全面升级换代。智能化开关在家庭、工厂、办公、学校等公共空间的运用,满足了顾客对个性化、智能化、互动性、安全性的服务需求,也提升了这些应用场所的档次。智能开关作为趋势性产品,是各大家居市场的重点发展方向。

所以,该工程的目的在于设计并制作一个可通过手机app无线远程控制继电器开关,同时上传当前室内温度到app实时显示的基于阿里云的智能开关。(我摊牌,白嫖使我快乐)

第2章 方案设计与硬件选择

2.1 本文设计任务及要求

2.1.1设计任务

设计并制作一套基于STM32和EMW3050模块的智能开关。搭配阿里云公版app实现手机远程控制继电器开关的功能,同时上传实时温度到app端显示。

2.2.2实现的主要功能

(1) 继电器的远程启停控制。

(2) 实现温度的定时测量并上传。

(3) 重新配网功能。

2.2 系统的总体方案设计

系统采用STM32F103C8T6作为智能开关的控制核心,EMW3080模块作为系统的WiFi通讯装置,ds18b20模块检测系统温度,通过app实现远程操控继电器和显示温度。硬件由电源电路,stm32最小系统,EMW3080模块,继电器驱动电路等等组成。软件主要由串口通讯、温度读取、IO口读写等主体部分组成。整体系统框图如下图所示。

image.png

图2-1 系统框图

2.3 主芯片的选择

采用STM32F103C8T6芯片。STM32F103C8T6具有诸多优点,其内核为 ARM 32位的Cortex™-M3 CPU,最高72MHz工作频率。拥有从64K字节的闪存程序存储器和高达20K字节的SRAM。拥有 3个16位定时器,输入捕获/输出比较和增量编码器输入。支持多达2个I2C接口和 3个USART接口。方便高效的开发环境使操作更加简便,低功耗是其它类单片机难以比拟的,集成度较高,编程相对简单,且STM32系列在网络上拥有非常丰富的资源,非常利于学习和开发。

image.png

图2-2.立创商城有售STM32F103C8T6

2.4 温度传感器的选择

DS18B20是常用的数字温度传感器,测温范围-55℃~+125℃,固有测温误差1℃,精度是0.5。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

image.png

图2-4.DS18B20温度传感器

 

2.5 WIFI通讯模块的选型

选择庆科的EMW3080模块。EMW3080是基于MX1290V2 SOC的单3.3V供电的、集成Wi-Fi和Cortex-M4F MCU的嵌入式Wi-Fi模块,最高支持62.5M主频和256K RAM,强大的浮点运算,Memory、外设接口资源丰富,能满足大部分应用需求和多云的要求。该模块经过阿里云官方认证,安全可靠。AT指令直连阿里云平台简化开发量,商用模组供货可靠。为什么不用esp8266呢,百度了一下,性能远超!!



![image.png](//image.lceda.cn/pullimage/wGqNnzSsGfApNkOEtDFGa5kZBKrwADLeRTSryoZT.png) ![image.png](//image.lceda.cn/pullimage/YjEkGrAKiBBlSiIFMwy6SvBqIiWLIUjLhGVI2uNK.png)![image.png](//image.lceda.cn/pullimage/g75gNyMcUOnE9IrPyrRiSurtlKOOlgOj0fbA0ygE.png)

其实主要还是之前自己用过esp8266,用arduino开发搭配blinker平台,\\\\\\\\https://www.bilibili.com/video/BV16b411B7wd?p=1\\\\\\\</span>(不要点开这个链接)说实话,是真的简单又方便。。这次想尝试一点新的玩意,还好没翻车。

2.6 继电器以及驱动芯片的选择

继电器选择汇科的HK4100F-DC5V-SHG,该继电器的线圈电压为5V,搭配继电器驱动芯片NUD3105LT1G。简化电路设计,同时增强电路稳定性,一举两得。

image.png
image.png

图2-8.继电器以及驱动芯片

第3章 原理图设计和PCB绘制

3.1 电路原理图设计

本工程设计的基于阿里云智能插座电路设计主要包括STM32F103C8T6的最小系统电路、emw3080模块电路、按键电路、DS18B20驱动电路、下载电路、稳压电路、继电器驱动电路、LED指示灯电路等等。 系统的主控制电路如下图所示:

image.png

图3-1.控制电路原理图

3.1.1 最小系统电路

STM32F103C8T6的最小系统框图如下图所示,它主要是包含有晶振、复位和BOOT选择的使能电路,其中MCU是STM32F103C8T6芯片。

image.png

图3-2.STM32F103C8T6的最小系统框图

3.1.2 emw3080模块电路

Emw3080模块电路的主要功能是通过串口与stm32进行数据传输,除此之外还需要将boot引脚引出,方便刷写固件。将EN引脚连接stm32方便通过程序进行模块复位。同时根据数据手册,将模块的GPIO23上拉。emw3080模块电路如下图所示。

image.png

图3-3.EMW3080模块电路

3.1.3 按键电路

除去stm32最小系统的复位按键外,按键电路部分还由另一个轻触按键构成,由于STM32的IO口自带上拉电阻对电流进行约束,将按键的另一端共地即可。该按键的主要功能是对emw3080模块进行从重新配网操作。

image.png

图3-4.按键电路

3.1.4 ds18b20驱动电路

根据ds18b20官方手册,该温度传感器有两种电路连接模式,除了传统的外部电源供电,DS18B20也可以工作在“寄生电源模式”,而下图则表示了DS18B20工作在“寄生电源模式”下的电路连接图,这样就可以使DS18B20工作在寄生电源模式下了,不用额外的电源就可以实时采集温度信息了。另外该模块采用单总线数据格式,只需要占用stm32一个IO口读写。

image.png

图3-5.ds18b20驱动电路

3.1.5USB通讯供电电路

通过ams1117-3.3线性稳压器将micro_usb外部供电的5V电压转换为芯片所需3.3V电压。除了供电电路,这里还通过CH340E USB芯片连接mirco_usb母头的数据线,以及stm32串口一的rx和tx口。

image.png

图3-6.USB通讯供电电路

3.1.6 LED指示灯电路

设计四个led指示灯用来显示当前设备的运行状态,更好的进行信息传递和人机交互。

image.png

图3-7.LED指示灯电路

3.1.7继电器驱动电路

选择线圈电压为5V的继电器模块HK4100F-DC5V-SHG,同时添加继电器驱动芯片NUD3105LT1G,免去了自己搭建继电器驱动电路的麻烦,同时工作更加稳定。

image.png

图3-8. 继电器驱动电路

3.2 PCB绘制

3.2.1 基本设计流程

一般PCB线路板设计的基本设计流程如下:前期准备->原理图设计->PCB结构设计->PCB布局->布线->布线优化->网络和DRC检查和结构检查。
第一:前期准备

这包括准备元件库和原理图。“工欲善其事,必先利其器”,要做出一块好的板子,除了要设计好原理之外,还要画得好。在进行PCB设计之前,首先要准备好原理图SCH的元件库和PCB的元件库。但是!!牛逼的立创EDA为你省去了这麻烦的一步,已创建100多万种实时更新的元件,让你更专注于设计!
image.png


第二:PCB结构设计

这一步根据已经确定的电路板平面尺寸和各项机械定位,在PCB设计环境下绘制PCB板面,并按定位要求放置所需的接插件、按键/开关、数码管、指示灯、输入、输出、螺丝孔、装配孔等等.并充分考虑和确定布线区域和非布线区域(如螺丝孔周围多大范围属于非布线区域)。
需要特别注意,在放置元器件时,一定要考虑元器件的实际尺寸大小(所占面积和高度)、元器件之间的相对位置—空间尺寸,器件放置的面,以保证电路板的电气性能和生产安装的可行性和便利性同时,应该在保证上面原则能够体现的前提下,适当修改器件的摆放,使之整齐美观,如同样的器件要摆放整齐、方向一致。

第三:PCB布局

1、布局前确保原理图的正确无误
原理图绘制完毕检查项目:电源网络、地网络等。

2、布局时要注意器件放置的面(特别是插件等)与器件的摆放方式(直插是卧放还是竖着放),以保证安装的可行性与便利性。

3、布局说白了就是在板子上放器件。这时如果前面讲到的准备工作都做好的话,就可以在原理图上生成网络表(Design->CreateNetlist),之后在PCB图上导入网络表(Design->LoadNets)。

一般布局按如下原则进行:

布局时应确定好器件放置的面:一般来讲贴片要放同一面,插件要看具体的情况。

①按电气性能合理分区,一般分为:数字电路区(即怕干扰、又产生干扰)、模拟电路区(怕干扰)、功率驱动区(干扰源);

②完成同一功能的电路,应尽量靠近放置,并调整各元器件以保证连线最为简洁;同时,调整各功能块间的相对位置使功能块间的连线最简洁;

③对于质量大的元器件应考虑安装位置和安装强度;发热元件应与温度敏感元件分开放置,必要时还应考虑热对流措施;

④I/O驱动器件尽量靠近印刷电路板的边、靠近引出接插件;

⑤时钟产生器(如:晶振或钟振)要尽量靠近用到该时钟的器件;

⑥布局要求要均衡,疏密有序,不能头重脚轻或一头沉。

第四:布线

布线是整个PCB设计中最重要的工序。这将直接影响着PCB板的性能好坏。在PCB的设计过程中,布线一般有这么三种境界的划分:首先是布通,这时PCB设计时的最基本的要求。如果线路都没布通,搞得到处是飞线,那将是一块不合格的板子,可以说还没入门。其次是电器性能的满足。这是衡量一块印刷电路板是否合格的标准.这是在布通之后,认真调整布线,使其能达到最佳的电器性能,接着是美观。布线要整齐划一,不能纵横交错毫无章法.这些都要在保证电器性能和满足其他个别要求的情况下实现。

布线时主要按以下原则进行:

①一般情况下,首先应对电源线和地线进行布线,以保证电路板的电气性能。在条件允许的范围内,尽量加宽电源、地线宽度,最好是地线比电源线宽,它们的关系是:地线>电源线>信号线,通常信号线宽为:0.20.3mm,最细宽度可达0.050.07mm,电源线一般为1.2~2.5mm.对数字电路的PCB可用宽的地导线组成一个回路,即构成一个地网来使用(模拟电路的地则不能这样使用);

②预先对要求比较严格的线(如高频线)进行布线,输入端与输出端的边线应避免相邻平行,以免产生反射干扰.必要时应加地线隔离,两相邻层的布线要互相垂直,平行容易产生寄生耦合;

③振荡器外壳接地,时钟线要尽量短,且不能引得到处都是。时钟振荡电路下面、特殊高速逻辑电路部分要加大地的面积,而不应该走其它信号线,以使周围电场趋近于零;

④尽可能采用45°的折线布线,不可使用90°折线,以减小高频信号的辐射;(要求高的线还要用双弧线);

⑤任何信号线都不要形成环路,如不可避免,环路应尽量小;信号线的过孔要尽量少;

⑥关键的线尽量短而粗,并在两边加上保护地;

⑦通过扁平电缆传送敏感信号和噪声场带信号时,要用“地线-信号-地线”的方式引出;

⑧关键信号应预留测试点,以方便调试、生产和维修检测用;

⑨原理图布线完成后,应对布线进行优化;同时,经初步网络检查和DRC检查无误后,对未布线区域进行地线填充,用大面积铜层作地线用,在印制电路板上把没被用上的地方都与地相连接作为地线用。或是做成多层板,电源,地线各占用一层。

第五:添加泪滴

第六:检查的第一项,依次看Keepout层、top层、bottom层topoverlay、bottomoverlay。

第七:电器规则检查:过孔(0过孔-很是不可思议;0.8分界线)、是否有断开的网表、最小间距(10mil)、短路

第八:电源线与地线的检查—干扰。(滤波电容应靠近芯片)

第九:PCB完成后重新载入网标可检查网表是否有被修改的地方—很奏效。

第十:PCB完成后把核心器件的线核查一下,确保准确无误。

3.2.2 最终PCB展示

本文中,在原理图设计以及相关电路仿真完成后,根据电路原理图,依照智能插座的实际工作情况进行规则设置。之后对进行网络表的输入,对元器件进行合理的布局,依照 PCB 板设计时布线的相关原则进行布线、检查,最后完成智能插座的 PCB 板制作。

image.pngimage.png
image.pngimage.png

图3-9.智能插座PCB

第4章 算法及程序编写

4.1 EMW3080 AT指令

对于了解一个模块的使用方法,最好的办法时查阅他的技术文档。所以我们先打开庆科的官网公共文档。

image.png

因为我们买的emw3080已经刷写了飞燕平台的固件,所以点击直连阿里ILOP飞燕平台指令交互流程示例,点击进去后他会分别呈现设置三元组、配网流程、控制指令收发的三张流程示意图。根据流程图片通过stm32串口读写AT指令,可成功实现上述功能。

image.png

4.1.1设置三元组

image.png

4.1.2配网流程

image.png

4.1.3控制指令收发

image.png

在阿里生活物联网平台创建项目,并添加设备后,获得设备专属的三元组(其实是四元组),便可以开始上述的流程操作了。

4.2 DS18B20温度读取

DS18B20 的典型温度读取过程为:

1.复位  

2.发 SKIP ROM 命令( 0XCC)  

3.发开始转换命令( 0X44)

4.延时

5.复位

6.发送 SKIP ROM 命令( 0XCC)

7.发读存储器命令( 0XBE)

8.连续读出两个字

节数据(即温度)

9.结束。

复位脉冲和应答脉冲单总线上的所有通信都是以初始化序列开始。根据ds18b20初始化时序图可以得知主机输出低电平,保持低电平时间至少480us,,以产生复位脉冲。接着主机释放总线, 4.7K 的上拉电阻将单总线拉高,延时 15~60 us,并进入接收模式(Rx)。接着 DS18B20 拉低总线 60~240 us,以产生低电平应答脉冲,若为低电平,再延时 480 us。

image.png

初始化时序图

写时序包括写 0 时序和写 1 时序。所有写时序至少需要 60us,且在 2 次独立的写时序之间至少需要 1us 的恢复时间,两种写时序均起始于主机拉低总线。写 1 时序:主机输出低电平,延时 2us,然后释放总线,延时 60us。写 0 时序:主机输出低电平,延时 60us,然后释放总线,延时 2us。

单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要 60us,且在 2 次独立的读时序之间至少需要 1us 的恢复时间。每个读时序都由主机发起,至少拉低总线1us。主机在读时序期间必须释放总线,并且在时序起始后的 15us 之内采样总线状态。典型的读时序过程为:主机输出低电平延时 2us,然后主机转入输入模式延时 12us,然后读取单总线当前的电平,然后延时 50us。

image.png

读写时隙时序图

4.3 LED、继电器、按键部分

STM32只需要进行简单的IO 口读写操作。

4.4 串口通讯部分

串口通讯算程序中的大头,在该系统中总共开启两个串口USART1和USART2,其中USART1与PC相连,负责单片机程序的烧录,以及重要信息的回显。USART2与EMW3080W相连,负责AT指令的读写,包括上述提到的三元组写入、wifi配网以及控制指令的收发。
STM32只需要进行简单的IO 口读写操作。
其中串口一的回显可直接调用函数printf,可方便的在电脑端的串口助手上显示程序是否按照你的逻辑运行,譬如显示ds18b20是否初始化成功,emw3080三元组是否写入,以及配网是否成功等等,在程序的调试阶段有着极为方便的作用。

其次串口二负责与EMW3080通讯,进行AT指令的读写。可以自定义函数u2_printf,功能类似串口一printf的发送功能,但主要功能是为了写AT指令,由于没有直接将emw3080与电脑通过串口模块相连,为了更好的来了解emw3080收到AT指令后返还的信息,需要通过一个函数将串口二收到的信息通过串口一显示到PC端,方便程序调试。

//将收到的AT指令应答数据返回给电脑串口

//mode:0,不清零USART2_RX_STA;

//     1,清零USART2_RX_STA;

void emw3080_at_response(u8 mode)

{

if(USART2_RX_STA&0X8000)  //接收到一次数据了

{

USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符

printf("%s",USART2_RX_BUF); //发送到串口

if(mode)USART2_RX_STA=0;

}

}

另外对于串口二接收到的EMW3080控制指令,因为项目并不复杂,我投机取巧并没有使用json解析,直接用个strstr函数解决了。

//EMW3080发送命令后,检测接收到的应答

//str:期待的应答结果

//返回值:0,没有得到期待的应答结果

//    其他,期待应答结果的位置(str的位置)

u8* emw3080_check_cmd(u8 *str)

{

char *strx=0;

if(USART2_RX_STA&0X8000)  //接收到一次数据了

{

USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符

strx=strstr((const char*)USART2_RX_BUF,(const char*)str);

}

return (u8*)strx;

}

然后在循环中判断接收到的字符串中是否包含自己想要的信息就好啦。。。说实话感觉b格不高,但是他不香吗。

if(emw3080_check_cmd(":0"))

{

printf("key off\r\n");

relay=0;

LED4=1;

}

if(emw3080_check_cmd(":1"))

{

printf("key on\r\n");

relay=1;

LED4=0;

}

if(emw3080_check_cmd("CONNECT"))

{

printf("配网成功\r\n");

LED2=1;

}

 

还有想提醒大家一点的是,有时候你想着为什么AT指令有问题时,可以先看看你有没有在AT指令读写前将EMW3080复位,之前我也是写不进,后来试了一下吧emw3080的EN引脚通过IO口程序复位了一下后,一切都顺利了。

 

 

第5章 调试过程及结果

5.1 电路板的焊接以及检查

总共焊了两块板子,本来还想着家里没电烙铁咋办,没想到直播中了黄花907,但大学期间我就几乎没有焊过板子,赶紧看了立创EDA b站的电烙铁贴片焊接教程,网上买了个刀头,开始我的处女作。。。。

第一块板子焊好后,能检测到串口,开心了一下后,发现led灯不亮。。。心态炸裂,试了继电器也可以,就这个led不亮。也不知道是哪出了问题,毕竟焊接新手。于是开始焊接第二块板子,幸亏买了两套的元器件,不然嗝屁。第二块板子焊好后,led灯亮了!!但是有一个不亮,我开始捣鼓了,毕竟只有这块板子了,检查发现是led灯旁边的电阻就焊住了一边,另外一边没焊到焊盘上。Led灯问题解决后,发现按键不灵了。。。。仔细一看好像又是虚焊了,在返工后成了。板子电路调通了后,舒坦了。

image.png

第一块失败品和第二块成品

5.2 程序调试

电路板元器件焊接并检查完成后,开始实物的程序调试。程序调试分以下几个步骤:

1. 各模块单独调试

2. 模块组合调试

3. 系统整体调试

各模块单独调试包括:led灯控制,继电器控制,按键输入,温度数据获取,串口通讯等等。在确定各部分单独工作运行正常后。开始模块组合调试,包括:按键输入控制模块配网,通过AT指令发送温度数据,根据接收到的字符串控制继电器开关等等。

模块组合调试完成后,将功能有机得结合到一起,开始系统的整体调试,改进程序,修改错误,根据本文设计方案的任务要求,实现要求功能。

总结

本文完成的工作主要有以下内容:

1、介绍了智能插座发展概况,叙述了智能风扇研究的背景和实际的工程意义

2、介绍了方案设计与硬件选择

3、介绍了PCB 相关设计原则, 在设计电路原理图同时完成 PCB 的绘制。

4、对主要程序进行流程分析,对主要算法进行原理解释。

5、进行了硬件电路的搭建,同时烧录程序进行了调试完成了以下功能:

(1)继电器的远程启停控制。

(2)实现温度的定时测量并上传。

(3)按键重新配网功能。

本次课程设计——基于阿里云的智能开关到此已经完成,尽管在设计中还存在着许多缺点和不足,但是从中我学到了不少东西,在这次课程设计中,在立创EDA老师的专业指导和个人的学习下,我应用了电路设计和嵌入式软件开发等知识,对设计一个物联网控制系统有了更深入的理解,锻炼了自身动手能力和工程项目开发的能力,将理论实际紧密结合到一起,对今后的不管是工作上,学习上还是生活上都有着巨大的帮助。


**最后突发奇想把这块pcb用到了电脑散热板上。** **详细制作过程及效果可看下面的视频哟~** **大家有兴趣的话,还有添加各种功能,比如说来个远程电脑启动,电脑性能远程监测,或者在加一个oled,显示电脑性能温度啥的随意发挥哈哈哈哈**

QQ图片20200822235323.png

设计图

原理图
PCB

BOM

IDNameDesignatorFootprintQuantity
122pFC13,C12,C11,C10,C9,C8C06036
24.7KR1R06031
317-21/GHC-XS1T2M/3TLED3,LED2,LED1,LED4LED0805-R-RD4
4HDR-F-2.54_1x2H1M_2.54_1*2P_JX1
5DB128L-5.08-2PU5CONN-TH_2P-P5.08_DB128L-5.08-2P1

附件

序号文件名称下载次数
1
VID_20200822_194807_1_Sub_01.mp4
34
2
VID_20200822_194807_1_Sub_02.mp4
17
3
VID_20200822_194807_1_Sub_03.mp4
17
4
VID_20200822_194807_1_Sub_04.mp4
12
5
VID_20200822_194807_1_Sub_05.mp4
13
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航