基于51单片机的智能窗户烟雾浓度雨滴检测无线wifi控制系统proteus仿真原理图PCB

51单片机手动自动智能窗户窗帘控制系统手动自动定时 51单片机手动自动智能窗户窗帘控制系统手动自动定时,关键词:智能窗户窗帘控制系统,ULN2003窗帘,定时窗帘,温度湿度窗帘 阅读详情

功能介绍:
0.本系统采用STC89C52作为单片机
1.LCD1602实时显示当前环境温湿度,烟雾浓度,室外是否下雨
2.按键可设定烟雾浓度,环境温湿度阈值,雨滴检测阈值
3.当环境适宜时,打开窗户,当外面下雨时,关闭窗户
4.当室内烟雾浓度超过设定阈值时,无论如何都将打开窗户
5.可手动控制窗户开关状态
6.可通过WIFI控制窗户开关状态
*1O# 表示打开窗户
*1C# 表示关闭窗户
WIFI控制窗户后,进入手动模式
*1A# 表示可恢复自动模式
*1M# 表示可进入手动模式

原理图:
在这里插入图片描述在这里插入图片描述

PCB:
在这里插入图片描述

主程序:

#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include "delay.h"
#include "dht11.h"
#include "lcd1602.h"
#include "tlc0832.h"
#include "28BYJ48.h"

sbit KEY_SWITCH = P3^5;                   //确认按键
sbit KEY_SET = P3^3;                      //设置按键
sbit KEY_ADD = P3^4;                      //加按键
sbit KEY_SUB = P3^6;                      //减按键

#define ON 0
#define OFF 1

enum {NORMAL=1, SET_TEMP, SET_HM, SET_SMOG} DispMode;

unsigned char dis0[18];       //数组暂存
unsigned char R_buf[4];

bit refreshFlag = 0;

bit setFlag = 0; //设置标志
bit setIndex = 0;
bit autoFlag = 1;
bit openFlag = 0;
bit rainFlag = 0;
int temp = 0;
int humidity = 0;
int smogConc = 0;
int minTemp = 20;
int maxTemp = 35;
int minEvHm = 35;
int maxEvHm = 85;
int maxSmogConc = 30;
int water = 0;
unsigned char motorDir = 0;


void Timer0_Init(); //函数声明
void UART_Init();
void UART_SendByte(unsigned char dat);
void UART_SendStr(unsigned char *s, unsigned char length);
void DispNormal(void);
void DispSetTemp(setFlag, setIndex);
void DispSetHm(setFlag, setIndex);
void DispSetSmog(setFlag, setIndex);
void WindowCtrl(void);
void MotorCtrl(void);
void KeyScan(void);

void main()
{

	Timer0_Init(); //定时器0初始化
    LCD_Init(); //LCD初始化
    LCD_Clear();

    LCD_DispStr(4, 0, "Welcome!");
	DelayS(1); //等待WIFI启动
    UART_Init(); //串口初始化
    
    UART_SendStr("AT+CIPMUX=1\r\n", 13); //打开多连接
	DelayS(1);
	UART_SendStr("AT+CIPSERVER=1,8080\r\n", 21); //建立服务 端口号为8080
	DelayS(1);
    DispMode = NORMAL;
	while (1) //主循环
	{
		if (refreshFlag == 1) //刷新数据标志
		{
            static unsigned char cnt = 0;
            
			refreshFlag = 0;

            //检测数据
            TR0 = 0; //关总中断
            if (cnt % 5 == 0)
            {
                DHT11_ReadData(); //检测温湿度
                temp = U8T_data_H;
                humidity = U8RH_data_H;
            }

            smogConc = 100 * ReadADC(AIN1_GND) / 255; //检测烟雾浓度
            
            if (smogConc < 0)
            {
                smogConc = 0;
            }
            else if (smogConc > 99)
            {
                smogConc = 99;
            }
            
            water = 100 - 100 * ReadADC(AIN0_GND) / 255; //检测雨滴
            
            if (water >= 10)
            {
                rainFlag = 1;
            }
            else
            {
                rainFlag = 0;
            }

            WindowCtrl();

            if (DispMode == NORMAL)
            {
                DispNormal();
            }
            else if (DispMode == SET_TEMP)
            {
                DispSetTemp(setFlag, setIndex);
            }
            else if (DispMode == SET_HM)
            {
                DispSetHm(setFlag, setIndex);
            }
            else if (DispMode == SET_SMOG)
            {
                DispSetSmog(setFlag, setIndex);
            }
            
            TR0 = 1; //开总中断

            if (cnt >= 10) // 5秒发送一次
            {
                cnt = 0;
                // WIFI发送数据
                UART_SendStr("AT+CIPSEND=0,35\r\n", 17); //发送AT命令
                DelayMs(100);
                sprintf(dis0, "Temp:%02d'C Hm:%02d%% \r\n", temp, humidity);
                UART_SendStr(dis0, 19); //发送内容
                if (autoFlag == 1)      //自动模式
                {
                    sprintf(dis0, "Smog:%3d%% A ", smogConc);
                }
                else
                {
                    sprintf(dis0, "Smog:%3d%% M ", smogConc);
                }

                UART_SendStr(dis0, 12); //发送内容

                if (openFlag == 1)
                {
                    UART_SendStr("O ", 2); //发送内容
                }
                else
                {
                    UART_SendStr("C ", 2); //发送内容
                }
                
                if (rainFlag == 1)
                {
                    UART_SendStr("YY\r\n", 3); //发送内容
                }
                else
                {
                    UART_SendStr("WY\r\n", 3); //发送内容
                }
            }
            else
            {
                cnt++;
            }
        }
        EA = 0;
        MotorCtrl();
        EA = 1;
        KeyScan();
	}
}

void WindowCtrl(void)
{
    static bit Flag1 = 0;
    static bit Flag2 = 0;
    static bit Flag3 = 0;
    static bit openFlagBuf = 0;

    if (autoFlag == 1)
    {
        if (smogConc >= maxSmogConc) //烟雾浓度过高
        {
            Flag1 = 1; //打开窗户标志1
        }
        else
        {
            Flag1 = 0; //关闭窗户标志1
        }

        if (rainFlag == 0) //未下雨
        {
            Flag2 = 1; //打开窗户标志2
        }
        else
        {
            Flag2 = 0; //关闭窗户标志2
        }

        if ((temp >= minTemp && temp <= maxTemp) && (humidity >= minEvHm && humidity <= maxEvHm)) //环境适宜时
        {
            Flag3 = 1; //打开窗户标志3
        }
        else
        {
            Flag3 = 0; //关闭窗户标志3
        }

        if (Flag1) //烟雾浓度超高,优先级最高
        {
            openFlag = 1;
        }
        else
        {
            if (Flag2) //确认没有下雨,优先级次之
            {
                if (Flag3) //确认环境适宜,优先级最低
                {
                    openFlag = 1;
                }
                else
                {
                    openFlag = 0;
                }
            }
            else
            {
                openFlag = 0;
            }
        }
    }


    if (~openFlagBuf && openFlag) //开窗
    {
        motorDir = 1; //正转标志
    }
    else if (openFlagBuf && ~openFlag) //关窗
    {
        motorDir = 2; //反转标志
    }

    openFlagBuf = openFlag;
}

void MotorCtrl(void)
{
    static int motorCnt = 0;

    if (motorDir == 1)
    {
        motorCnt++;
        motor_z();
        if (motorCnt == 64)
        {
            motorDir = 0;
        }
    }
    else if (motorDir == 2)
    {
        motorCnt--;
        motor_f();
        if (motorCnt == 0)
        {
            motorDir = 0;
        }
    }
}

void DispNormal(void)
{
    //LCD显示数据
    sprintf(dis0, "Temp:%2d", temp);
    LCD_DispStr(0, 0, dis0);
    LCD_DispOneChar(7, 0, 0xdf); //摄氏度的点
    sprintf(dis0, "C Hm:%2d%%", humidity);
    LCD_DispStr(8, 0, dis0);
    if (autoFlag == 1)
    {
        sprintf(dis0, "Smog:%3d%% A", smogConc); //自动模式
    }
    else
    {
        sprintf(dis0, "Smog:%3d%% M", smogConc); //WIFI控制,手动模式显示
    }
    LCD_DispStr(0, 1, dis0);

    if (openFlag == 1) //窗户打开
    {
        LCD_DispStr(12, 1, "O ");
    }
    else //窗户关闭
    {
        LCD_DispStr(12, 1, "C ");
    }

    if (rainFlag == 1)
    {
        LCD_DispStr(14, 1, "YY"); //有雨
    }
    else
    {
        LCD_DispStr(14, 1, "WY"); //无雨
    }

}

仿真演示视频:
https://www.bilibili.com/video/BV1aY4y1t7oM/

实物演示视频:
https://www.bilibili.com/video/BV1Ya41177oE/

【单机大作业】基于51单片机的温度湿度监测系统 其中,通过硬件初始化函数将LCD1602液晶显示屏初始化为4位数据线、2行显示、5*7点阵字符的模式,并实现了显示一位字符和显示温度和湿度值的函数。本设计使用51单片机读取DHT11温湿度传感器的数据,并将数据传输给LCD1602液晶显示屏,实现了温度湿度监测的功能。本设计要求设计一个基于51单片机的温度湿度监测系统,能够实时采集当前的温度和湿度值,并在LCD1602液晶显示屏上进行显示。- 单片机模块:负责控制整个系统的运行,包括读取DHT11传感器的数据,并将数据传输给LCD1602液晶显示屏。 阅读详情

相关推荐

【IoT】智能烟雾报警器

智能硬件设计

产品线负责人 7334

基于51单片机的自动报警设计(烟雾报警)内含论文与源代码.zip

内含两篇本人写的毕业论文设计可参考,附带源代码及原理图,具体可查看我的博客介绍。 本文设计了一种基于单片机AT89S52、AD0809模数转换器, 集成温度传感器DS18B20和烟雾传感器MQ-2等,利用多传感器信息融合技术,完成声光报警的实用、可靠的单片机自动报警系统,着重讲述了该系统的组成形式及工作原理。实践表明,单片机技术在系统报警和其它一些自动控制领域中有着广泛的应用前景。

实验十四:雨滴传感器实验

——教学周第9周第3篇小实验——雨滴实验 ——雨滴传感器应用 ——下雨了,LED灯报警,天晴(水干了),报警灯熄灭 ——硬件直接购买,我是程序猿,负责码代码

卧龙院士 2769

基于51单片机智能窗户设计

智能窗户控制系统分为两部分设计即电子自动控制部分和机械传动部分,电子控制部分使用STC89C52单片机为核CPU,集成多种传感器实现监测控制;机械传动部分设计在窗户上安装步进电机,实现精确控制窗户和窗帘的开启。 设计实现如下功能: 1.lcd1602显示温湿度、烟雾值 、亮度值 、系统时间 2.按键设定湿度、温度、烟雾上限值以及亮度上下限值 3.手动、红外遥控开、关窗户功能 4.定时开、关窗户功能 5.下雨时通过温湿度传感器窗户自动关窗功能 6.当室外亮度值达到设定值时自动开、关窗户 7.当室内可燃气体达到设定值时,窗户自动关闭并且报警和启动换风功能

2023-3-26基于51单片机智能窗户

通过DS1302时钟芯片读取系统日期和时间,日期和时间可用独立按键进行设置,在时间控制模式下,可设置开窗和关窗时间各一个(通过独立按键设置),当当前时间和设置的开窗时间一致,电机转动开窗,指示灯亮,当前时间和设置的关窗时间一致,则关窗指示灯灭。因受公众号限制,付费内容链接不可以直接复制,所以此处提供多种下载方式,假如以下几种链接都没办法正常下载,请就在微信公众号,私信一下管理员,他看到后会第一时间发送可以直接复制的链接给你。1、手动输入下载,若输入出错,则下载不了,要认真核对链接。

m0_64334734的博客 1685

基于51单片机的自动窗户控制系统风速测量proteus仿真原理图PCB

窗户关闭状态下,当烟雾浓度超过阈值,打开窗户,或者环境均在阈值范围以内,打开窗户。其中烟雾浓度过高的情况,蜂鸣器将报警,并需要手动解除报警。窗户开启状态下,当窗户外有人或温湿度超过阈值或风速过高,窗户关闭。其中窗户外有人的情况,蜂鸣器将报警,并需要手动解除报警。5.采用DC002作为电源接口可直接输入5V给整个系统供电。1.系统实时监测当前的雨滴、温湿度、风速,烟雾浓度。4.按键可设定阈值,手动控制窗户,切换工作模式。0.本系统采用STC89C52作为单片机。2.支持手动/自动两种模式。

1548

基于51单片机的数码管智能百叶窗

基于单片机的数码管智能百叶窗

m0_59552308的博客 3664

基于51单片机智能红外遥控防雨晾衣架 雨滴光强检测系统proteus仿真原理图PCB

3.自动模式下,当雨滴

1366

基于51单片机的空气质量环境检测proteus仿真原理图程序

2.当煤气浓度,光强,温湿度和CO2浓度超过设定阈值时,蜂鸣器报警提醒。1.LCD1602液晶实时显示当前煤气浓度,光强,温湿度和CO2浓度。4.采用DC002作为电源接口可直接输入5V给整个系统供电。0.本项目采用STC89C52作为单片机系统的控制MCU。3.系统设计有四个功能按键可设置各指标阈值。

1615

基于51单片机的车辆智能雨刷控制系统proteus仿真原理图PCB

4.手动模式下,具有自动推荐档位功能,当档位与检测雨滴值推荐档位不一致时,蜂鸣器报警,且对应档位LED闪烁。(该功能可选择开启或关闭)1.LCD1602液晶实时显示当前的雨刷状态/雨滴信息/车速/工作模式。2.自动模式下,雨刷可根据当前检测雨滴状态和车速自动切换档位。3.手动模式下,可通过按键人工调节雨刷的档位,且有LED指示。6.采用DC002作为电源接口可直接输入5V给整个系统供电。0.本系统采用STC89C52作为单片机。5.按键可设定雨滴档位阈值。

1596

无线智能烟雾报警器,预防火灾,关注生命安全-电路方案

生命安全无小事,在工作和生活中一定要时刻关注生命安全,尤其是火灾,分享一个无线火灾报警器的设计,该无线火灾报警器采用STC89C51为核心控制器,利用气体传感器MQ-2、ADC0809模数转换器等实现基本功能。通过这些传感器和芯片,当环境中烟雾浓度或可燃气体浓度等发生变化时系统会发出相应的信号,接收机能灯光报警和声音报警,以此来实现烟雾报警,实现智能报警控制。 原理图截图:

自制51单片机最小系统开发板

2.单片机最小系统介绍 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计

weixin_52733843的博客 1万+

51单片机温湿度检测烟雾报警APP

用eclipse做的,通过WiFi连接51单片机,温湿度检测烟雾报警程序,适合学生学习,有兴趣的都可以下载来看看

基于51单片机的三路多点温湿度检测超阈值报警proteus仿真原理图PCB

4.采用DC002作为电源接口可直接输入5V给整个系统供电。2.当温度超过设定温度或湿度阈值范围时,蜂鸣器报警。3.按键可设定温度阈值或湿度阈值/可控制报警开关。1.LCD1602液晶实时循环显示多点温湿度值。0.本系统采用STC89C52作为单片机

jianghuxiaoge的博客 1155

基于51单片机空气质量检测超限报警Proteus仿真

采用51单片机作为CPU,ADC0832作为AD转换模块,LCD1602显示当前采集的空气质量数值,通过按键可以调节上限阈值,并且阈值显示在LCD1602上面,如果测量空气质量浓度大于当前设置的上限阈值,蜂鸣器进行报警提醒,采用电位器可以调节当前空气质量气体浓度,改变LCD1602浓度显示值,全套仿真资料齐全:

m0_74295839的博客 532

基于单片机温湿度光强二氧化碳采集系统设计-毕设课设资料

【资源下载】下载地址如下1530:https://docs.qq.com/doc/DTlRSd01BZXNpRUxl #include <reg51.h> #include "lcd.h" #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define NACK 0 #define ACK 1 #define MEAS

AuroraFaye的博客 983

51单片机的家居空气质量监测系统proteus仿真设计

本设计仅供参考 51单片机的家居空气质量监测系统(proteus仿真+程序+原理图+PCB原理图:Altium Designer或Protel 99 SE 仿真版本:proteus8.9 程序编译器:keil 4 编号:C0038 资料下载链接 功能描述: 1、可同时检测温度、湿度、PM2.5浓度并同时在液晶上面显示; 2、可以通过按键设置温度上下限、湿度上下限和PM2.5浓度上限报警值; 3、超限启动声光报警提醒;

weixin_52733843的博客 3060

基于51单片机智能窗口控制系统(protues仿真+程序+论文+PPT+PCB

基于51单片机智能窗口控制系统(protues仿真+程序+论文+PPT+PCB

kevin的博客 1901
上一篇: 基于51单片机的智能护眼台灯设计proteus仿真原理图PCB
下一篇: 基于51单片机的智能恒温箱(基于PID算法)proteus仿真原理图PCB
极寒钛科技
博客等级 码龄6年 826粉丝 · 161原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值