修远天窗控制系统——子项目一:开合自如的天窗
本帖最后由 DI玩 于 2025-2-3 11:20 编辑K10信息科技真实情境案例
修远智慧体验中心天窗控制系统原型——子项目一:开合自如的天窗
本项目为DF创客社区“义教‘信息科技’教学活动实践案例征集活动”的参赛作品,同时也是吴俊杰老师发起的创客二十八星宿系列课程中《自制可编程数字化实验系统》的组成部分,遵循创客二十八星宿系列课程相关协议。
在一个无采光、无通风、无给排水的三无场所种植花木?这该不是什么火星任务吧?2024年12月12日,我和小伙伴们参加了翰香小学举办的一个项目化研修活动,面临的正是这样的挑战。
翰香小学是一所创办于1906年的百年老校,坐落于月湖之滨,毗邻城隍庙与天封塔。新建的校舍位于莲桥第,为了与周围历史街区融合,建筑风格透有几许江南古风,比较有代表性的做法就是采用了双坡斜屋顶设计。
学校巧妙地将双坡斜屋顶阁楼改造为“修远智慧体验中心”。这个空间面积堪比篮球场,整体设计现代感十足,还特别设置了融合非遗元素的皮影专区。然而,由于阁楼本身没有窗户,采光和通风成为了一大难题。于是学校另辟蹊径,将其转化为一个科创体验项目,大胆尝试在密闭空间内种植花木,邀请师生共同参与,探索解决密闭空间环境问题的创新方案。
看起来有点“没苦硬吃”的意思,但细品,却是化劣势为优势,为孩子们觅得了一个颇具挑战性的真实任务情境!
参加项目研修的老师们率先“试水”,分为开天、辟地、甘霖三个小组,分别负责解决采光、给水和排水问题。我所在的开天小组负责破解采光问题。经过头脑风暴,我们提出了三种可行性方案:
光导纤维技术:利用光纤将自然光引入室内,实现高效采光。太阳能转换系统:通过太阳能电池板将光能转化为电能,驱动人工光源照明。
智能天窗系统:安装可自动调节的智能天窗,根据光线强度实时调整开合,优化采光效果。
三种方式各有优劣,都值得实践,但是因为手头器材局限,加之天窗还能解决通风问题,我们组基于掌控板做了个智能天窗的原型。
在项目筹备阶段,广济PCDC的小研究员们便提前介入,对该项目表现出了浓厚的兴趣。鉴于此,我考虑基于行空板K10,结合浙教版信息科技六年级下册第二单元“控制系统中的运算”内容,对该单元进行项目化学习的改造。
浙教版信息科技六年级下册第二单元目录
改造后的子项目及具体任务
我们可以将单元知识与修远智慧体验中心的智能天窗项目紧密结合,以该项目为载体,引导学生在解决实际问题的过程中,深入学习和应用“控制系统中的运算”这一核心知识。同时,借助智能天窗项目,配合兼具易用性和低成本的行空板K10(可刷入MicroPython固件,兼容浙教版代码教学),进一步拓展人工智能在控制系统中的应用教学,为学生提供从理论到实践的完整学习体验。
[*]目标:掌握天窗系统的基本结构,体验用开关量控制天窗。
[*]任务:
[*]搭建天窗系统原型:动手组装天窗系统的结构,了解其组成部件和工作原理,为后续控制逻辑的学习打下基础。
[*]按钮控制实验:通过按钮控制天窗的开合,初步体验开关量在控制系统中的应用。
[*]了解开关量作用:体验开关量在控制系统中的重要性,如实现设备的启动、停止、开合等基本功能,为后续复杂控制逻辑的学习奠定理论基础。
激光切割结构件
需要说明的是,修远智慧体验中心的激光切割图纸是我们PCDC的小研究员李修远同学设计的(没错,和翰香小学修远智慧体验中心同名,路漫漫其修远兮……),为师只是在他设计的屋顶上开了个天窗。
制作天窗铰链
铰链采用剥掉外皮的两段0.5mm的单芯导线制作
将两段导线(每段约3cm)折成U型
穿过天窗和屋顶上的定位孔
捆扎固定,但要留出一定旷量(以天窗可自如活动为准)
安装限位器
目前的结构状态下,天窗是会耷拉下来的,还需要给它安装一个限位器。
取一小块激光切割的边角料
点白胶,粘合在屋顶上(天窗下沿位置)
组装与细节完善
两片屋顶主要靠一个卡榫结合,所以屋脊上要涂抹白胶加固。
固化后白胶会变透明,不影响外观。
再取一些边角料,给底盘加上脚垫。
为什么要加脚垫呢?因为要给拓展板固定螺丝预留高度,否则底板放不平。
机电安装
这是项目所需的硬件清单:
行空板 K10 ×1
https://www.dfrobot.com.cn/goods-4014.html
Gravity: 水分传感器(Water Sensor)×1
https://www.dfrobot.com.cn/goods-564.html
DMS-MG90 金属9g舵机 (1.8Kg) ×1
https://www.dfrobot.com.cn/goods-1174.html
micro:bit掌控IO扩展板 ×1
https://www.dfrobot.com.cn/goods-1966.html
拓展板是带亚克力背板的,需要拧掉4颗螺丝,卸掉背板。
然后固定在底板的定位孔上
为了让舵机可以平稳地举起天窗,我们可以用回形针改装下舵盘,优化受力点。
如图固定和截取回形针
为舵盘增加一个横向的延长臂
用热熔胶将舵机安装在天窗一侧合适位置。
参考线路连接图,安装舵机和水分传感器
P0——水分传感器
P1——舵机
行空板屏幕面向拓展板的micro:bit标识侧插入
用A、B键控制天窗
K10板载的按键是两个微动开关,其特性为按下时输出高电平,松开时输出低电平。从控制系统的角度来看,使用A键控制天窗打开,B键控制天窗关闭是较为简单的实现方式。这种方式可以避免单键控制时需要额外的状态变量来判断天窗的当前状态,从而简化控制逻辑。
我们先用Mind+的图形化进行编程,后面会提供Python样例代码匹配浙教版教材。
点击Mind+扩展按钮,添加K10和舵机模块
A、B键控制天窗的样例代码
效果演示
天窗开合细节特写
A键单键控制天窗
如果希望用A键(或B键)单独控制天窗的开合,则需要在算法中增加一个状态变量,用于记录天窗的当前状态(打开或关闭)。每次按下A键时,程序根据状态变量的值切换天窗的状态,从而实现单键控制。
下面是代码和操作演示
A键单键控制的样例代码
效果演示
用Python编程实现
对于浙教版这样使用Python代码的教材,K10在刷入MicroPython固件后也可以用于配套教学。
上图是MicroPython固件刷写工具界面,详细步骤可查阅K10官方教程。
以下提供两种控制方式的样例代码和实测动画# 修远智慧体验中心-A键单键控制天窗
from unihiker_k10 import screen, button, servo
import time
# 初始化屏幕
screen.init(dir=2)
# 初始化按钮A
bt_a = button(button.a)# 初始化板载按键传感器 A
# 初始化舵机
s1 = servo(1)# 将舵机连接到P1引脚
# 初始化天窗状态,初始状态为关闭
sunroof_open = False
def open_sunroof():#定义开天窗函数
s1.angle(value=110)# 舵机转动到110°
screen.clear()# 清除屏幕显示
screen.draw_text(text="Sunroof Open", line=1, font_size=24, color=0xFFFFFF)# 显示“Sunroof Open”
screen.show_draw()# 显示绘制的内容
def close_sunroof():#定义关天窗函数
s1.angle(value=30)# 舵机转动到30°
screen.clear()# 清除屏幕显示
screen.draw_text(text="Sunroof Closed", line=1, font_size=24, color=0xFFFFFF)# 显示“Sunroof Closed”
screen.show_draw()# 显示绘制的内容
while True:
# 检测按钮A是否被按下
if bt_a.status() == 1:
# 切换天窗状态
if sunroof_open:
close_sunroof()
else:
open_sunroof()
sunroof_open = not sunroof_open
# 等待按钮A释放
while bt_a.status() == 1:
time.sleep(0.1)
time.sleep(0.1)# 主循环间隔
# 修远智慧体验中心-A、B键控制天窗
from unihiker_k10 import screen, button, servo
import time
# 初始化屏幕
screen.init(dir=2)
# 初始化按钮
bt_a = button(button.a)# 初始化板载按键传感器 A
bt_b = button(button.b)# 初始化板载按键传感器 B
# 初始化舵机
s1 = servo(1)# 将舵机连接到P1引脚
def open_sunroof(): #定义开天窗函数
s1.angle(value=110)
screen.clear()
screen.draw_text(text="open", line=1, font_size=48, color=0xFFFFFF)
screen.show_draw()
def close_sunroof(): #定义关天窗函数
s1.angle(value=30)
screen.clear()
screen.draw_text(text="close", line=1, font_size=48, color=0xFFFFFF)
screen.show_draw()
while True:
# 检测按钮A是否被按下
if bt_a.status() == 1:
open_sunroof()
while bt_a.status() == 1:# 等待按钮释放
time.sleep(0.1)
# 检测按钮B是否被按下
if bt_b.status() == 1:
close_sunroof()
while bt_b.status() == 1:# 等待按钮释放
time.sleep(0.1)
time.sleep(0.1)# 主循环间隔
自问自答
1.为什么样例代码大量采用函数封装?
在样例代码设计中,考虑到一线大班教学的实际情况,我们将舵机控制、屏幕显示等功能封装成函数。这种设计使学生只需关注主循环的逻辑部分,而无需深入理解底层实现细节。
这种“低代码”设计尤其适合MicroPython代码教学,因为对于大班课堂上的小学生来说,能够理解和操作主循环的代码已属不易,同时也为学有余力的同学留了向上攀爬的梯子。就像使用Python第三方库时,用户无需了解库内部的算法一样,这种封装方式降低了学习门槛,是AI时代普适教学的务实路径。
2.叠加激光切割、结构搭建,课时哪里来?
坦率而言,要将这样的项目真正落地,任课教师需要具备一定的教育情怀和内驱力,灵活挖掘教学时间和空间。一个解决真实问题的项目,本质上一定是跨学科的,而跨学科项目往往无法在日常有限的学科课时内完成。
然而,我们仍然可以因地制宜,灵活调整。例如,在结构设计上,如果没有激光切割机,可以用牛奶盒等日常材料替代;同时,可以与劳动课、美术课教师协作,整合教学内容,合并课时,共同推进项目。这种“看羹吃饭”的方式,既解决了课时不足的问题,也让项目化学习更具可行性。
3.为什么这里不提及开关量?
基于一线教学经验,在项目化学习中,小学生更倾向于先通过实践和体验产生兴趣,之后再逐步引入理论知识。学生通过按下按钮(A、B键)来控制天窗的开关,实际上已经在体验“开关量”的作用(即通过一个简单的“开”或“关”信号控制设备)。此时,学生不需要知道“开关量”这个专业名词,而是通过实践感受到“按下按钮→天窗动作”的因果关系。关于开关量的知识点将安排在后续的子项目三《用数据掌控天窗》中,与连续量一起讲解,这样更符合学生的学习规律和认知特点。
老师,激光切割源文件分享一下,谢谢!13601970671@163.com
页:
[1]