Appearance
3.11 投石机
3.11.1 造型介绍
这是一台 “语音控制发射” 的投石机,语音指令控制点舵机触发弹射开关,一键弹出投石,趣味还原古代攻城器械。

3.11.2 学习目标
掌握 WonderLLM 语音触发功能,实现一键语音触发机械动作。
了解 270° 积木舵机瞬时发力控制原理,完成趣味语音抛投项目。
3.11.3 积木搭建
3.11.4 模式切换
本造型需要用在线大模型,如果已经进入在线大模型模式即可跳过此步骤直接进入设备接线步骤,否则请参考"4.4.10 固件更新"的内容重新烧录对应固件。
3.11.5 设备接线
将 WonderLLM 模块接线插入 ESP32 主控器 接口;
将 270° 积木舵机接线插入 ESP32 主控器 接口,舵机 接线插入 S1 的 引脚处。
如图所示:

!注意事项:
第一次进行与270°积木舵机相关的课程时,我们需要先将270°舵机上的齿轮及齿轮携带的积木部分一起拆下,把以下270°舵机的复位程序上传至ESP32;接着将拆下的积木装回,然后将我们本节课的程序上传至ESP32,等待270°积木舵机转至初始位置( 135° ),此时投石装置处于水平未投掷的状态。(若之前已经使用过舵机复位程序,可跳过此步骤)


3.11.6 程序编写
(1) 程序原理图

(2) 添加扩展库
在 “扩展” 中选择 “传感器” 添加 “WonderLLM” 。

(3) 核心代码块解析
| 指令块 | 所在类别 | 功能说明 |
![]() | 向WonderLLM大模型发送自定义文本信息。 | |
![]() | 配置MCP工具调用参数,自定义工具名称、描述、执行指令与返回参数,设置调用阻塞与数据返回规则。 | |
![]() | 开启或关闭MCP开关,控制WonderLLM是否启用自定义工具调用能力。 | |
![]() | 读取MCP工具执行完成后返回的结果数据。 | |
![]() | 控制对话消息输出模式,可发送动作结束标识、开启或关闭对话内容打印输出。 | |
![]() | 控制指定接口270°舵机,在设定时长内平稳转动至目标角度,自动延时等待舵机完成动作。 | |
![]() | 布尔逻辑判断,对输入条件进行真假判定或取反运算。 | |
![]() | 自定义录入或调用文本内容,生成可参与拼接、判断、显示的字符串数据。 | |
![]() | 判断数组、元组、字典内是否存在指定元素,返回布尔结果。 | |
![]() | 根据指定键名,提取字典中对应存储的数值或文本内容。 |
(4) MCP参数配置
工具名称:self.robot.setThrow
1.工具描述: Control the ejection of the catapult. Main parameters: projectile switch: 1 for projectile, 0 for non projectile.
简述:控制弹射器的弹出。主要参数:弹丸开关:1表示弹丸,0表示非弹丸。
2.指令名称:setThrow
3.返回参数: [["switch","int","0","0","1"]]
4.是否阻塞直到调用完成:是
5.是否返回数据:否
6.功能:这段 MCP 配置是给 WonderLLM 模块定义弹射控制工具:让 WonderLLM 能下发 0-1 开关指令控制投石机执行发射 / 不发射动作,调用时程序会阻塞等待发射动作执行完毕,且无需向 WonderLLM 回传运行数据。
(5) 完整程序展示
上电初始化WonderLLM的硬件接口为 1,并启用 MCP 工具,配置 setThrow 弹射开关参数区间,然后设置270°积木舵机的初始位置;
程序循环等待语音下发 0/1 控制参数,持续接收模型反馈指令;
参数为 1 时舵机执行弹射动作,参数为 0 时舵机保持水平初始位置;
单次弹射动作执行完毕阻塞等待结束,舵机复位后重新进入语音循环检测。


- 程序源文件存放于「附录文件」目录内的「课程资料」,可前往该处下载压缩包获取。
3.11.7 程序下载

3.11.8 扩展提升
项目一:发射计数声光激励
每成功完成一次语音弹射动作自动累计发射次数,累计发射 5 次后蜂鸣器播放完整庆祝旋律,同时 RGB 彩灯循环闪烁彩色灯光,练习变量计数、条件触发声光奖励编程。
项目二:延时发射冷却机制
单次发射完成后锁定 3 秒冷却时间,冷却期内语音指令无法重复触发投石动作,避免连续弹射造成积木磕碰,掌握动作互锁延时、语音信号防抖判断逻辑。
3.11.9 技术支持与产品讨论
如果您在产品使用过程中遇到困难,欢迎您通过如下方式向我们反馈:
如果您在产品体验后有更好的创意,欢迎您进入幻尔社区将您的创意分享:











