跳到主要内容

项目 6:智能窗帘(60 分)

任务描述​

用电机、驱动模块及多种传感器(按键、遥控、语音等)设计智能卷帘。包含三个子任务,分别实现:

  1. 按键控制:按键开关控制正/反转 1 秒
  2. 遥控控制:遥控器按键长按控制正/反转(松开即停)
  3. 语音控制:语音命令控制正/反转 1 秒

鼓励用一套程序实现多个任务。

核心:电机的正反转控制,以及通过不同传感器(数字输入、模拟遥控信号、语音识别)实现同一被控对象(电机)的多样化人机交互。

所需硬件​

  • Steamania JoyKit V2(主控制器)
  • 直流电机模块
  • 电机驱动模块(L298N 或类似)
  • 按键模块(2 个按键:正转/反转)
  • 红外遥控模块
  • 语音识别模块(可选)

核心任务​

任务 1:按键控制(20 分)​

  • 按下正转按键 → 电机正转 1 秒
  • 按下反转按键 → 电机反转 1 秒

任务 2:遥控控制(20 分)​

  • 长按遥控正转按键 → 电机正转(松开即停)
  • 长按遥控反转按键 → 电机反转(松开即停)

任务 3:语音控制(20 分)​

  • 说"打开窗帘" → 电机正转 1 秒
  • 说"关闭窗帘" → 电机反转 1 秒

参考方案​

程序代码​

; 智能窗帘程序
; 实现按键、遥控和语音控制电机

; 初始化 - 第 000-005 行
000 C1 0001 0000 ; 启用按键输入
001 C2 0001 0000 ; 启用红外遥控
002 C4 0001 0000 ; 启用语音识别(可选)
003 C9 0001 0000 ; 启用电机控制
004 0E 0000 0010 ; 跳转到第 010 行的主循环

; 主循环 - 检查所有输入 - 第 010-03F 行
010 04 0001 0020 ; 如果按键按下(R01 > 0),跳转到按键控制
011 04 0002 0030 ; 如果遥控按下(R02 > 0),跳转到遥控控制
012 04 0003 0040 ; 如果检测到语音(R03 > 0),跳转到语音控制
013 D9 0000 0000 ; 停止电机(无输入)
014 0E 0000 0010 ; 跳转回第 010 行(继续监控)

; 按键控制 - 第 020-02F 行
020 04 0064 0024 ; 如果 R01 > 100(正转按键),跳转到正转
021 04 00C8 0028 ; 如果 R01 > 200(反转按键),跳转到反转
022 0E 0000 0010 ; 无效按键,返回主循环

024 D9 0001 0000 ; 电机正转
025 02 03E8 0000 ; 延时 1000 毫秒(1 秒)
026 D9 0000 0000 ; 停止电机
027 0E 0000 0010 ; 返回主循环

028 D9 0002 0000 ; 电机反转
029 02 03E8 0000 ; 延时 1000 毫秒(1 秒)
02A D9 0000 0000 ; 停止电机
02B 0E 0000 0010 ; 返回主循环

; 遥控控制 - 第 030-03F 行
030 04 000A 0034 ; 如果 R02 == 10(遥控按键 A),正转
031 04 0014 0038 ; 如果 R02 == 20(遥控按键 B),反转
032 0E 0000 0010 ; 无效遥控,返回主循环

034 D9 0001 0000 ; 电机正转(按住时)
035 04 000A 0034 ; 检查按键是否仍按住
036 02 0064 0000 ; 延时 100 毫秒
037 0E 0000 0034 ; 继续按住

038 D9 0002 0000 ; 电机反转(按住时)
039 04 0014 0038 ; 检查按键是否仍按住
03A 02 0064 0000 ; 延时 100 毫秒
03B 0E 0000 0038 ; 继续按住

; 语音控制 - 第 040-04F 行
040 04 0001 0044 ; 如果 R03 == 1(语音"打开"),正转
041 04 0002 0048 ; 如果 R03 == 2(语音"关闭"),反转
042 0E 0000 0010 ; 无语音命令,返回主循环

044 D9 0001 0000 ; 电机正转
045 02 03E8 0000 ; 延时 1000 毫秒(1 秒)
046 D9 0000 0000 ; 停止电机
047 0E 0000 0010 ; 返回主循环

048 D9 0002 0000 ; 电机反转
049 02 03E8 0000 ; 延时 1000 毫秒(1 秒)
04A D9 0000 0000 ; 停止电机
04B 0E 0000 0010 ; 返回主循环

详细解释​

初始化(第 000-005 行)​

第 000 行:C1 0001 0000

  • 启用按键输入模块
  • 物理按键控制所必需

第 001 行:C2 0001 0000

  • 启用红外遥控模块
  • 遥控操作所必需

第 002 行:C4 0001 0000

  • 启用语音识别模块
  • 语音命令控制的可选模块

第 003 行:C9 0001 0000

  • 启用电机控制模块
  • 电机操作所必需

第 004 行:0E 0000 0010

  • 跳转到第 010 行的主循环

主循环 - 输入监控(第 010-014 行)​

第 010 行:04 0001 0020

  • 条件跳转:如果按键按下(R01 > 0),跳转到按键控制

第 011 行:04 0002 0030

  • 条件跳转:如果遥控按下(R02 > 0),跳转到遥控控制

第 012 行:04 0003 0040

  • 条件跳转:如果检测到语音(R03 > 0),跳转到语音控制

第 013 行:D9 0000 0000

  • 停止电机(无活动输入)

第 014 行:0E 0000 0010

  • 继续监控循环

任务 1:按键控制(第 020-02B 行)​

第 020 行:04 0064 0024

  • 条件跳转:如果 R01 > 100(正转按键阈值)
  • 按键值 > 100 表示正转按键按下

第 021 行:04 00C8 0028

  • 条件跳转:如果 R01 > 200(反转按键阈值)
  • 按键值 > 200 表示反转按键按下

第 024 行:D9 0001 0000

  • 电机正转
  • 指令 0xD9 控制电机方向

第 025 行:02 03E8 0000

  • 延时 1000 毫秒(1 秒)
  • 按键控制的固定持续时间

第 026 行:D9 0000 0000

  • 停止电机

任务 2:遥控控制(第 030-03B 行)​

第 030 行:04 000A 0034

  • 条件跳转:如果 R02 == 10(遥控按键 A 代码)
  • 遥控器为每个按键发送特定代码

第 031 行:04 0014 0038

  • 条件跳转:如果 R02 == 20(遥控按键 B 代码)

第 034 行:D9 0001 0000

  • 按住按键时电机正转

第 035 行:04 000A 0034

  • 检查按键是否仍按住

第 036 行:02 0064 0000

  • 延时 100 毫秒

第 037 行:0E 0000 0034

  • 如果按键按住则继续

关键区别:遥控控制使用"按住并持续"逻辑 - 电机仅在按键按住时运行。

任务 3:语音控制(第 040-04B 行)​

第 040 行:04 0001 0044

  • 条件跳转:如果 R03 == 1(语音命令"打开")
  • 语音模块将命令映射到寄存器值

第 041 行:04 0002 0048

  • 条件跳转:如果 R03 == 2(语音命令"关闭")

第 044 行:D9 0001 0000

  • 电机正转 1 秒

第 045 行:02 03E8 0000

  • 延时 1000 毫秒

第 046 行:D9 0000 0000

  • 停止电机

关键概念​

1. 电机控制​

使用指令 0xD9 进行电机控制:

  • D9 0001 0000 = 正转
  • D9 0002 0000 = 反转
  • D9 0000 0000 = 停止

2. 输入优先级​

程序按顺序检查输入:

  1. 按键控制(最高优先级)
  2. 遥控控制
  3. 语音控制(最低优先级)

3. 控制模式​

  • 按键模式:固定 1 秒持续时间
  • 遥控模式:按住时持续(点动)
  • 语音模式:固定 1 秒持续时间

4. 传感器集成​

多个传感器可以控制同一执行器:

  • 按键:数字输入(R01)
  • 遥控:模拟/数字输入(R02)
  • 语音:数字输入(R03)

评估标准​

标准优秀 (5)良好 (4)合格 (3)需改进 (2)
按键控制可靠的按键操作小问题工作但有延迟按键不工作
遥控控制平滑的按住控制小延迟工作不一致遥控不工作
语音控制准确的语音识别偶尔错误识别有限语音不工作
电机控制平滑的正反转小问题操作粗糙电机工作不正常
集成所有 3 种模式无缝工作小集成问题模式分别工作集成失败
代码质量整洁、模块化代码良好结构代码能工作但混乱代码不工作

扩展挑战​

  1. 位置检测:添加限位开关检测完全打开/关闭位置
  2. 自动关闭:使用光传感器在日落时自动关闭窗帘
  3. 障碍物检测:如果检测到障碍物则停止电机(电流检测)
  4. 定时:编程在特定时间打开/关闭窗帘
  5. APP 控制:添加蓝牙/WiFi 用于智能手机控制

相关文档​