• 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 error
                return 1;
            }
        }
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    (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)//检测对应管脚接收到的高低电平
    
    • 1

    (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 );
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

    		if( GPIO_ReadInputDataBit(INFRARED_PORT,INFRARED) != RESET)
    		{
    		   PBout(13)=0;  //低电平有效
    		   delay_ms(600);
    			 PBout(13)=1;  //低电平有效
    		   delay_ms(2000);
    		}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (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;
          }					
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    直接
    (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/1ECfqbRXnbjXO2Io7RSpu3A?pwd=nhng
    提取码:nhng

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

  • 相关阅读:
    Server-Sent Events(以下简称 SSE)及event-source-polyfill使用
    互调的影响
    论文复现|Panoptic Deeplab(全景分割PyTorch)
    hibernate跨数据库,columnDefinition不可移植性改造方案
    kubelet源码 删除pod(二)
    【微信小程序】授权登录流程解析
    java毕业生设计医学生在线学习交流平台计算机源码+系统+mysql+调试部署+lw
    半导体晶圆厂内外网数据单向导出,什么样的方案才安全又便捷?
    Python的内置函数(十七)、replace()
    Unity中Shader矩阵的逆矩阵
  • 原文地址:https://blog.csdn.net/u011816009/article/details/131446097