247浏览
查看: 247|回复: 1

[项目] 基于行空板K10与红外接近开关的小智AI智能问答系统

[复制链接]
本帖最后由 云天 于 2026-1-4 20:16 编辑

【项目概述】
       本项目将小智AI开源代码部署到DFRobot行空板K10开发板上,通过红外接近开关传感器实现人走近自动唤醒功能,并针对小学生“十万个为什么”问答场景进行定制化开发。系统能够在检测到有人接近时,自动播报自我介绍并进入聆听状态,结合知识库提供准确的知识问答服务。
【项目亮点】
       1.实现走近自动唤醒:集成距离传感器,当有人靠近设备时自动触发唤醒流程,无需依赖传统的语音唤醒词,交互更加自然便捷。
       2.触发距离灵活可调:采用红外接近开关传感器,检测距离可在10~80cm范围内自由调节,以适应不同场景与安装需求。
       3.基于知识库的精准问答:通过为小智AI配置专属知识库,使其在回答问题时能够依据经过审核的内容进行响应,大幅提升答案的准确性与可控性,有效避免AI幻觉。
【硬件准备与连接】
       1.硬件清单:
       (1)DFRobot行空板K10 ×1
基于行空板K10与红外接近开关的小智AI智能问答系统图9

       (2)可调红外接近开关传感器 ×1
基于行空板K10与红外接近开关的小智AI智能问答系统图8

       2.接线方式:
  1. 红外接近开关传感器     行空板K10
  2. VCC(棕色)        →          3.3V
  3. GND(蓝色)       →          GND
  4. OUT(黑色)        →          P0 (GPIO1)
复制代码
基于行空板K10与红外接近开关的小智AI智能问答系统图11

      3.传感器调节:
       将传感器安装在设备合适位置,对准检测区域,通过传感器后部旋钮调节触发距离(建议30-50cm),当物体进入检测范围时,传感器输出低电平(0V)
【软件开发环境搭建步骤】
       步骤1:下载ESP-IDF开发框架
       首先进入:https://dl.espressif.com/dl/esp-idf/,乐鑫官方下载离线安装包5.5.2版本,我下载的是5.5.1。
基于行空板K10与红外接近开关的小智AI智能问答系统图1

       步骤2:安装环境
       自行选择需要安装的版本,双击EXE文件开始安装
       步骤3:测试是否安装成功


基于行空板K10与红外接近开关的小智AI智能问答系统图2

       运行ESP-IDF5.5.1 PowerShell,当出现idf.py build字样就是安装成功了,可以编译固件了。

【小智AI代码获取与配置步骤】
       步骤1:获取源代码
       进入虾哥代码主页:https://github.com/78/xiaozhi-esp32,点击Code - Download ZIP。
       (我采用的方式:电脑装了git的话,建议还是用命令git clone https://github.com/78/xiaozhi-esp32
       步骤2:配置项目参数
       1.下载完成后解压到任意目录备用
       进入终端,打开IDF 5.5.1或者双击桌面的ESP IDF5.5.1 Powershell

基于行空板K10与红外接近开关的小智AI智能问答系统图10


       输入 刚刚解压的目录
  1. cd D:\360Downloads\xiaozhi-esp32-2.0.5
复制代码
      2、设置芯片类型
       默认的编译芯片是ESP32的,所以我们用的是DFrobot的行空板K10板子是S3的,一定要输入以下命令把芯片设置为S3
  1. idf.py set-target esp32s3
复制代码
      3、更换编译板子类型

默认编译出的固件是面包板的,需要更换DFRobot 行空板K10 板子,需要输入idf.py menuconfig
基于行空板K10与红外接近开关的小智AI智能问答系统图3

       进入Xiaozhi Assistant选项


基于行空板K10与红外接近开关的小智AI智能问答系统图4

       选择需要编译的板子固件后按键盘的‘S’键保存 然后Esc退出menuconfig
       步骤3:配置小智AI平台
       1.访问 https://xiaozhi.me
       在"角色介绍"中填入:
  1. 我是小智,我精通生活常识、天文地理、科学知识等,我能回答你想知道的各种问题。
复制代码
基于行空板K10与红外接近开关的小智AI智能问答系统图5

       2.在"知识库"中上传"十万个为什么"相关文档:
       格式支持:txt、pdf、word
       建议按类别分多个文档上传
       确保知识覆盖全面、准确
基于行空板K10与红外接近开关的小智AI智能问答系统图6




       3.关联知识库
       在智能体的配置角色里,展开【MCP设置】,勾选官方服务里的知识库功能,然后在下方知识库列表里,选择已创建的知识库,点击保存即可使用。


基于行空板K10与红外接近开关的小智AI智能问答系统图7

基于行空板K10与红外接近开关的小智AI智能问答系统图16


       相关配置文档:https://ai.feishu.cn/wiki/QS5ewZHh0iOEI0kdbjncmtY1nFg
【核心代码修改】
       修改文件:main/Application.cc
       在原代码基础上添加接近传感器检测逻辑:
  1. // 修改MainEventLoop函数
  2. void Application::MainEventLoop() {
  3.     uint32_t last_proximity_check_time = 0;
  4.     const uint32_t PROXIMITY_CHECK_INTERVAL_MS = 100; // 每100ms检查一次
  5. while (true) {
  6.         auto bits = xEventGroupWaitBits(event_group_, MAIN_EVENT_SCHEDULE |
  7.             MAIN_EVENT_SEND_AUDIO |
  8.             MAIN_EVENT_WAKE_WORD_DETECTED |
  9.             MAIN_EVENT_VAD_CHANGE |
  10.             MAIN_EVENT_CLOCK_TICK |
  11.             MAIN_EVENT_ERROR, pdTRUE, pdFALSE, portMAX_DELAY);
  12.         // ... 原有事件处理代码保持不变 ...
  13.         if (bits & MAIN_EVENT_CLOCK_TICK) {
  14.             clock_ticks_++;
  15.             auto display = Board::GetInstance().GetDisplay();
  16.             display->UpdateStatusBar();
  17.             // 只在空闲状态下检查接近传感器
  18.             if (device_state_ == kDeviceStateIdle) {
  19.                 uint32_t current_time = xTaskGetTickCount() * portTICK_PERIOD_MS;
  20.                 // 定时检查传感器(每100ms)
  21.                 if (current_time - last_proximity_check_time >= PROXIMITY_CHECK_INTERVAL_MS) {
  22.                     last_proximity_check_time = current_time;
  23.                     // 读取传感器状态(低电平触发)
  24.                     bool sensor_triggered = (gpio_get_level(GPIO_NUM_1) == 0);
  25.                     if (sensor_triggered) {
  26.                            ESP_LOGI(TAG, "检测到有人接近,开始唤醒流程");
  27.                             // 显示提示信息
  28.                             display->ShowNotification("有人接近");
  29.                             // 物体接近,开始监听
  30.                              std::string txt = "你好";
  31.                              WakeWordInvoke(txt);                       
  32.                         }
  33.                     }
  34.                 }
  35.             if (clock_ticks_ % 10 == 0) {
  36.                 SystemInfo::PrintHeapStats();
  37.             }
  38.         }
  39.     }
  40. }
复制代码

【编译与烧录步骤】
       步骤1:编译项目
  1. # 编译项目
  2. idf.py build
复制代码
       步骤2:烧录到行空板
  1. # 设置烧录端口
  2. idf.py -p COM55 flash  # COM55替换为实际端口
复制代码
【功能测试与调试】
       语音唤醒测试:
       走近设备30-50cm范围内
       设备应自动播报:"你好!我是小智..."
       LED指示灯变为绿色(监听状态)
       知识问答测试:
       提问:"为什么天空是蓝色的?"
       设备应从知识库中检索并回答
       观察回答准确性和响应时间
【外壳制作安装】
基于行空板K10与红外接近开关的小智AI智能问答系统图12

激光切割外壳
基于行空板K10与红外接近开关的小智AI智能问答系统图13


基于行空板K10与红外接近开关的小智AI智能问答系统图14


基于行空板K10与红外接近开关的小智AI智能问答系统图15

【演示视频】


SunJanuary-202601047921..png

zoey不种土豆  管理员

发表于 3 天前

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail