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

news2025/1/10 18:02:32

本文详细介绍基于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 error
            return 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.coloradmin.cn/o/1062480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手边酒店V2独立版小程序 1.0.21 免授权+小程序前端

手边酒店小程序独立版酒店宾馆订房系统支持创建多个小程序&#xff0c;让每一个客户单独管理属于自己的小程序。后台支持一键入住&#xff0c;一键退款、退押金、钟点房支持微信支付、模板消息。客服实时收到新的订单信息&#xff0c;可以在手机端处理订单。支持按日期维护房价…

浅谈wor2vec,RNN,LSTM,Transfermer之间的关系

浅谈wor2vec&#xff0c;RNN&#xff0c;LSTM&#xff0c;Transfermer之间的关系 今天博主谈一谈wor2vec&#xff0c;RNN&#xff0c;LSTM&#xff0c;Transfermer这些方法之间的关系。 首先&#xff0c;我先做一个定位&#xff0c;其实Transfermer是RNN&#xff0c;LSTM&…

ActiveMQ消息中间件介绍

一、ActiveMQ简介 ActiveMQ是Apache出品&#xff0c;最流行的&#xff0c;能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provide实现。尽管JMS规范出台已经是很久的事情了&#xff0c;但是JMS在当今的J2EE应用中仍然扮演这特殊的地位。 二、Active…

【逐步剖C】-第十一章-动态内存管理

一、为什么要有动态内存管理 从我们平常的学习经历来看&#xff0c;所开辟的数组一般都为固定长度大小的数组&#xff1b;但从很多现实需求来看需要我们开辟一个长度“可变”的数组&#xff0c;即这个数组的大小不能在建立数组时就指定&#xff0c;需要根据某个变量作为标准。…

小样本学习——匹配网络

目录 匹配网络 &#xff08;1&#xff09;简单介绍&#xff1a; &#xff08;2&#xff09;专业术语 &#xff08;3&#xff09;主要思想 &#xff08;4&#xff09;训练过程 问题 回答 MANN 匹配网络 &#xff08;1&#xff09;简单介绍&#xff1a; Matching netwo…

【C++设计模式之装饰模式:结构型】分析及示例

装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许在运行时动态地给一个对象添加额外的行为。 描述 装饰模式通过创建一个包装器&#xff08;Wrapper&#xff09;来包裹原始对象&#xff0c;并在原始对象的行为前后添加额外的功能。…

JAVA学习(5)-全网最详细~

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

git提交代码的流程

1.拉取代码 当你进入了一家公司就需要拉去公司的代码进行开发,此时你的项目小组长会给你个地址拉代码, git clone 公司项目的地址 此时如果不使用了这个方式拉去代码,拉去的是master分支上的代码,但是很多数的情况下&#xff0c;公司的项目可能会在其它的分支上,因此到公…

XXL-JOB源码梳理——一文理清XXL-JOB实现方案

分布式定时任务调度系统 流程分析 一个分布式定时任务&#xff0c;需要具备有以下几点功能&#xff1a; 核心功能&#xff1a;定时调度、任务管理、可观测日志高可用&#xff1a;集群、分片、失败处理高性能&#xff1a;分布式锁扩展功能&#xff1a;可视化运维、多语言、任…

微信小程序代驾系统源码(含未编译前端,二开无忧) v2.5

简介&#xff1a; 如今有越来越多的人在网上做代驾&#xff0c;打造一个代驾平台&#xff0c;既可以让司机增加一笔额外的收入&#xff0c;也解决了车主酒后不能开发的问题&#xff0c;代驾系统基于微信小程序开发的代驾系统支持一键下单叫代驾&#xff0c;支持代驾人员保证金…

【15】c++设计模式——>抽象工厂模式

在海贼世界中&#xff0c;位于水之都的弗兰奇一家是由铁人弗兰奇所领导的以拆船为职业的家族&#xff0c;当然了他们的逆向工程做的也很好&#xff0c;会拆船必然会造船。船是海贼们出海所必备的海上交通工具&#xff0c;它由很多的零件组成&#xff0c;从宏观上看它有这么几个…

数据结构--》探索数据结构中的字符串结构与算法

本文将带你深入了解串的基本概念、表示方法以及串操作的常见算法。通过深入理解串的相关概念和操作&#xff0c;我们将能够更好地应用它们来解决算法问题。 无论你是初学者还是进阶者&#xff0c;本文将为你提供简单易懂、实用可行的知识点&#xff0c;帮助你更好地掌握串在数据…

【云笔记篇】Microsoft OneNote笔记插件推荐OneMore

【云笔记篇】Microsoft OneNote笔记插件推荐OneMore OneMore插件是一款非常强大&#xff0c;多达一百多个扩展功能的OneNote笔记插件&#xff0c;而且免费开源&#xff0c;不断更新的优秀插件—【蘇小沐】 1、实验 【OneMore官网&#xff1a;OneMore - a OneNote add-in (on…

使用idea 中的rest 将 git 合并部分分支代码到主分支

需求&#xff1a;当要将dev的分支中的部分代码合并到test分支时&#xff0c;又不想把dev的全部代码合并到test分支 例如dev分支已经提交了 demo1到4&#xff0c;到想把demo1-3的代码合并到test分支&#xff0c;demo4暂时不合并 可以使用idea的reset 功能满足以上需求 1首先切…

Activity之间数据回传【Android、activity回传、结合实例】

任务要求 在Android应用中&#xff0c;有时需要从一个Activity向另一个Activity传递数据&#xff0c;并在第二个Activity处理后将结果传递回第一个Activity。 这种情况下&#xff0c;我们可以使用startActivityForResult()和onActivityResult()方法来实现数据回传。 实现步骤…

Day-07 修改 Nginx 配置文件

至此&#xff1a; 简单的 Docker 安装 Nginx并启动算是成功了! ps: 如何修改 Nginx的配置、更改nginx 的资源文件&#xff1f; eg&#xff1a; 1、可以将容器中的目录和本机目录做映射。 2、达到修改本机目录文件就影响到容器中的文件。 1.本机创建实例文件夹 新建目录&#x…

图像拼接后丢失数据,转tiff报错rasterfile failed: an unknown

图像拼接后丢失数据 不仅是数据丢失了&#xff0c;还有个未知原因报错 部分数据存在值不存在的情况 原因 处理遥感数据很容易&#xff0c;磁盘爆满了 解决方案 清理一些无用数据&#xff0c;准备买个2T的外接硬盘用着了。 然后重新做处理

获取沪深300的所有个股列表

脚本&#xff1a; import requests from bs4 import BeautifulSoupurl "https://q.stock.sohu.com/cn/bk_4444.shtml" response requests.get(url) soup BeautifulSoup(response.text, "html.parser")# 找到包含class为e1的元素 elements soup.find_a…

计算机毕设 大数据房价预测分析与可视

文章目录 0 前言1 课题背景2 导入相关的数据 3 观察各项主要特征与房屋售价的关系4 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟…