收藏关注不迷路!!

🌟文末获取源码+数据库🌟

感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人


一、摘要

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

二、内容设计

智能家居的温度测试系统的显示装置使用了传感器技术,采集数据,并显示到设备,同时传输到电脑温湿度的控制、预警,使用软件程序设计,当温度及湿度达到设定值,可以及时报警,并通过外部设备及时处理外部人员进入时候的报警装置,使用了红外线传感技术,当外部人员无端进入时,及时警报并提醒住户。

整体系统需求分析
(1) 硬件模块:传感器采集数据,通过单总线传输到主芯片,通过SWD模块采集数据发送至电脑端。实现调控和预警。
(2) 软件模块:硬件端口传输数据后,通过算法实现温湿度阀值的设定,预警触发以及数据最后的显示和调控。
系统用户功能框架如图3-1所示。
在这里插入图片描述

图3-1 系统总框架

系统总体设计方案

对于智能家居系统而言,其结构体系主要包括防盗报警控制、娱乐系统控制、智能三表查抄系统以及窗帘控制等构成,具体体系结构如下所示

在这里插入图片描述

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

三、程序设计

主要代码:
#include "misc.h"

/** @addtogroup StdPeriph_Driver
  * @{
  */

/** @defgroup MISC 
  * @brief MISC driver modules
  * @{
  */

/** @defgroup MISC_Private_TypesDefinitions
  * @{
  */

/**
  * @}
  */ 

/** @defgroup MISC_Private_Defines
  * @{
  */

#define AIRCR_VECTKEY_MASK    ((uint32_t)0x05FA0000)
/**
  * @}
  */

/** @defgroup MISC_Private_Macros
  * @{
  */

/**
  * @}
  */

/** @defgroup MISC_Private_Variables
  * @{
  */

/**
  * @}
  */

/** @defgroup MISC_Private_FunctionPrototypes
  * @{
  */

/**
  * @}
  */

/** @defgroup MISC_Private_Functions
  * @{
  */

/**
  * @brief  Configures the priority grouping: pre-emption priority and 
  *         subpriority.
  * @param NVIC_PriorityGroup: specifies the priority grouping bits length. 
  *   This parameter can be one of the following values:
  * @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority
  *                            4 bits for subpriority
  * @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority
  *                            3 bits for subpriority
  * @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority
  *                            2 bits for subpriority
  * @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority
  *                            1 bits for subpriority
  * @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority
  *                            0 bits for subpriority
  * @retval : None
  */
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{
  /* Check the parameters */
  assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
  
  /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
  SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}

/**
  * @brief  Initializes the NVIC peripheral according to the specified
  *   parameters in the NVIC_InitStruct.
  * @param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure
  *   that contains the configuration information for the
  *   specified NVIC peripheral.
  * @retval : None
  */
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
{
  uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
  
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
  assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));  
  assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
    
  if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
  {
    /* Compute the Corresponding IRQ Priority --------------------------------*/    
    tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
    tmppre = (0x4 - tmppriority);
    tmpsub = tmpsub >> tmppriority;

    tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
    tmppriority |=  NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
    tmppriority = tmppriority << 0x04;
        
    NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
    
    /* Enable the Selected IRQ Channels --------------------------------------*/
    NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
  }
  else
  {
    /* Disable the Selected IRQ Channels -------------------------------------*/
    NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
  }
}

/**
  * @brief  Sets the vector table location and Offset.
  * @param NVIC_VectTab: specifies if the vector table is in RAM or
  *   FLASH memory.
  *   This parameter can be one of the following values:
  * @arg NVIC_VectTab_RAM
  * @arg NVIC_VectTab_FLASH
  * @param Offset: Vector Table base offset field. 
  *   This value must be a multiple of 0x100.
  * @retval : None
  */
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
{ 
  /* Check the parameters */
  assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
  assert_param(IS_NVIC_OFFSET(Offset));  
   
  SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);
}

/**
  * @brief  Selects the condition for the system to enter low power mode.
  * @param LowPowerMode: Specifies the new mode for the system to enter
  *   low power mode.
  *   This parameter can be one of the following values:
  * @arg NVIC_LP_SEVONPEND
  * @arg NVIC_LP_SLEEPDEEP
  * @arg NVIC_LP_SLEEPONEXIT
  * @param NewState: new state of LP condition.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval : None
  */
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_NVIC_LP(LowPowerMode));
  assert_param(IS_FUNCTIONAL_STATE(NewState));  
  
  if (NewState != DISABLE)
  {
    SCB->SCR |= LowPowerMode;
  }
  else
  {
    SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
  }
}

/**
  * @brief  Configures the SysTick clock source.
  * @param SysTick_CLKSource: specifies the SysTick clock source.
  *   This parameter can be one of the following values:
  * @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8
  *   selected as SysTick clock source.
  * @arg SysTick_CLKSource_HCLK: AHB clock selected as
  *   SysTick clock source.
  * @retval : None
  */
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
  /* Check the parameters */
  assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
  {
    SysTick->CTRL |= SysTick_CLKSource_HCLK;
  }
  else
  {
    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
  }
}

/**
  * @}
  */

/**
  * @}
  */

/**
  * @}
  */
#ifndef __MISC_H
#define __MISC_H

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"

/** @addtogroup StdPeriph_Driver
  * @{
  */

/** @addtogroup MISC
  * @{
  */

/** @defgroup MISC_Exported_Types
  * @{
  */

/** 
  * @brief  NVIC Init Structure definition  
  */

typedef struct
{
  uint8_t NVIC_IRQChannel;
  uint8_t NVIC_IRQChannelPreemptionPriority;
  uint8_t NVIC_IRQChannelSubPriority;
  FunctionalState NVIC_IRQChannelCmd;
} NVIC_InitTypeDef;

/**
  * @}
  */

/** @defgroup MISC_Exported_Constants
  * @{
  */

/** @defgroup Vector_Table_Base 
  * @{
  */

#define NVIC_VectTab_RAM             ((uint32_t)0x20000000)
#define NVIC_VectTab_FLASH           ((uint32_t)0x08000000)
#define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \
                                  ((VECTTAB) == NVIC_VectTab_FLASH))
/**
  * @}
  */

/** @defgroup System_Low_Power 
  * @{
  */

#define NVIC_LP_SEVONPEND            ((uint8_t)0x10)
#define NVIC_LP_SLEEPDEEP            ((uint8_t)0x04)
#define NVIC_LP_SLEEPONEXIT          ((uint8_t)0x02)
#define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \
                        ((LP) == NVIC_LP_SLEEPDEEP) || \
                        ((LP) == NVIC_LP_SLEEPONEXIT))
/**
  * @}
  */

/** @defgroup Preemption_Priority_Group 
  * @{
  */

#define NVIC_PriorityGroup_0         ((uint32_t)0x700) /* 0 bits for pre-emption priority
                                                          4 bits for subpriority */
#define NVIC_PriorityGroup_1         ((uint32_t)0x600) /* 1 bits for pre-emption priority
                                                          3 bits for subpriority */
#define NVIC_PriorityGroup_2         ((uint32_t)0x500) /* 2 bits for pre-emption priority
                                                          2 bits for subpriority */
#define NVIC_PriorityGroup_3         ((uint32_t)0x400) /* 3 bits for pre-emption priority
                                                          1 bits for subpriority */
#define NVIC_PriorityGroup_4         ((uint32_t)0x300) /* 4 bits for pre-emption priority
                                                          0 bits for subpriority */

#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PriorityGroup_0) || \
                                       ((GROUP) == NVIC_PriorityGroup_1) || \
                                       ((GROUP) == NVIC_PriorityGroup_2) || \
                                       ((GROUP) == NVIC_PriorityGroup_3) || \
                                       ((GROUP) == NVIC_PriorityGroup_4))

#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)

#define IS_NVIC_SUB_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)

#define IS_NVIC_OFFSET(OFFSET)  ((OFFSET) < 0x0007FFFF)

/**
  * @}
  */

/** @defgroup SysTick_clock_source 
  * @{
  */

#define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)
#define SysTick_CLKSource_HCLK         ((uint32_t)0x00000004)
#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \
                                       ((SOURCE) == SysTick_CLKSource_HCLK_Div8))
/**
  * @}
  */

/**
  * @}
  */

/** @defgroup MISC_Exported_Macros
  * @{
  */

/**
  * @}
  */

/** @defgroup MISC_Exported_Functions
  * @{
  */

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);

#endif /* __MISC_H */

/**
  * @}
  */

/**
  * @}
  */

/**
  * @}
  */

/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/

资料获取

文章下方名片联系我即可~

博主联系方式:点击我获取资料->->进我个人主页–>获取博主联系方式

更多推荐