STM32--基于STM32的智能家居设计与实现

本文详细介绍基于STM32F103C8T6的智能家居设计与实现,详细设计资料见文末链接

一、功能模块介绍

智能家居系统系统图如下所示,主要包括温湿度传感器、OLED液晶显示,WIFI物联网模块、人体红外预警模块、烟雾传感器模块、蜂鸣器模块
在这里插入图片描述

(1)温湿度传感器
温湿度传感器选用DHT11数字温湿度传感器,它采用专门的数字模块采集技术和温湿度传感技术。该传感器具有响应速度快、抗干扰能力强、适合测量室内温混度,可以将采集到的温度实时转换成输出信号在显示屏上显示

在这里插入图片描述

DHT11各引脚说明如下
(1)VCC:电源正,供电3-5.5V
(2)DATA:串行数据,单总线
(3)GND:电源地

DHT11和STM32的接线方式见下表

STM32F103DHT11
3V3VCC
GNDGND
A0IO

DHT11模块数据转换代码(完整见文末链接)

u16 dht11_read_data(u8 buffer[5])
{u16 i = 0;u8 checksum;dht11_reset();//发送起始信号if (dht11_scan() == RESET){//等待响应信号结束while (dht11_scan() == RESET);while (dht11_scan() == SET);for (i = 0; i < 5; i++){buffer[i] = dht11_read_byte();}while (dht11_scan() == RESET);//接收结束,拉高片选dht11_gpio_output();DHT11_OUT_H;checksum = buffer[0] + buffer[1] + buffer[2] + buffer[3];//校验数据if (checksum != buffer[4]){// checksum errorreturn 1;}}return 0;
}

(2)麦克风传感器模块
本文使用的是高灵敏度的麦克风传感器,其内置一个对声音敏感的电容式驻极体话筒,声波使话筒内的驻极体薄膜振动,导致电容的变化,而产生与之对应变化的微小电压。这一电压随后被转化成0-5V的电压,经过A/D转换被数据采集器接受,并传送给单片机。该模块有4个管脚输出,引脚介绍如下:
(1)VCC:电源正,5V供电
(2)GND:电源地
(3)AO:模拟量输出,实时输出麦克风的电压信号
(4)DO:数字量输出,当声音强度超过某一个阈值后输出高低电平,阈值可通过电位器调节(注意输出高电平也是5V)

此外,除了麦克风传感器外还有声音传感器模块,直接输出开关量,可根据实际情况选择
在这里插入图片描述

麦克风传感器和STM32的接线方式见下表

STM32F103麦克风传感器
5VVCC
GNDGND
A0DO

检测程序如下,仅检测对应管脚的高低电平变化即可

if( GPIO_ReadInputDataBit(KEY_PORT,KEY) != RESET)//检测对应管脚接收到的高低电平

(3)烟雾预警模块
烟雾预警选用MQ-2烟雾气体传感器,根据传感器的电导率随空气中可燃气体浓度的增加而增大的特性检测空气中可燃气体,然后将电导率的变化转换成对应的电信号

在这里插入图片描述
该模块有4个引脚,:
(1)VCC:电源正,5V供电,电流150mA
(2)GND:电源地
(3)AO:模拟量输出,相对无输出(0.1V-0.3V),高浓度(电压4V左右)
(4)DO:数字量输出,(注意输出高电平也是5V)

注意:传感器通电后需要预热一分钟,稳定后数据才准确,传感器发热是正常现象因为内部有电热丝,如果烫手那就有问题了

MQ-2烟雾传感器和STM32的接线方式同上述的声音传感器一样,选择一个普通的IO口就行,用于读入输入电平信号

(4)红外预警
红外预警模块选用HC-SR501人体红外传感器,人体红外感应的主要器件为人体热释电红外传感器。人体都有恒定的体温,一般在36~37度,所以会发出特定波长的红外线,被动式红外探头就是探测人体发射的红外线而进行工作的
在这里插入图片描述
该模块有3个引脚,:
(1)VCC:电源正,4.5V-20V电压,静态电流50uA
(2)GND:电源地
(3)OUT:信号输出,高电平3V3,低电平0V

对应引脚图如下:
在这里插入图片描述

人体红外传感器和STM32的接线方式见下表(输出脚接普通GPIO口即可,仅输入信号检测管脚)

STM32F103人体红外传感器
5VVCC
GNDGND
B14OUT

人体红外传感器初始化函数

void INFRARED_Init(void)
{  GPIO_InitTypeDef GPIO_InitStructure;   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIO_B//INFRARED  IO 初始化GPIO_InitStructure.GPIO_Pin = INFRARED ;       	//发送高点平引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;	//推挽输出GPIO_Init(INFRARED_PORT, &GPIO_InitStructure);GPIO_ResetBits(INFRARED_PORT,INFRARED );}

人体红外传感器读取数据函数

		if( GPIO_ReadInputDataBit(INFRARED_PORT,INFRARED) != RESET){PBout(13)=0;  //低电平有效delay_ms(600);PBout(13)=1;  //低电平有效delay_ms(2000);}

(5)OLED显示模块
显示模块主要用于显示温湿度数据,本文选用的是0.96寸的OLED屏幕,OLED被称为有机激光二极管,也被称为有机激光显示,OLED采用有机材料涂层和玻璃基板,当有电流通过时有机材料就会发光,所以OLED具有自发光特性,不需要背光源(只上电不会亮的,需要完整的程序驱动),0.96寸OLED其有4pin(IIC接口)和7pin(SPI接口)两种,本文选用的是其中的4pin的OLED

4pin OLED屏幕和STM32的接线方式如下

OLEDSTM32F103
VCC3.3V—5V
GNDGND
SCLPB8
SDAPB9

在这里插入图片描述

OLED部分显示函数如下

//显示一个字符号串
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
{unsigned char j=0;while (chr[j]!='\0'){		OLED_ShowChar(x,y,chr[j],Char_Size);x+=8;if(x>120){x=0;y+=2;}j++;}
}//显示汉字
void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{      			    u8 t,adder=0;OLED_Set_Pos(x,y);	for(t=0;t<16;t++){OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);adder+=1;}	OLED_Set_Pos(x,y+1);	for(t=0;t<16;t++){	OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);adder+=1;}					
}

直接
(6)报警模块
报警模块主要使用无源蜂鸣器实现,如下图所示,蜂鸣器分为有源和无源两种,其中无源蜂鸣器其内部无振荡源直接直流电无法驱动它,需要2k-5k的方波;有源蜂鸣器是内部有振荡源直接外供电源即可,本文选用有源蜂鸣器说明
在这里插入图片描述

蜂鸣器模块和STM32的接线方式如下

蜂鸣器STM32F103
VCC3.3V—5V
GNDGND
I/OPB13

蜂鸣器驱动代码比较简单,直接输出高低电平驱动即可驱动

(7)wifi无线传输
WiFi模块选用ESP8266,主要实现将温湿度数值、烟雾报警信息传到物联网平台,同时接收物联网平台返回的数据并进行分析处理

ESP8266这个模块相对设置比较麻烦,可参考下面这篇博客进行配置
https://blog.csdn.net/u011816009/article/details/131014271
在这里插入图片描述

二、实物说明

以下视频详细说明智能家居各模块实现过程

基于STM32的智能家居系统

三、附完整资源链接

链接: https://pan.baidu.com/s/1SNdejMYt32UmhOmfXHxt0g?pwd=c6nb
提取码: c6nb

代码打开路径:bigiotSTM32-master\bigiot\Project\STM32F10x_LED\MDK-ARM\Project

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/153055.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剑指offer——JZ86 在二叉树中找到两个节点的最近公共祖先 解题思路与具体代码【C++】

一、题目描述与要求 在二叉树中找到两个节点的最近公共祖先_牛客题霸_牛客网 (nowcoder.com) 题目描述 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2&#xff0c;请找到 o1 和 o2 的最近公共祖先节点。 数据范围&#xff1a;树上节点数满足1≤n≤1…

UE5修改导航网格的参数

Unreal Engine 4 - Recast NavMesh Size, how to Change Agent Radius / Tutorial - YouTubehttps://www.youtube.com/watch?vf3hF6xdmCTk 修改当前的 代理半径就是一般贴边的长度 修改编辑器的

deckGL自定义图层学习笔记

1.自定义图层 当使用DeckGL提供的图层还无法满足需求时&#xff08;https://deck.gl/docs/api-reference/layers&#xff09;&#xff0c;可能就需要自定义图层了。在DeckGL中有常见的三种自定义图层的方式 创建复合层&#xff08;composite layers.&#xff09;——复合层是一…

建立数据科学基础设施的绝佳指南 数据工程师都该人手一册

《Effective数据科学基础设施》由Netflix工程师Ville Tuulos撰写&#xff0c;以Metaflow为对象&#xff0c;介绍了数据科学所需要的基础设施&#xff0c;囊括数据准备、特征工程、模型训练、模型部署、服务和持续监控等环节。Metaflow专注于构建生产流程&#xff0c;更适合具有…

最新AI创作系统源码ChatGPT网站源码V2.6.3/支持Midjourney绘画/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Chat…

想要开发一款游戏, 需要注意什么?

开发一款游戏是一个复杂而令人兴奋的过程。游戏开发是指创建、设计、制作和发布电子游戏的过程。它涵盖了从最初的概念和创意阶段到最终的游戏发布和维护阶段的各个方面。 以下是一些需要注意的关键事项&#xff1a; 游戏概念和目标&#xff1a; 确定游戏开发的核心概念和目标…

小视频APP源码选择指南:挑选最适合你的开发框架

在如今蓬勃发展的小视频APP行业中&#xff0c;源码的选择是打造一款成功应用的关键步骤。然而&#xff0c;面对众多开发框架的选择&#xff0c;如何挑选最适合你的小视频APP源码呢&#xff1f;作为这一领域的专家&#xff0c;我将为你提供一份详尽的指南&#xff0c;助你在源码…

nginx-proxy反向代理缓存

介绍&#xff1a; 反向代理缓存&#xff0c;类似于动静分离&#xff0c;即通过nginx代理服务器根据客户端发送的url请求&#xff0c;去后台服务器获取数据&#xff0c;将静态数据缓存到nginx代理服务器上&#xff0c;并配置有过期时间&#xff0c;当客户端下次以相同的url请求…

LVS+Keepalived 高可用集群负载均衡

一.keepalived介绍 1.1.Keepalived实现原理 由多台路由器组成一个热备组&#xff0c;通过共用的虚拟IP地址对外提供服务。 每个热备组内同时只有一台主路由器提供服务&#xff0c;其他路由器处于冗余状态。 若当前在线的路由器失效&#xff0c;则其他路由器会根据设置…

【Python查找算法】二分查找、线性查找、哈希查找

目录 1 二分查找算法 2 线性查找算法 3 哈希查找算法 1 二分查找算法 二分查找&#xff08;Binary Search&#xff09;是一种用于在有序数据集合中查找特定元素的高效算法。它的工作原理基于将数据集合分成两半&#xff0c;然后逐步缩小搜索范围&#xff0c;直到找到目标元素…

ChatGPT是如何产生心智的?

一、前言 - ChatGPT真的产生心智了吗&#xff1f; 来自斯坦福大学的最新研究结论&#xff0c;一经发出就造成了学术圈的轰动&#xff0c;“原本认为是人类独有的心智理论&#xff08;Theory of Mind&#xff0c;ToM&#xff09;&#xff0c;已经出现在ChatGPT背后的AI模型上”…

[极客大挑战 2020]Roamphp2-Myblog - 伪协议+文件上传+(LFIZIP)||(LFIPhar)【***】

[极客大挑战 2020]Roamphp2-Myblog 1 解题流程1.1 分析1.2 解题1.3 中场休息——再分析1.3.1 浅层分析1.3.2 难点疑惑1.3.3 深度分析 1.4 重整旗鼓——再战1.4.1 解法一&#xff1a;zip伪协议1.4.2 解法二&#xff1a;phar伪协议 2 总结展望 1 解题流程 1.1 分析 1、点击logi…

Linux——指令初识(二)

Linux下基本指令 前言一、时间相关的指令二、Cal指令三、find指令四、grep指令五、sort指令六、uniq指令七、.zip/unzip指令八、.tar指令九、uname –r指令十、重要的几个热键[Tab],[ctrl]-c, [ctrl]-d十一、关机总结 前言 linux的学习开始啦&#xff01; 今天我们继续来认识指…

零基础自学考证HCIE分享,附零基础HCIE学习路线

最近有些粉丝问我&#xff0c;能不能自学华为认证网络工程师HCIE&#xff1f; 我的回答是&#xff1a;能&#xff0c;但是很难。 据不完全统计&#xff0c;考上HCIE的人群中自学占比10%左右。为什么会这么低呢&#xff0c;下面就来给大家说考HCIE自学会遇到的一些困难。 首先&…

Android约束布局ConstraintLayout的Guideline,CardView

Android约束布局ConstraintLayout的Guideline&#xff0c;CardView <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:a…

【java学习】一维数组(9)

文章目录 1. 一维数组声明2. 一维数组初始化3. 数组元素的引用4. 数组元素的默认初始化 1. 一维数组声明 声明方式&#xff1a; type var[] 或 type[] var 例如&#xff1a; int a[]; int[] a1; double b[]; Mydate[] c; //对象数组2. 一维数组初始化 动态初始化&#xf…

VMware和别的服务器 ,组建局域网那些事 。

利用VMware &#xff0c;实现组件局域网、有可能会受限于WiFi&#xff08;路由器&#xff09; 。 通常不会&#xff0c;除非做了网关设置 相关知识&#xff1a; 禁用局域网隔离&#xff08;LAN Isolation&#xff09;&#xff1a; 某些路由器提供了一个选项&#xff0c;允许您禁…

【面试算法——动态规划 21】不同的子序列(hard) 通配符匹配(hard)

115. 不同的子序列 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 链接&#xff1a;&#xff1a;https://leetcode.cn/problems/distinct-subsequences/ 示例 1&#xff1a; 输入&#xff1a;s “rab…

【微服务】八. 统一网关gateway

8.1 网关作用介绍 网关功能&#xff1a; 身份认证和权限校验服务路由、负载均衡请求限流 网关的技术实现 在SpringCloud中网关的实现包括两种&#xff1a; gatewayzuul Zuul是基于Servlet的实现&#xff0c;属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的Web…

“元创新·智生成” 第15届企业数智化学习大会公布嘉宾阵容

2023年是AIGC爆发年&#xff0c;与AI相关的创新应用迅速向各行各业渗透。 在企业培训领域&#xff0c;数字人、元宇宙等正逐渐成为企业在开展人才发展、业务培训等工作的工具&#xff0c;其高效、便捷、在线化、场景化等优势受到企业的热捧。在需求的推动下&#xff0c;企业培…