基于物联网技术的智能家居系统设计

系统简介

科技的快速发展给人们的生活带来了翻天覆地的变化,生活的方方面面涉及到互联网技术,如手机、电脑、可视对讲系统、小区门禁系统等,为人们的生活提供了更多的便利,由此可见,物联网技术在我们的生活中十分普遍,就当前的信息技术以及互联网技术的发展水平,万物物联的时代已经到来。物联网技术下的智能家电是以后的发展方向,智能家电的普及将会是大众所期待的事情,相较于现在的老式家电,人们更愿意在具有智能化和人性化的家电来满足人们日益增长的物质需求,而本文所设计的正是一个基于单片机系统的智能家居系统。
本系统包括硬件部分和软件部分,硬件分为红外线模块,报警以及温湿度这三种模块。对于温湿度模块而言,主要利用DHT11对相关数据进行采集,STM32单片机再对转换的结果进行运算处理。最后通过串口传送到电脑端实施调控及查看。
通过对智能家居系统的测试,最终基本上能够实现对于温度,湿度的实时查看并控制以及异常情况下的警报和调节;温度,湿度的实时显示。实现人员进入时的预警。

关键词:智能家居;红外线模块;单总线;控制;数据处理

第1章 绪 论

1.1 研究现状及发展趋势
随着互联网时代的到来,人们的生活越来越智能化,通过物联网实现智能化家居成为越来越多人的选择,也正因为如此,物联网智能家居引起了许多运营商以及开发商的重视。在21世纪中,房地产开发越来越倾向于智能化家居,成为房地产开发的核心要素,智能家居设备、家庭网络共享以及“宜居通”等各种活动的推广,代表着我国进行智能家居时代。当前,对于智能家居而言,在其发展的过程中,仍然有许多问题亟待解决。当前,在我国智能家居市场中,其成本普遍较高,系统升级具有较强的难度,功能较为单一,操作较为复杂,无法得到普遍的适用,适用群体较窄,对于一些老人以及幼童等都无法进行相应的操作,对智能化家居的发展造成一定的影响。因此,物联网技术下的家居系统是以后的主要发展方向。

第2章 硬件技术和现状介绍

科学技术水平的高速发展,使我国进入互联网时代,人们的生活水平发生了了质的改变,智能化家居成为人们新的选择。对于智能化家居而言,其又可称为电子家庭、智能屋以及家庭自动化等,其运行原理主要通过网络、结构化布线、计算机等多项设备和技术,通过科学规范的组合设计,构建成智能化家居系统。在智能家居系统中,功能十分全面,包括家电设备设施、办公、通信娱乐等功能,能够实现一体化操作,为人们提供安全、舒适、高效以及节能环保的生活环境。对于该智能家居系统而言,其主要通过五部分结构实现系统的控制,分别是小区、智能、家居智能、外部网络以及家庭网卡这五部分系统组成。同时,通过对物联网技术的运用,实现了对智能家居系统的研发,在这过程中还涉及到传感器以及C语言的运用。
2.1 智能家居系统体系结构
对于智能家居系统而言,其结构体系主要包括防盗报警控制、娱乐系统控制、智能三表查抄系统以及窗帘控制等构成,具体体系结构如下所示

在这里插入图片描述

对于智能家居系统而言,其结构体系涉及内容较多,在本文中,主要对智能安防监控系统、照明设备控制系统、入侵检测报警框图及电路以及远程医疗系统进行分析及讲解。

2.1.3 远程医疗监护系统
  当前,我国对于远程医疗的应用还未得到普及,因此,在智能家居系统设计中,使用率较低,但随着互联网的发展,智能化管理的推广,远程医疗在未来将会得到广泛的应用。在该家居智能系统中,对于远程医疗监护系统的设计,其结构主要包括数据服务器、gprs网络以及中央控制器等,具体框架从下图可以得知。

在这里插入图片描述

图2-5远程医疗监护系统框图

2.2 硬件介绍
2.2.1 传感器
对于传感器而言,主本质上代表着一类检测设备,能够通过信息的变化转换成一定的电信号,并将电信号进行输出,进而实现对信息的监测,满足人们所需,如对火灾、烟雾、温度等的监测等。对于传感器而言,其主要具有智能化、网络化、微型化以及数字化等特点,满足智能化监测的需求。在我们的日常生活中,通过对传感器的应用,赋予了物体生命力,使其拥有了味觉等感官功能。一般而言,对于传感器所具有的感知功能,主要包括光敏、声敏、力敏、味敏以及气敏等元件。
在该智能家居系统的设计过程中,通过物联网技术对相关信息进行采集,本次设计系统中所用的传感器为DHT11温湿度传感器。
2.2.2 蜂鸣器
对于蜂鸣器而言,其本质上为一种发声元件,通过对直流电压的运用达到发声的效果,对于蜂鸣器参数的选择主要从电压、电流、尺寸等进行考虑。在该智能家居系统中,具有一定的预警设备,通过阀值除法蜂鸣器模拟警报。对于蜂鸣器而言,其结构主要包括三极管、二极管、鸣器以及滤波电容构成。

2.3 本章小结
在该章节中,主要对智能化家居系统的设计所需的核心硬件进行了具体的描述,同时,对物联网技术在当前我国生活中的应用进行了具体介绍,主要涉及智能安防、可视对讲系统、灯光控制等系统,并具体举例说明了市场前景和大体设计方案。同时对于传感器这一基础设施重点介绍,以及所用芯片STM32F103.

第3章 智能家居系统需求分析

3.1项目总体功能规划
智能家居的温度测试系统的显示装置使用了传感器技术,采集数据,并显示到设备,同时传输到电脑温湿度的控制、预警,使用软件程序设计,当温度及湿度达到设定值,可以及时报警,并通过外部设备及时处理外部人员进入时候的报警装置,使用了红外线传感技术,当外部人员无端进入时,及时警报并提醒住户。
3.2系统需求分析
3.2.1 整体系统需求分析
(1) 硬件模块:传感器采集数据,通过单总线传输到主芯片,通过SWD模块采集数据发送至电脑端。实现调控和预警。
(2) 软件模块:硬件端口传输数据后,通过算法实现温湿度阀值的设定,预警触发以及数据最后的显示和调控。
系统用户功能框架如图3-1所示。

在这里插入图片描述

图3-1 系统总框架
3.2.2 用户需求分析
随科技的不断发展,物联网技术的不断提升,万物互联的时代即将来到。传统的家庭电器已经渐渐的不能适应人们对于智能化的日益需求,对于家电智能化,联通化的想法日渐渴求。作为物联网技术下的第三大应用领域,不单单是在家电方面,在医疗,社会治安,等等一系列的方面中都有一席之地。所以本次毕业设计选择基于物联网技术的智能家居系统设计,以实现在未来对于家居的智能化,可视化。在温度,湿度的控制,显示,以及危险报警,以及红外线报警的功能,从而进一步提高人们的生活水平以及居家安全。
3.4 本章小结
本章主要从项目的总体功能规划入手,然后分别分析系统和用户对这个系统的需求,得到系统总的功能,然后从当前经济建设的可行性角度出发来对三个不同的方面进行系统性分析,最后对这个系统做一个预期的目标,列出能够实现的功能。

第4章 硬件设计

本系统硬件设计由电源部分,主芯片,最小电路系统,下载模块,温湿度采集,预警电路,显示部分六个部分组成。
4.1电源部分
采用DC5V输入DC3.3V输出 22UF 和104电容做滤波和去耦,通过CC电路来增加电压的稳定性,使得系统电压稳定在3.3V或者5V。图4-1为电源部分原理图
在这里插入图片描述

图4-1 电源部分原理图
当时对其滤波器进行了电路分析与尝试。
4.1.1 RC滤波电路
所谓的低通滤波器,也就是降低频率信号,并使其高频信号逐渐衰弱,然后通过低频电路进行组成,详情如图4-2所示。
图4-2 RC滤波电路
阻容滤波电路实际优点如下:
1.滤波的实际效能
2.降低实际限流
阻容滤波电路实际缺点如下:
1.负载能力较差
2.并且直流电牙齿
阻容滤波电路的适用范围非常广泛,这种包括不同的电流大小和系数的变化。
4.1.2 LC滤波电路
图4-3 LC滤波电路
LC滤波器也被称之为无源滤波器,并且是对传统滤波器的补偿设施。在LC的滤波器当中也被称之为无源滤波器的实际意思,也就是该滤波器不会存在任何外在电源。LC滤波器本身也就是通过滤波电容和电抗以及电阻所组成的,并且各个多谐波源并联之后产生滤波的效果,同时能够在进行滤波的过程当中。并且在设计不同的滤波器的过程当中,也要采用不同的滤波结构来将其电容进行串联,可以选择不同的串联器来协调滤波器,同时也可以建立其高通滤波器,这些滤波器都属于无源滤波器。LC滤波器本身的电路不是集成存在的,所以经常在整个电路系统当中可以进行使用。
在原本的滤波器的使用场合当中:
有源滤波器本身不适应,在电压较大的电流当中实现负载效果,只适合处理低电压的信号。
结合两种不同的滤波器的实际特点以及我们的设计需求,以及本设计的效果。综合之下选择RC滤波电路。

4.2主芯片

主芯片为STM32F103本是一种基于ARM Cortex-M 内核STM32系列的32位的微型控制器,整体内存容量为64KB,并且正常的工作电压为2V至3V,同时能够在零下40℃进行工作。所以对于电压的稳定有一定的要求。图4-4为主芯片电路。

4.3 最小电路系统
最小的电路包括电源滤波。
4.3.1 单片机电源滤波
对于单片机的运用要求在2V-3.3V之间,所以在单片机的最小系统模块添加了CC滤波稳定电压,图4-5为原理图。C1 ,C2 ,C3 ,C4 单片机电源滤波作用
4.3.2 电阻电容组成的复位系统

在这里插入图片描述

4.7 本章小结
本章主要从项目的硬件模块入手,从电源部分,主芯片,最小电路系统,下载模块,温湿度采集,预警电路,显示部分六个部分分别讲解关于各个模块的分支。

第5章 软件相关

5.1 芯片调用
下面为芯片调用代码

#include "stm32f10x.h"
//---------------pin decription------------------------
//使用芯片 24LC02
#define ADDR_24CXX        0xA0
#define AT24CXX_SCL_H         GPIOG->BSRR = GPIO_Pin_10
#define AT24CXX_SCL_L         GPIOG->BRR  = GPIO_Pin_10
#define AT24CXX_SDA_H         GPIOG->BSRR = GPIO_Pin_11
#define AT24CXX_SDA_L         GPIOG->BRR  = GPIO_Pin_11
#define AT24CXX_SCL_read      GPIOG->IDR  & GPIO_Pin_10
#define AT24CXX_SDA_read      GPIOG->IDR  & GPIO_Pin_11
//#define AT24CXX_SCL_H         GPIOC->BSRR = GPIO_Pin_12	//TEST
//#define AT24CXX_SCL_L         GPIOC->BRR  = GPIO_Pin_12 //TEST
//   
//#define AT24CXX_SDA_H         GPIOC->BSRR = GPIO_Pin_11	//TEST
//#define AT24CXX_SDA_L         GPIOC->BRR  = GPIO_Pin_11 //TEST
//
//#define AT24CXX_SCL_read      GPIOC->IDR  & GPIO_Pin_12 //TEST
//#define AT24CXX_SDA_read      GPIOC->IDR  & GPIO_Pin_11 //TEST
//主机设备描述符,存入EEPROM
static bool I2C_Start(void);
static void I2C_Stop(void);
static void I2C_NoAck(void);
static bool I2C_WaitAck(void); 
static void I2C_SendByte(u8 SendByte);
static u8 I2C_ReceiveByte(void);

void I2C_24CXX_Init(void);
static bool I2C_WriteOneByte(u8 SendByte, u16 WriteAddress, u8 DeviceAddress);
static u8 I2C_ReadOneByte( u16 ReadAddress,  u8 DeviceAddress);
void I2C_24CXX_Write(u16 nAddr, u8* pDat, u16 nLen);
void I2C_24CXX_Read(u16 nAddr, u8* pDat, u16 nLen);
static void I2C_delay(void);
5.2 显示模块
下面为显示模块代码
#ifndef __12864_H_
#define __12864_H_	
#include"sys.h"	 
//管脚定义,移植修改区
//**************************************************************************************************************************
#define  LCD12864_GPIO    GPIOB
#define  GPIOCLK          RCC_APB2Periph_GPIOB
#define  RS		     GPIO_Pin_0
#define  RW		     GPIO_Pin_1
#define  EN		     GPIO_Pin_3
#define  PSB	     GPIO_Pin_4
#define  RST	     GPIO_Pin_5
#define  Busy        GPIO_Pin_15
#define  LCD_GPIO_DAT   GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10 |GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15
#define  LCD_GPIO_CMD	GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5
#define    LCD_RS(x)   x ? GPIO_SetBits(LCD12864_GPIO,RS):  GPIO_ResetBits(LCD12864_GPIO,RS)
#define    LCD_RW(x)   x ? GPIO_SetBits(LCD12864_GPIO,RW):  GPIO_ResetBits(LCD12864_GPIO,RW)
#define    LCD_EN(x)   x ? GPIO_SetBits(LCD12864_GPIO,EN):  GPIO_ResetBits(LCD12864_GPIO,EN)
#define    LCD_PSB(x)  x ? GPIO_SetBits(LCD12864_GPIO,PSB): GPIO_ResetBits(LCD12864_GPIO,PSB)
#define    LCD_RST(x)  x ? GPIO_SetBits(LCD12864_GPIO,RST): GPIO_ResetBits(LCD12864_GPIO,RST)
#define  Text_Busy	         GPIO_ReadInputDataBit(LCD12864_GPIO  ,Busy)  //PBin(7)	  
#define  LCD_WriteData(x)     {LCD12864_GPIO->BSRR = x<<8 & 0xff00;LCD12864_GPIO->BRR = ((~x)<<8) & 0xff00;}  //高8位的数据
//#define  LCD_WriteData(x)   {LCD12864_GPIO->BSRR = x    & 0x00ff;LCD12864_GPIO->BRR = ((~x)<<8) & 0x00ff;}  //低8位的数据
void LCD12864_InitPort(void);	  //硬件端口初始化
void NOP(void);					 //延时函数
u8 LCD12864_busy(void);			 //检测忙状态
void LCD12684_Wcmd(u8 dat);		 //写指令
void LCD12684_Wdat(u8 dat);		 //写数据
void LCD12864_Init(void);		 //液晶初始化
void LCD12864_Clr(void);		 //	清屏
void LCD12864_Pos(u8 x,u8 y);	 //设置显示位置
void LCD12864_PhotoDis(u8 *bmp); //	显示图片
void LCD_ShowString(u8 x,u8 y,const u8 *p);	 //	显示字符串
void LCD_Shownumber(u8 x,u8 y,const u8 *m);
//**********************************************************************************************************************
#endif	
5.3 ADC模块
下面是ADC模块设计代码
#include "adc1-8.h"
#include "stm32f10x_adc.h"
#include "user_gpio.h"
#include "string.h"
#include "lcd12232.h"
/*******************************************************************************
* 功能    : 初始化ADC 4,5,6,7,10,11,12,13
* 入口参数:
* 返回值  : 
* 描述    :  
*******************************************************************************/																   
void  Adc_Init(void)
{ 	
	ADC_InitTypeDef ADC_InitStructure; 
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOF|RCC_APB2Periph_ADC1, ENABLE );	  //使能ADC1通道时钟
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //72M/6=12,ADC最大时间不能超过14M
	//PA0/1/2/3 作为模拟通道输入引脚                         
	GPIO_InitStructure.GPIO_Pin = GPIOC_ADC10 |GPIOC_ADC11|GPIOC_ADC12|GPIOC_ADC13;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//模拟输入引脚
	GPIO_Init(GPIOC, &GPIO_InitStructure);	
	GPIO_InitStructure.GPIO_Pin = GPIOF_ADC4 |GPIOF_ADC5|GPIOF_ADC6|GPIOF_ADC7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//模拟输入引脚
	GPIO_Init(GPIOF, &GPIO_InitStructure);
	ADC_DeInit(ADC1);  //将外设 ADC1 的全部寄存器重设为缺省值
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//ADC工作模式:ADC1和ADC2工作在独立模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;	//模数转换工作在单通道模式
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	//模数转换工作在单次转换模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//转换由软件而不是外部触发启动
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//ADC数据右对齐
	ADC_InitStructure.ADC_NbrOfChannel = 2;	//顺序进行规则转换的ADC通道的数目
	ADC_Init(ADC1, &ADC_InitStructure);	//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   
	ADC_Cmd(ADC1, ENABLE);	//使能指定的ADC1
	ADC_ResetCalibration(ADC1);	//重置指定的ADC1的校准寄存器
	while(ADC_GetResetCalibrationStatus(ADC1));	//获取ADC1重置校准寄存器的状态,设置状态则等待
	ADC_StartCalibration(ADC1);		//开始指定ADC1的校准状态
	while(ADC_GetCalibrationStatus(ADC1));		//获取指定ADC1的校准程序,设置状态则等待
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);		//使能指定的ADC1的软件转换启动功能
}
/******************************************************************************
* 功能    : //获得ADC值
* 入口参数:	 ch 采样通道,order 采样顺序
* 返回值  : 
* 描述    :                 
*******************************************************************************/				  
u16 Get_Adc(u8 ch,u8 order)   
{
  	//设置指定ADC的规则组通道,设置它们的转化顺序和采样时间
 	ADC_RegularChannelConfig(ADC1, ch, order, ADC_SampleTime_239Cycles5 );
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);		//使能指定的ADC1的软件转换启动功能	
	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
	ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
	ADC_SoftwareStartConvCmd(ADC1, DISABLE);
	return ADC_GetConversionValue(ADC1);	//返回最近一次ADC1规则组的转换结果
}
/*******************************************************************************
* 功能    : //ADC test
* 入口参数:
* 返回值  : 
* 描述    :                 
*******************************************************************************/
float adc_test(u8 ch,u8 order)
{
	u16 adcx;
	float temp;
    adcx=Get_Adc(ch,order);
	//temp=(float)adcx*(3.3/4096);
	return temp;
}
u16 Get_Adc_Average(u8 ch,u8 times)
{
	u32 temp_val=0;
	u8 t;
	for(t=0;t<times;t++)
	{
		temp_val+=Get_Adc(ch,0x01);
		delay_ms(5);
	}
	return temp_val/times;
} 

5.4 本章小结
本章是关于软件端代码的描述,包括了芯片端,ADC模块,以及显示模块。通过以上模块成功完对于基本软件设计。

总结与展望

工作总结
本文开发的智能家居系统主要基于物联网技术,从需求分析、项目总体功能、可行性、相关介绍、模块功能的实现等多个方面进行了探讨,从实践中探究所用到的技术,本文的研究内容主要有以下六个方面:
(1)对智能家居系统的发展历程以及国内国外的研究现状进行论述。
(2)从硬件和软件两类模块对智能家居系统进行系统分析与论述。
(3)合理分析并设计了智能家居系统需要用到的各类模块结构。
(5)详细描述了智能家居系统的业务逻辑,给出了系统的实现和推广方法。
(6)编写并执行针对本系统的测试用例。
本文基本实现了智能家居对于温度湿度的采集、显示,使用了传感器技术,采集数据,并显示到设备,同时传输到电脑端。温湿度的控制、预警,使用软件程序设计,当温度及湿度达到设定值,可以及时报警,并通过外部设备及时处理。外部人员进入时候的报警装置,使用了红外线传感技术,当外部人员无端进入时,及时警报并提醒住户。
展望
本系统基本能实现智能家居系统的预期目标,但是由于一些客观和主观的原因,这个系统还存在很多的不足之处,有很多地方还需要继续优化,比如代码的复用、测试数据的稳定、系统的稳定性、性能方面都还需要有很大程度的提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值