回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【挑战二】智能室内环境控制系统 简单

头像 豆爸 2022.11.24 524 5

1 设计背景

 

为了满足新课标第三学段“过程与控制”内容模块,及跨学科主题“小型系统模拟”-“小型开关系统”要求,设计了“智能室内环境控制系统”项目。

 

安全、舒适、便捷、智能是一套优秀的智能家居系统所能带给我们的一个体验。智能室内环境控制系统是智能家居系统的重要的子系统。

 

2 教学目标

 

了解过程与控制可以抽象为包括输入、计算和输出三个典型环节的系统。

 

了解反馈是过程与控制中的重要手段,初步了解反馈对系统优化的作用。

 

了解系统的输入与输出可以是开关量或连续量,了解连续量可以经由阔值判断形成开关量。

 

3 项目分析

 

3.1 系统模块分析

思维导图-系统功能分析.png

系统可以划分为制通风系统、冷系统、制热系统、加湿系统、控制系统等功能相当于独立的模块。

 

3.2 系统功能分析

流程图_副本_副本_副本-导出.png

 

当设定温度>28℃,开启空调进行制热;当设定温度<24℃,开启空调进行制冷。

 

当设定的湿度>40%,开启加湿器进行加湿。

 

 

4 系统硬件设计

 

控制系统:行空板。

通风系统:风扇。

制冷系统:冷水。

制热系统:热水。

加湿系统:加湿器。

 

5 接线

 

387611BD-B660-492f-9A33-06B8C3C550AA.jpg

 

6 编程

 

screenshots-空调2-1669693980840.png

7 系统改进

 

7.1 BUG讨论

 

问:通过系统的运行,大家有没有发现系统有没有什么bug?

答:房间的温度即使到达了设定温度后,还在持续进行制冷。

问:这样,带来的问题是什么?

答:不节能。

答:不舒适。

问:房间的温度即使到达了设定温度后,如何解决系统持续进行制冷?

答:控制系统不知道房间的温度到达了设定值。

答:控制系统没有向制冷系统下达停止制冷的指令。

 

7.2 改进目标

 

目标1:实时告诉控制系统室内的实际温湿度。

目标2:当温湿度达到一定的范围后,自动停止制冷、制热、加湿。

 

7.3 改进方案

 

为了实现目标1,就需要增加一个温湿度传感器,实时采集房间的温湿度,并将温湿度数据发送给控制系统(行空板)。这里将采集到的温湿度发送给控制器,就是过程与控制中的反馈。

 

为了显示目标2,就需要在控制系统(行空板)上增加控制指令。

 

当室内温度低于设定温度范围,自动开启空调进行制热;当室内温度高于设定温度范围,自动开启空调进行制冷。

 

当室内湿度低于设定湿度范围,自动开启加湿器进行加湿;当室内适度高于设定湿度范围,自动关闭加湿器。

 

7.4 流程图改进

 

流程图2.png

 

7.5 硬件改进

 

222.jpg

7.6 程序改进

 

screenshots-空调2-1669693980840.png

 

8 过程与控制分析

思维导图-导出.png

系统工作的过程分为输入、计算和输出三个环节。通过输入指令设定房间的目标温、湿度,控制器接收输入指令,计算后生成相应的工作指令,风扇、制冷模块、加热模块、加湿器等按照工作指令开始工作,从而对房间进行制冷、加热、加湿。

 

9 数字量与连续量

 

在上述过程中,行空板屏幕上的“启动/停止”按钮只有启动、停止两个状态,可以分别用数字1、0来表示,这个按钮的状态就称之为数字量,也称之为开关量。

 

温湿度传感器采集的房间的温度、湿度值在时间上或数值上都是连续的物理量,我们称之为连续量,也称之为模拟量。

 

10 小结

 

本节课程我们学习了生活中的过程与控制,了解了过程与控制中的输入、计算、输出三个环节;认识了在引入传感器和反馈后,控制器就能根据传感器反馈来的数据,对系统进行调节和控制;认识了数字量与连续量。

 

代码
#  -*- coding: UTF-8 -*-

# 过程与控制-行空板
# 豆爸

from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from pinpong.board import DHT11
from unihiker import GUI

# 事件回调函数
def u_thread2_function():
    global t1
    global t1
    while True:
        t1 = dht1.temp_c()
        h1 = dht1.humidity()
        t.config(text=(str("温度:") + str((str(t1) + str("℃")))))
        h.config(text=(str("湿度:") + str((str(h1) + str("%")))))
def button_click1():
    global temp
    temp = (temp + 0.1)
    t_set.config(text=round(temp,1))
def button_click2():
    global t_set
    global temp
    temp = (temp + -0.1)
    t_set.config(text=round(temp,1))
def button_click3():
    global flag
    if (flag == 0):
        temp_add.config(state="disable")
        temp_minus.config(state="disable")
        humi_add.config(state="disable")
        humi_minus.config(state="disable")
        bnt_ok.config(text="停止")
        thread1=u_gui.start_thread(u_thread1_function)
        flag = 1
    else:
        mode1.config(text="")
        mode2.config(text="")
        temp_add.config(state="normal")
        temp_minus.config(state="normal")
        humi_add.config(state="normal")
        humi_minus.config(state="normal")
        bnt_ok.config(text="启动")
        u_gui.stop_thread(thread1)
        flag = 0
def button_click4():
    global h_set
    global humi
    humi = (humi + 0.1)
    h_set.config(text=round(humi,1))
def button_click5():
    global h_set
    global humi
    humi = (humi + -0.1)
    h_set.config(text=round(humi,1))
def u_thread1_function():
    while True:
        if (humi > dht1.humidity()):
            mode2.config(text="加湿")
            p_p21_out=Pin(Pin.P21, Pin.OUT)
            p_p21_out.write_digital(1)
        if ((temp >= 28) and (dht1.temp_c() < temp)):
            mode1.config(text="制冷")
            p_p23_out=Pin(Pin.P23, Pin.OUT)
            p_p23_out.write_digital(1)
        elif ((temp <= 24) and (dht1.temp_c() < temp)):
            mode1.config(text="制热")
            p_p24_out=Pin(Pin.P24, Pin.OUT)
            p_p24_out.write_digital(1)
        else:
            mode1.config(text="")
            mode2.config(text="")
            p_p22_out=Pin(Pin.P22, Pin.OUT)
            p_p22_out.write_digital(0)
            p_p24_out=Pin(Pin.P24, Pin.OUT)
            p_p24_out.write_digital(0)
            p_p21_out=Pin(Pin.P21, Pin.OUT)
            p_p21_out.write_digital(0)


Board().begin()
u_gui=GUI()
flag = 0
humi = 40
temp = 23
global t_set
global temp_add
global temp_minus
global bnt_ok
dht1 = DHT11(Pin((Pin.P22)))
t_set=u_gui.draw_text(text=temp,x=30,y=55,font_size=20, color="#0000FF")
temp_add=u_gui.add_button(text="+",x=100,y=30,w=40,h=30,onclick=button_click1)
temp_minus=u_gui.add_button(text="-",x=100,y=80,w=40,h=30,onclick=button_click2)
bnt_ok=u_gui.add_button(text="启动",x=160,y=145,w=60,h=60,onclick=button_click3)
h_set=u_gui.draw_text(text=humi,x=30,y=155,font_size=20, color="#0000FF")
humi_add=u_gui.add_button(text="+",x=100,y=130,w=40,h=30,onclick=button_click4)
humi_minus=u_gui.add_button(text="-",x=100,y=180,w=40,h=30,onclick=button_click5)
t=u_gui.draw_text(text="",x=0,y=260,font_size=15, color="#0000FF")
h=u_gui.draw_text(text="",x=130,y=260,font_size=15, color="#0000FF")
mode1=u_gui.draw_text(text="",x=50,y=220,font_size=15, color="#FF0000")
mode2=u_gui.draw_text(text="",x=150,y=220,font_size=15, color="#0000FF")
thread2=u_gui.start_thread(u_thread2_function)

while True:
    pass

评论

user-avatar
  • 花生编程

    花生编程2023.01.18

    不错

    0
    • 花生编程

      花生编程2023.01.18

      厉害

      0
      • 三春牛-创客

        三春牛-创客2022.12.29

        与新课标结合

        0
        • 三春牛-创客

          三春牛-创客2022.12.29

          厉害厉害

          0
          • Joannali

            Joannali2022.12.01

            和新课标结合不错的思考

            0