目录
1.课题研究目的和内容
1.1 课题研究目的
智能家居,或称智能住宅,是以住宅为平台,兼备建筑设备、网络通讯、信息家电和设备自动化,集系统、结构、服务、管理为一体的高效、舒适、安全、便利、环保的居住环境。它在保持了传统的居住功能的基础上,摆脱了被动模式,成为具有能动性智能化的现代工具。智能家居不仅提供了全方位的信息交换功能,还优化了人们的生活方式和居住环境,帮助人们有效地安排时间、节约各种能源,实现了家电控制、照明控制、室内外遥控、窗帘自控、防盗报警、计算机控制、定时控制以及电话远程遥控等功能。
1.2 课题研究内容
随着科学技术的快速发展以及经济水平的提升,人们对于生活质量有了更高的追求。传统家电产品性能已发展到极限,难有大幅度上升。传统家电行业急需创新产品,时下最热门的人工智能便成了行业突破口。因此,智能家居成为了家电大厂和互联网巨头的必争红海。本文介绍的智能云家居共有三大部分:第一部分采用了STM32F103ZET6作为主控芯片,由数据采集系统、数据处理系统、数据云传输系统以及智能家居智能调节系统构成;第二部分采用了多种传感器和ESP8266 WIFI模块搭建一个具有远程控制的智能家居控制系统,实现家居环境的远程监测与家电控制;第三部分手机APP端通过云平台的数据共享,即可实现远程对家居设备的控制以及家庭温湿度等环境信息的实时查看。
2.系统总体方案设计及功能模块介绍
2.1 总体方案设计
涉及技术:物联网感知与识别技术、C语言、无线传感网络
开发环境:keil5
平台及其功能
平台:ONENET云平台、微信小程序
图2-1-1 WIFI通信模块流程图
图2-1-2传感器数据采集模块流程图
2.2 DHT11模块介绍
DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,内部由一个 8 位单片机控制一个电阻式感湿元件和一个 NTC 测温元件。DHT11 是采用单总线协议, DHT11 既能检测温度又能检测湿度,其温度测量范围为 0~50℃,误差在±2℃;湿度的测量范围为 20%~90%RH,误差在±5%RH。
图2-2-1温度传感器
2.3 TFTLCD显示功能模块介绍
本次设计使用的4.3寸TFTLCD。分辨率为800*480,16 位真彩显示,自带触摸屏,可以用来作为控制输入。LCD 接口连接在 STM32F103ZET6 的 FSMC 总线上面,可以显著提高 LCD 的刷屏速度。
图2-3-1LED显示屏
2.4 ESP8266WIFI模块介绍
ESP8266是一种强大的WIFI模块,它由ESPRESSIF SYSTEMS公司开发,可以实现与网络通信的功能。ESP8266在物联网中被广泛使用,可以通过串行通信接口连接到微控制器,例如Arduino,以实现智能家居、智能灯光、智能车辆等应用场景。
图2-4-1 Esp8266
2.5 MQ-135 空气质量模块介绍
MQ135空气质量传感器是MQ气体传感器的一种,用于检测、测量和监测空气中存在的各种气体,如氨、酒精、苯、烟雾、二氧化碳等。它在5V电源和150mA下工作消耗。需要注意,在操作前需要预热20秒,以获得准确的输出。
2.5 MQ-135 空气质量模块介绍
MQ135空气质量传感器是MQ气体传感器的一种,用于检测、测量和监测空气中存在的各种气体,如氨、酒精、苯、烟雾、二氧化碳等。它在5V电源和150mA下工作消耗。需要注意,在操作前需要预热20秒,以获得准确的输出。
图2-5-1 空气质量传感器 图2-5-2 空气质量传感器引脚连接图
2.6 步进电机模块介绍
步进电机是将电脉冲信号,转变为角位移或线位移的开环控制电机,又称为脉冲电机。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。当步进驱动器接收到一个脉冲信号时,它就可以驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”。步进电机的旋转是以固定的角度一步一步运行的,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的,同时可以通过控制脉冲频率,来控制电机转动的速度和加速度,从而达到调速的目的。
图2-6-1 步进电机
2.7 光敏传感器模块介绍
光敏传感器是利用光敏元件将光信号转换为电信号的传感器,它的敏感波长在可见光波长附近,包括红外线波长和紫外线波长。 光传感器不只局限于对光的探测,它还可以作为探测元件组成其他传感器,对许多非电量进行检测,只要将这些非电量转换为光信号的变化即可 。
图2-7-1 光敏传感器
3.系统硬件设计与实现
3.1 系统硬件实物图
图3-1-1 系统硬件实物图
3.2 STM32F103ZET6
STM32系列产品基于ARM Cortex-M0,M0+,M3,M4和M7内核,具有高性能、低成本、低功耗等特点,适用于各种嵌入式应用开发。
本次设计采用STM32F103ZET6开发板,共有54个可供用户使用的引脚,以及一个34引脚的LCD屏幕插槽。属于中低端的32位ARM微控制器,基于高性能内核Cortex-M3,频率约为1.25DMips/MHz。拥有1μs的双12位ADC,4M/s的UART,18MHz的I/O翻转速度,18M/s的SPI。同时保持低功耗的特点。该芯片集成了UART,USB,定时器,ADC,CAN,I2C,SPI等多项功能。是一款非常常用的微型控制器。STM32系列产品成本比51单片机要高出不少,但其性能及可供使用引脚也较之提高不少,相信随着成本的不断降低,市场上将会有更多基于STM32的诸如医疗用品、电力电子系统应用、编程控制器、电机驱动、警报系统等产品。原理图如下图所示。
图3-2-1 STM32F103ZET6原理图
3.3 DHT11模块
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。DHT11的供电电压为3-5.5V。传感器上电后,要等待1s以越过不稳定状态,在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。
图3-3-1 dht11引脚图
3.4 TFTLCD显示模块设计与实现
图3-4-1 TFTLCD引脚图 |
TFTLCD引脚如图,图中的CS:TFTLCD片选信号,WR:向TFTLCD 写入数据,RD:从TFTLCD读取数据、D[15:0]:16位双向数据线,RST:硬复位TFT LCD,RS:命令/数据标志(0,读写命令;1,读写数据)。
3.5 Esp8266模块设计与实现
ESP8266是一款高性能的WIFI串口模块,内部集成MCU能实现单片机之间串口通信,是目前使用最广泛的一种WIFI模块之一,可以简单理解为一个WIFI转串口的设备。
序号 | 名称 | 说明 |
1 | VCC | 电源(3.3V~5V) |
2 | GND | 电源地 |
3 | TXD | 模块串口发送脚 |
4 | RXD | 模块串口接收脚 |
5 | RST | 复位(低电平有效) |
6 | IO | 用于进入固件烧写模式 |
ESP8266 模块支持 LVTTL 串口,兼容 3.3V 和 5V 单片机系统
图3-5-1 ESP8266原理图
3.6 MQ-135模块设计与实现
气体传感器所使用的气敏材料是在清洁空气导电率较低的二氧化锡,当传感器所处环境中存在污染气体时,传感器的导电率随空气中污染气体浓度的增加而增大,使用简单的电路即可将电导率的变化换为与该气体浓度相对应的输出信号。
图3-6-1MQ135模块原理图
3.7 光敏传感器模块设计与实现
ALIENTEK 战舰 STM32F103 板载了一个光敏传感器,可以用来感应周围光线的变化,该 部分电路如下图所示:
图3-7-1光敏模块原理图
图中的 LS1 就是光敏传感器,其实就是一个光敏二极管,周围环境越亮,电流越大,反之 电流越小,即可等效为一个电阻,环境越亮阻值越小,反之越大,从而通过读取 LIGHT_SENSOR的电压,即可知道周围环境光线强弱。LIGHT_SENSOR 连接在 MCU 的 ADC3_IN6(ADC3 通道 6)上面,即 PF8 引脚。
4.系统软件设计与实现
4.1主程序设计与实现
当系统接入电源并打开开发板开关后,主程序将会自动完成系统的初始化工作,主要包括头文件及一些变量定义的初始化。随后通过ESP8266连接网络,再启动TFTLCD模块显示获取到的传感器的数据,再从云平台获取数据对步进电机和灯进行控制。系统主程序流程图如图4-1-1所示。
图4-1-1 主程序流程图
主要代码如下所示:
while (1)
{
DHT11_Read_Data(&tempValue,&humidity); // 读取温湿度值
if (t == 10)
{
t = 0;
adcx=Lsens_Get_Val();
numToString(adcx);
printf("light: %s, ", strValue);
LCD_ShowString(30,170,200,16,16,(u8 *)strValue);
esp8266_str_data("light", strValue);
Auto_adjust(90 , 40,adcx);
ac = ADC_Trans();
ad=ac* 99 / 4096.0;
// printf("电压为:%f\r\n",3.3/4095*ac);
numToString(ad);
printf("MQ: %.2f,", strValue);
LCD_ShowString(30,210,200,16,16,(u8 *)strValue);
esp8266_str_data("mq", strValue);
// 将温度和湿度上传到云平台
numToString(tempValue);
printf("tempValue: %s, ", strValue);
LCD_ShowString(30,90,200,16,16,(u8 *)strValue);
esp8266_str_data ("test", strValue);
numToString(humidity);
printf("humidity: %s\r\n\r\n", strValue);
LCD_ShowString(30,130,200,16,16,(u8 *)strValue);
esp8266_str_data("time", strValue);
High_OBJ = esp8266_get_data("steppwm");
Manual_adjust();//手动设置窗帘
ledctr = esp8266_get_data("ledbtn");
if(ledctr == 1){
LED1 = 0;
LED0 = 0;
}else{
LED1 = 1;
LED0 = 1;
}
}
delay_ms(1000);
t++;
}
}
4.2 步进电机模块子程序
Stm32通过对光敏传感器的检测与阈值比较进行对窗帘的自动控制,低于阈值开窗帘,高于阈值关闭窗帘,手动调节通过对云平台下达指令实现对窗帘的控制。
图4-2-1步进电机模块子程序流程图
主要代码如下所示:
void Auto_adjust(u8 luxmax , u8 luxmin ,u8 value )//预设 光强
{
//大于预设光强,窗帘下降
if(( luxmax < value )&&(luxmin > value))
{
windous_down(5000);
Step_M -- ;
}
//小于预设光强,窗帘上升
else if( luxmin < value)
{
windous_up(5000);
Step_M ++ ;
}
else
step_stop();
}
4.3 TFTLCD显示子程序
先设置字符显示起始坐标,然后设置需要显示的字符,需要显示的字体大小。lcd模块在运行时的具体流程为先读取各传感器的数据,并在屏幕中显示,然后实时更新,流程图如图4-3-1所示。
图4-3-1 TFTLCD显示子程序流程图
void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)
{
u8 x0=x;
width+=x;
height+=y;
while((*p<='~')&&(*p>=' '))//判断是不是非法字符!
{
if(x>=width){x=x0;y+=size;}
if(y>=height)break;//退出
LCD_ShowChar(x,y,*p,size,0);
x+=size/2;
p++;
}
}
5.系统测试
5.1系统软件测试
智能家居系统是利用C语言程序,使用Keil作为开发工具。使用Keil软件完成该系统的软件设计,通过新建源文件、建立工程文件、编译和连接,最后生成所需单片机烧录的HEX文件。
本次设计主要用到Keil uvision5进行程序代码编写、编译、调试并生成.HEX文件,通过USB接口将所生成的.HEX文件烧写到开发板上进行测试。
主函数调试运行成功并生成 .hex文件如图5-1-1所示。
图5-1-1 主函数运行结果图
5.2系统硬件测试
本次设计中选择STM32F1战舰V3开发板作为本次设计的硬件测试。
代码编译运行通过后,开始对设计进行测试。在STM32F1战舰V3开发板中将所有电路、电子元件准确连接。
实物各种元器件的参考值及数量如表5-2-1所示。
元件 | 数量 |
STM32FI战舰V3开发板 | 1个 |
4.3寸FTFLCD显示器 | 1个 |
Mq-135 | 1个 |
Dht11 | 1个 |
步进电机 | 1个 |
Esp8266 | 1个 |
表5-2-1 元器件清单
将各个元器件连接到开发板以后,给开发板供电,开始硬件测试,实物设计正常执行,并得到预期结果。如图5-2-1所示。
图5-2-1 实物图
6.总结与展望
这次的课程设计,用时两个星期,这两个星期不敢说自己有多大的进步,获得了多少知识,但起码是了解了stm32与传感器连接的部分过程。通过这次课程设计发现这其中需要的很多知识我们没有接触过,去图书馆查资料的时候发现我们前边所学到的仅仅是皮毛,还有很多需要我们掌握的东西我们根本不知道。同时也发现有很多已经学过的东西我们没有理解到位,不能灵活运用于实际,不能很好的用来解决问题,这就需要我们不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。在这个过程中我们将深刻理解所学知识,同时也可以学到不少很实用的东西。
从各种文档的阅读到开始的挑选题目、硬件结构设计、软件结构设计、程序烧写。亲身体验了一回系统的设计开发过程。很多东西书上写的很清楚,貌似看着也很简单,思路非常清晰。但真正需要自己想办法去设计一个的时候才发现其中的难度。经常做到后面突然就发现自己一开始的设计有问题,然后又回去翻工,在各种反复中不断完善自己的想法。
其实不管做什么,我们都要相信自己,不能畏惧,不能怕遇到困难,什么都需要去尝试,有些你开始认为很难的事在你尝试之后你可能会发现原来她并没有你以前觉得的那样,自己也是可以的。如果没有自信,没有目标,没有信心就不可能把事情做好,当其他人都在迷茫的时候,自己一定要坚信目标,大学毕业出去即面临找工作,从学习这个专业,到以后从事这方面的工作都需要不断地去学习去实践,这次实践可以给我们敲一个警钟,我们面临毕业,面临择业,需要这些实践经验,在困难面前要勇于尝试,这是这次课程设计给我的最大感想!
以上基本是这次做课设的体会了,设计艰难,编码不易, 但找出错误并能修改正确,那一刻的喜悦还是令人难以忘记的。