旧物重生:拆解刮胡刀,打造小智AI语音控制的智能警报器
一、项目缘起
家里有个旧电动刮胡刀,但拆开一看,里面的直流电机和电池还挺好。正好还有个旋转就能发光发声的玩具,结构简单,转起来又闪又响。于是我想:能不能把这些“废品”组合起来,做一个能用语音控制的警报装置?说“有危险”就启动,说“危险解除”就停止。
更进一步,我把它接入 小智AI(xiaozhi.me),通过 MCP(模型上下文协议) 让语音助手直接调用硬件工具。这样不仅好玩,还能作为以后项目的基础——比如加上远距离超声波传感器,放在施工场所提醒路人,尤其是晚上和视障人士。
这个项目成本极低,核心只用了 ESP32-C3 和 DFRobot 继电器模块,其余全是旧物利用。下面分享完整制作过程。

二、材料清单
| 名称 | 数量 | 备注 |
|---|---|---|
| ESP32-C3 开发板 | 1 | 支持 WiFi,Arduino IDE 可编程 |
| DFRobot 继电器模块 DFR0017 | 1 | 控制电机通断,250VAC/10A |
| 旧电动刮胡刀 | 1 | 拆出直流电机和电池 |
| 旋转发光发声玩具 | 1 | 固定在电机轴上 |
| 杜邦线 | 若干 | 公对母、母对母 |
| 5V 电源 | 1 | 给 ESP32 和继电器供电 |
| 导线、热熔胶、扎带 | 若干 | 固定与连接 |
继电器模块购买链接:DFRobot DFR0017

三、硬件连接
1. ESP32-C3 与继电器模块
| ESP32-C3 | 继电器模块 | 说明 |
|---|---|---|
| GPIO0 | 信号端(绿线) | 高电平吸合 |
| 5V | VCC(红线) | 供电 |
| GND | GND(黑线) | 共地 |
2. 继电器与刮胡刀电机电路
继电器输出端使用 COM 和 NO(常开):
继电器 COM → 电源正极(刮胡刀电池或5V)
继电器 NO → 电机正极
电源负极 → 电机负极


⚠️ 注意:ESP32-C3 的 IO 口不能直接驱动电机,必须通过继电器隔离。电机供电建议使用原电池或独立 3~5V 电源,避免干扰主控。
3. 整体接线示意
ESP32-C3 继电器模块 刮胡刀电机电路
───────── ────────── ──────────────
GPIO0 ────────────→ 信号端(绿)
5V ────────────→ VCC(红)
GND ────────────→ GND(黑)
COM ──────────────→ 电源正极
NO ──────────────→ 电机正极
电源负极 ──→ 电机负极
四、软件准备
- 安装 Arduino IDE,添加 ESP32 开发板支持(ESP32 by Espressif)。
- 安装 xiaozhi-mcp 库(小智官方库,Arduino ide 库管理 获取)。
- 打开代码,修改 WiFi 和 MCP 接入点信息。
核心配置:
const char* WIFI_SSID = "****";
const char* WIFI_PASS = "*****";
const char* MCP_ENDPOINT = "wss://api.xiaozhi.me/mcp/?token=你的token";
#define RELAY_PIN 0 // ESP32-C3 GPIO0
五、代码解析
完整代码已上传至附件,这里讲解关键部分。
1. 继电器控制函数
void controlAlarm(bool state) {
if (state) {
digitalWrite(RELAY_PIN, HIGH); // 继电器吸合,电机转动
alarmActive = true;
Serial.println("[警报] 已启动");
} else {
digitalWrite(RELAY_PIN, LOW); // 继电器释放,电机停止
alarmActive = false;
Serial.println("[警报] 已停止");
}
}
2. 注册 MCP 工具
这是与小智AI交互的核心。我们注册一个 alarm_control 工具,让 AI 根据用户语音调用。
mcpClient.registerTool(
"alarm_control",
"控制警报装置。当用户说'有危险''开始警报''启动警报'时调用此工具启动警报;当用户说'危险解除''停止警报''关闭警报'时调用此工具停止警报。",
"{\"properties\":{\"action\":{\"title\":\"操作\",\"type\":\"string\",\"enum\":[\"start\",\"stop\"]}},\"required\":[\"action\"],\"type\":\"object\"}",
[](const String& args) {
DynamicJsonDocument doc(256);
deserializeJson(doc, args);
String action = doc["action"].as<String>();
if (action == "start") {
controlAlarm(true);
return WebSocketMCP::ToolResponse("{\"success\":true,\"message\":\"警报已启动\"}");
} else if (action == "stop") {
controlAlarm(false);
return WebSocketMCP::ToolResponse("{\"success\":true,\"message\":\"警报已停止\"}");
}
return WebSocketMCP::ToolResponse("{\"success\":false}", true);
}
);
同时注册 alarm_status 用于查询状态。
3. 小智后台系统提示词
登录 xiaozhi.me,在智能体设置中添加:
你是一个安全警报助手,连接了可发出声光警报的装置。
当用户提到"有危险""开始警报""启动警报"时,调用 alarm_control,action=start。
当用户提到"危险解除""停止警报""关闭警报"时,调用 alarm_control,action=stop。
执行后简短确认。

六、组装与测试
- 拆解刮胡刀:取出直流电机和电池,保留电机轴上的偏心轮或连接结构。
- 固定玩具:将旋转发光发声玩具用热熔胶固定在电机轴上,确保旋转平衡。
- 连接电路:按上述接线图连接 ESP32-C3、继电器和电机。
- 上传程序:Arduino IDE 选择 ESP32-C3 Dev Module,上传代码。
- 串口调试:打开串口监视器(115200),确认 WiFi 和 MCP 连接成功,工具注册完成。
- 手动测试:串口输入
start和stop,观察继电器吸合/释放,电机转动/停止。 - 语音测试:唤醒小智设备,说“有危险”,警报启动;说“危险解除”,警报停止。
七、效果展示
- 语音“有危险” → 继电器“咔嗒”吸合 → 电机带动玩具旋转 → 发出闪烁灯光和警报声。
- 语音“危险解除” → 继电器释放 → 电机停止 → 声光消失。
- 电机与玩具需加强固定
八、未来拓展:施工场所智能预警
这个项目只是起点。我们可以在此基础上加入 远距离超声波传感器(如 DFRobot URM07-UART 低功耗超声波测距模块,有效测量距离 7.5 米),做成施工场所的智能安全卫士:
- 自动检测:超声波实时监测前方行人,当距离小于设定阈值(如 3 米)时,自动触发警报。
- 夜间增强:加光敏电阻,天黑后自动提高警报音量或增加灯光闪烁频率。
- 视障人士友好:通过语音模块播报“前方施工,请注意安全”,或使用不同频率的蜂鸣声提示距离。
- 多传感器融合:可再加红外人体感应,减少误报。
升级后的逻辑:
超声波测距 → 距离 < 阈值 → 触发继电器 → 声光警报
→ 距离 > 阈值 → 停止警报
代码框架只需在 loop() 中读取超声波数据,并调用 controlAlarm() 即可。MCP 工具也可以扩展为 set_threshold、get_distance 等,让语音助手随时调整参数。
九、总结
这个项目把旧刮胡刀和玩具变成了语音控制的智能警报器,成本几乎为零,却打通了“语音→AI→硬件”的完整链路。更重要的是,它为我们提供了一个可扩展的平台:加上超声波传感器,就能守护施工路段的安全,尤其在夜间和视障人士出行场景中发挥价值。
创客的乐趣就在于此——用双手让旧物重生,用代码让想法落地。希望这个项目能给你带来灵感,也欢迎在 DF创客社区一起交流改进!
完整代码:见附件 alarm_control.ino
小智AI接入:https://xiaozhi.me
DFRobot继电器模块:https://www.dfrobot.com.cn/goods-1370.html
如果你也做了类似项目,欢迎在评论区晒图交流!



