1 设计背景
为了满足新课标第三学段“过程与控制”内容模块,及跨学科主题“小型系统模拟”-“小型开关系统”要求,设计了“智能室内环境控制系统”项目。
安全、舒适、便捷、智能是一套优秀的智能家居系统所能带给我们的一个体验。智能室内环境控制系统是智能家居系统的重要的子系统。
2 教学目标
了解过程与控制可以抽象为包括输入、计算和输出三个典型环节的系统。
了解反馈是过程与控制中的重要手段,初步了解反馈对系统优化的作用。
了解系统的输入与输出可以是开关量或连续量,了解连续量可以经由阔值判断形成开关量。
3 项目分析
3.1 系统模块分析
系统可以划分为制通风系统、冷系统、制热系统、加湿系统、控制系统等功能相当于独立的模块。
3.2 系统功能分析
当设定温度>28℃,开启空调进行制热;当设定温度<24℃,开启空调进行制冷。
当设定的湿度>40%,开启加湿器进行加湿。
4 系统硬件设计
控制系统:行空板。
通风系统:风扇。
制冷系统:冷水。
制热系统:热水。
加湿系统:加湿器。
5 接线
6 编程
7 系统改进
7.1 BUG讨论
问:通过系统的运行,大家有没有发现系统有没有什么bug?
答:房间的温度即使到达了设定温度后,还在持续进行制冷。
问:这样,带来的问题是什么?
答:不节能。
答:不舒适。
问:房间的温度即使到达了设定温度后,如何解决系统持续进行制冷?
答:控制系统不知道房间的温度到达了设定值。
答:控制系统没有向制冷系统下达停止制冷的指令。
7.2 改进目标
目标1:实时告诉控制系统室内的实际温湿度。
目标2:当温湿度达到一定的范围后,自动停止制冷、制热、加湿。
7.3 改进方案
为了实现目标1,就需要增加一个温湿度传感器,实时采集房间的温湿度,并将温湿度数据发送给控制系统(行空板)。这里将采集到的温湿度发送给控制器,就是过程与控制中的反馈。
为了显示目标2,就需要在控制系统(行空板)上增加控制指令。
当室内温度低于设定温度范围,自动开启空调进行制热;当室内温度高于设定温度范围,自动开启空调进行制冷。
当室内湿度低于设定湿度范围,自动开启加湿器进行加湿;当室内适度高于设定湿度范围,自动关闭加湿器。
7.4 流程图改进
7.5 硬件改进
7.6 程序改进
8 过程与控制分析
系统工作的过程分为输入、计算和输出三个环节。通过输入指令设定房间的目标温、湿度,控制器接收输入指令,计算后生成相应的工作指令,风扇、制冷模块、加热模块、加湿器等按照工作指令开始工作,从而对房间进行制冷、加热、加湿。
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
附件
花生编程2023.01.18
不错
花生编程2023.01.18
厉害
三春牛-创客2022.12.29
与新课标结合
三春牛-创客2022.12.29
厉害厉害
Joannali2022.12.01
和新课标结合不错的思考