本文将讲述如何用STM32嵌入式实现智能家居控制系统,所谓智能就是实时监测自主控制一些因素,如,温度、湿度、光照强度等,当室内光线较暗时自动打开灯,根据光线亮度的不同开灯数量也不同,当室内温度过高时红灯不停的闪烁,蜂鸣器也报警提醒主人室内温度过高要打开空调,当室内湿度过高时风扇开始工作,让室内湿度降下来,那么如何实现这些功能呢?下面我们开始介绍!

注意:STM32嵌入式实现智能家居控制系统的完整工程(包含keil代码工程和proteus仿真工程)已经放在文章末尾,需要的可点击链接下载。

工程及源代码下载地址:
STM32嵌入式实现智能家居控制系统完整工程

一、本文用到的器件有:

  1. STM32F103R6 单片机
  2. LCD12864 液晶显示屏
  3. DHT11 温湿度传感器
  4. RETCH 光敏电阻
  5. FAN-DC 直流风扇
  6. BUZZER 蜂鸣器
  7. 电阻、按键等

二、实现的功能是:

  1. 有两种控制模式,分别是默认的智能控制模式和手动控制模式,按下按键MODE可切换控制模式
  2. 智能控制模式中温湿度传感器实时监测当前温湿度,当温度大于30红灯闪烁,蜂鸣器报警,当湿度大于50时,风扇工作,当光照强度小于3000时点亮一个灯,小于2000时点亮二个灯
  3. 手动控制模式中,按下UP键或者 DOWN键可上下移动光标,按下OK键可打开或关闭当前状态
  4. 自动模式中手动可调节,手动模式中自动模式不能调节

三、原理图如下:

四、代码实现:

#include "stm32f10x.h"
#include "LQ12864.h"
#include "DTH11.h"
#include <stdio.h>
#include "adc.h"#define UP        1
#define DOWN    2
#define OK      3
#define MODE    4
#define NONE    0void main_delay(int time)
{int i,j;for(i = 0; i < time; i++){for(j = 0; j < 1000; j++){j++;j--;}}
}//按键初始化
void keyInit()
{GPIO_InitTypeDef init;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);init.GPIO_Mode = GPIO_Mode_IPU;//输入模式init.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;init.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&init);
}
//读取按键的值
int keyRead()
{if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2) == 0)return UP;//上if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3) == 0)return DOWN;//下if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4) == 0)return OK;//确定if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5) == 0)return MODE;//模式切换return NONE;
}//风扇初始化
void fanInit()
{GPIO_InitTypeDef init;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);init.GPIO_Mode = GPIO_Mode_Out_PP;//输出模式init.GPIO_Pin = GPIO_Pin_1;init.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&init);GPIO_SetBits(GPIOC,GPIO_Pin_1);//置1 风扇关
}
//控制风扇开关 fanSwitch(1);//开风扇 fanSwitch(0);//关风扇
void fanSwitch(int sw)// 参数 传递1 开 传递0  关
{// 1 真 0 假  真执行:左边,开风扇,假执行:右边,关风扇sw ? GPIO_ResetBits(GPIOC,GPIO_Pin_1) : GPIO_SetBits(GPIOC,GPIO_Pin_1);
}//蜂鸣器初始化
void buzzerInit()
{GPIO_InitTypeDef init;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);init.GPIO_Mode = GPIO_Mode_Out_PP;//输出模式init.GPIO_Pin = GPIO_Pin_2;init.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&init);GPIO_SetBits(GPIOC,GPIO_Pin_2);//置1 蜂鸣器关
}
//蜂鸣器开关
void buzzerSwitch(int sw) //1开 0关
{sw ? GPIO_ResetBits(GPIOC,GPIO_Pin_2) : GPIO_SetBits(GPIOC,GPIO_Pin_2);
}//LED初始化
void ledInit()
{GPIO_InitTypeDef init;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);init.GPIO_Mode = GPIO_Mode_Out_PP;//输出模式init.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_6|GPIO_Pin_7;init.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&init);GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_6|GPIO_Pin_7);//置1 LED关
}//控制LED的开关 ledSwitch(3,1);
void ledSwitch(int n,int sw)//n代表灯的编号 sw 1开 0关
{switch(n){case 1: //编号为1的LEDsw ? GPIO_ResetBits(GPIOA,GPIO_Pin_6) : GPIO_SetBits(GPIOA,GPIO_Pin_6);break;case 2: //编号为2的LEDsw ? GPIO_ResetBits(GPIOA,GPIO_Pin_7) : GPIO_SetBits(GPIOA,GPIO_Pin_7);break;case 3: //编号为3的LEDsw ? GPIO_ResetBits(GPIOA,GPIO_Pin_1) : GPIO_SetBits(GPIOA,GPIO_Pin_1);break;}
}//系统初始化函数(相关初始化的函数)
void systemInit()
{LCD_Init();//LCD屏幕初始化Adc_Init();//ADC初始化DHT11_Init();//温湿度传感器初始化keyInit();//按键初始化fanInit();//风扇初始化buzzerInit();//蜂鸣器初始化ledInit();//led初始化
}int main(void)
{    char status[5] = {0,0,0,0,0};//LED1 LED2 FAN BUZZER MODE 状态 1开 0关u8 temp,hum;//保存温湿度int light;//保存光照强度int key;//保存读取到的按键的值char buf[100] = { 0 };//用来保存格式化出的字符串int flag = 3;//flag时刻代表当前星星的行数u8 *menu[4] = {"LED1","LED2","FAN","BUZZER"};//字符指针数组int i;//循环变量systemInit();//系统初始化while(1){//在第0-1行显示温湿度和光照强度DHT11_Read_Data(&temp,&hum);//读取温湿度light = Get_Adc();//读取光照强度sprintf(buf,"TEMP:%d   HUM:%d",temp,hum);//格式化字符串LCD_P6x8Str(0,0,(u8*)buf);//第0行打印温度和湿度sprintf(buf,"LIGHT:%d   ",light);//格式化字符串篇幅问题,部分代码隐藏了!!!

注意:

  • 要改动蜂鸣器导通电压为1.8v,否则可能因为电压不足而无法工作
  • 光电传感器的实现要ADC转换,要添加adc.c和adc.h文件到keil工程中
  • 按键需要添加按键消抖,否则单片机不知道按了多少次

本文是一个综合性工程,对本文内容有疑惑的,可参见博主上几篇文章,上几篇文章中详细讲述了此工程实现的详细步骤和详细代码说明:

  • STM32控制风扇转动、蜂鸣器响停、光敏电阻光强读取、温湿度传感器控制
  • STM32经典例子
  • 初识STM32工作原理和基础编程
  • STM32如何在LCD上显示单词、文字、图片等

工程下载地址:
STM32嵌入式实现智能家居控制系统完整工程,是本文所介绍的智能家居控制系统的完整工程,用proteus仿真实现,需要的课自行下载。

以上就是本文所有内容,希望能帮到大家!!!

STM32嵌入式实现智能家居控制系统相关推荐

  1. 基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块+DHT11温湿度采集+MQ系列 烟雾及可燃气体+蜂鸣器+步进电机模拟窗帘+OLED液晶显示+

    ## **基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块(阿里云 或ONENET或局域网)+DHT11温湿度采集+MQ系列 烟雾及可燃气体+ ...

  2. 实现智能家居控制系统

    本文将讲述如何用STM32嵌入式实现智能家居控制系统,所谓智能就是实时监测自主控制一些因素,如,温度.湿度.光照强度等,当室内光线较暗时自动打开灯,根据光线亮度的不同开灯数量也不同,当室内温度过高时红 ...

  3. 基于STM32单片机的智能家居测量系统设计

    当今的家庭生活面临着各种环境和健康问题,周围的生活参数存在潜在的隐患,包括室温.气体中有害物质的浓度等.在新时代,人们越来越关注健康及其相关因素.随着微电子技术的应用,电器的普及,以及单片机和传感器性 ...

  4. 基于ZigBee和STM32的智能家居控制系统的设计与实现(五)--终结篇

    基于ZigBee和STM32的智能家居控制系统的设计与实现(五)–终结篇 说明 首先祝贺自己顺利的完成了毕业答辩工作,想起整个过程还是挺让自己感动的.最后还被评为优秀毕业设计,虽然并没有什么luan用 ...

  5. 基于ZigBee和STM32的智能家居控制系统的设计与实现(二)

    基于ZigBee和STM32的智能家居控制系统的设计与实现(二)   上一篇博客中总体介绍智能家居系统的基本实现原理,这篇博客和以后的几篇博客会详细进行相应的介绍.这里首先进行硬件电路的设计. 硬件电 ...

  6. 基于ZigBee和STM32的智能家居控制系统的设计与实现

    基于ZigBee和STM32的智能家居控制系统的设计与实现(一) 时间过的好快,已经到了做毕业设计的时候了,本次毕业设计题目是自己选的,为什么做这个?原因很简单,想把自己所学的大部分知识都应用上,虽然 ...

  7. 基于ZigBee和STM32的智能家居控制系统的设计与实现(三)

    基于ZigBee和STM32的智能家居控制系统的设计与实现(三) 自从前两篇博客介绍了智能家居系统的基本实现机理后,收到了好多朋友的来信,和我讨论了好多的这方面的知识,在此很高兴,虽然自己做的这个所谓 ...

  8. 嵌入式linux智能家居系统,以Arm-Linux为平台的智能家居控制系统的设计详解

    嵌入式系统以其占用资源少.专用性强.功耗低的特点使其广泛应用在移动通信.工业生产.安全监控等领域.针对人们对高效.舒适.安全.便利.环保的居住环境的要求,提出了以Arm-Linux为平台的智能家居控制 ...

  9. 基于华为云设计的智能家居控制系统(STM32+ESP8266)

    1. 功能介绍 现在物联网已经遍布生活每个角落,几乎哪里都能看到物联网的应用.物联网就是物物相连的互联网,可以将之前单机设备全部接入互联网,完成数据交互,远程控制. 比如: 智能电表(远程抄表),智能 ...

最新文章

  1. 2016年7月微软MVP申请開始了!
  2. windows符号服务器地址
  3. 查看iis的log日志,并按访问量最大的天数倒排序
  4. QT 创建鼠标右键菜单
  5. 谈谈未来简书首页拒稿界面的设计思路
  6. 【图像去噪】基于matlab GUI均值+中值图像去噪【含Matlab源码 1815期】
  7. Linux - yum安装步骤
  8. 为什么爬虫需要代理IP?
  9. 3dmax测试软件自动关闭,打开3dmax出现软件问题导致3dmax意外关闭的两种解决方法...
  10. VINS-Mono翻译
  11. 如何快速构建一套稳定、高效、可靠的网页无插件监控、直播、点播解决方案
  12. lower_bound,upper_bound的第四个参数
  13. txt文档批量合并解决数据处理问题
  14. asp.net快速开发框架(eFrameWork) v4.0.5
  15. 指令集对CPU性能的影响
  16. JS中的原始数据类型
  17. npm安装和卸载依赖包
  18. python计算趋肤深度
  19. 87 Three.js 手动创建SkinnedMesh的骨骼和绑定动画
  20. 大学java期中考试题目以及自己的解答

热门文章

  1. 西安翻译学院东区计算机教室,西安翻译学院:200间教室跨进智慧时代
  2. 6.百度地图例子讲解
  3. 苹果支付php服务端处理,以及双重验证,收据,状态码
  4. POI Exercise
  5. 编译原理之--FIRST集、FOLLOW集 和 SELECT集
  6. 传统企业IT如何上云
  7. 单目SLAM在移动端应用的实现难点有哪些?
  8. 扎好篱笆桩:三大运营商守住网络安全“命门”
  9. Python 正则匹配以xx开头以xx结尾的单词
  10. NASA Panoply读取netcdf画图