AI智能水枪完整开发攻略

适配 Arduino 主控,离线语音识别、舵机云台俯仰/左右转向、电动水泵喷水、防误喷安全逻辑,纯本地运行无需联网,包含硬件选型、接线、完整源码、调试、拓展方案,可直接落地复刻,适合DIY、科创作品、课程设计。


一、项目整体介绍

1.1 核心功能

  1. 离线语音控制:识别中文语音指令,控制设备启停、转向、喷水,无网络也可使用;
  2. 双轴云台:水平左右旋转 + 垂直俯仰,精准调整水枪喷射角度;
  3. 电动喷水系统:微型直流水泵实现喷水、持续喷水、点喷,带延时防误触发;
  4. 安全防护:指令防抖、水泵过热保护、连续喷水时长限制;
  5. 状态反馈:串口打印运行状态,方便调试。

1.2 应用场景

智能趣味装置、电子科创比赛、单片机课程设计、居家趣味DIY,入门级嵌入式项目,代码简单易修改。

1.3 核心硬件架构

Arduino Uno R3(主控)+ 离线语音识别模块 + 双SG90舵机(云台)+ 微型抽水泵 + 继电器驱动模块(水泵隔离)+ 供电电源


二、硬件清单 & 开发成本

2.1 硬件明细(通用款,电商均可采购)

硬件名称 型号规格 数量 单价(元) 小计(元) 功能说明
主控板 Arduino Uno R3 1 42 42 程序运行、逻辑判断、IO控制
离线语音模块 JQ8900/LD3320 中文语音识别 1 28 28 采集语音,串口输出指令码
水平云台舵机 SG90 9g微型舵机 1 8 8 控制水枪左右转向
垂直云台舵机 SG90 9g微型舵机 1 8 8 控制水枪上下俯仰
微型水泵 3-6V小型抽水泵(配水管) 1 15 15 实现喷水功能
继电器模块 5V单路光耦隔离继电器 1 6 6 隔离驱动水泵,保护主控
塑料云台支架 双轴舵机云台 1 12 12 固定水枪、舵机、水管
供电电源 5V/2A USB电源/锂电池组 1 20 20 整机供电
辅助配件 杜邦线、扎带、水管、水箱 1 10 10 组装、布线、储水

2.2 总成本汇总

合计:149 元 ,预算区间:140 ~ 160 元

省钱方案:使用Arduino Nano、二手配件可压缩至110元以内。


三、硬件接线说明(关键,严格对应引脚)

3.1 全局引脚定义(代码与硬件绑定,不建议随意修改)

设备 引脚 连接 Arduino 备注
水平舵机(左右) Signal D2 VCC=5V,GND=GND
垂直舵机(上下) Signal D3 VCC=5V,GND=GND
继电器(水泵控制) IN D4 高电平吸合,水泵工作
离线语音模块 TX D5 语音模块发送 → 主控接收
离线语音模块 RX D6 主控发送 → 语音模块接收
语音/舵机公共 VCC / GND 5V / GND 所有设备必须共地

3.2 水泵+继电器接线(强电隔离,重中之重)

  1. 继电器 输入端:VCC接5V、GND接GND、IN接D4;
  2. 继电器 输出端:一端接水泵正极,一端接外部电源正极;
  3. 水泵负极统一接外部电源负极,同时和Arduino GND共地;
  4. 禁止水泵直接接Arduino IO口,电流过大容易烧毁主控。

3.3 机械结构安装

  1. 双轴云台固定在底座,水枪/出水嘴固定在云台顶端;
  2. 水管一端接入储水箱,另一端固定在出水嘴,跟随云台转动;
  3. 舵机初始角度设为90°(居中),左右转动范围:40° ~ 140°,俯仰范围:50° ~ 130°,防止机械卡死。

四、预设语音指令对照表

提前在离线语音模块上位机 录入以下中文指令,并绑定对应串口字符串指令码,波特率统一 9600

语音指令 串口指令码 执行动作
开机就绪 00 云台复位居中,水泵关闭,初始化完成
向左转 01 云台水平向左转动25°
向右转 02 云台水平向右转动25°
向上抬 03 云台垂直向上俯仰20°
向下压 04 云台垂直向下俯仰20°
云台归位 05 水平+垂直舵机全部回到中心位置
单点喷水 10 短时间喷水(0.8秒),单次点喷
持续喷水 11 水泵开启,连续喷水
停止喷水 12 关闭水泵,停止出水
全部停止 99 云台不动、水泵关闭,整机待机

五、完整 Arduino 源码(可直接烧录运行)

5.1 前置准备

  1. 打开 Arduino IDE,代码自带 Servo 库,无需额外安装;
  2. 语音模块提前烧录上方指令码,波特率 9600;
  3. 严格按照接线表接好线路,检查共地、继电器回路。

5.2 完整代码

cpp 复制代码
#include <Servo.h>

// ===================== 引脚定义 =====================
#define SERVO_H  2    // 水平舵机 左右转向
#define SERVO_V  3    // 垂直舵机 上下俯仰
#define PUMP_RELAY 4  // 水泵继电器控制引脚

// ===================== 舵机角度参数 =====================
Servo servoH;
Servo servoV;
const int h_center = 90;   // 水平中心角度
const int v_center = 90;   // 垂直中心角度
int cur_h = h_center;      // 当前水平角度
int cur_v = v_center;      // 当前垂直角度

// 角度限位(防止机械卡死)
const int h_min = 40;
const int h_max = 140;
const int v_min = 50;
const int v_max = 130;

// ===================== 喷水时间参数 & 安全保护 =====================
const int spray_once_time = 800;    // 单点喷水时长(ms)
const int max_spray_time = 5000;    // 最长连续喷水5秒(防水泵过热)
unsigned long spray_start_time = 0; // 连续喷水计时
bool pump_state = false;            // 水泵状态 false=关闭 true=开启

// ===================== 系统初始化 =====================
void setup() {
  // 引脚模式设置
  pinMode(PUMP_RELAY, OUTPUT);
  digitalWrite(PUMP_RELAY, LOW);

  // 挂载舵机
  servoH.attach(SERVO_H);
  servoV.attach(SERVO_V);

  // 云台复位居中
  servoH.write(h_center);
  servoV.write(v_center);

  // 串口初始化(与语音模块通信 9600波特率)
  Serial.begin(9600);
  Serial.println("===== AI智能水枪 启动成功 =====");
  Serial.println("等待语音指令...");
}

// ===================== 主循环:监听语音指令 =====================
void loop() {
  // 连续喷水超时保护(超过5秒自动关泵)
  if(pump_state && (millis() - spray_start_time > max_spray_time)){
    pumpStop();
    Serial.println("【安全保护】喷水超时,自动关闭水泵");
  }

  // 读取语音模块串口指令
  if(Serial.available() > 0){
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();  // 去除空格、换行符
    Serial.print("收到语音指令码:");
    Serial.println(cmd);

    // 解析并执行指令
    runCommand(cmd);
  }
}

// ===================== 云台控制函数 =====================
// 云台向左转
void hTurnLeft(){
  cur_h -= 25;
  cur_h = constrain(cur_h, h_min, h_max);
  servoH.write(cur_h);
  Serial.println("动作:云台向左转动");
  delay(150);
}

// 云台向右转
void hTurnRight(){
  cur_h += 25;
  cur_h = constrain(cur_h, h_min, h_max);
  servoH.write(cur_h);
  Serial.println("动作:云台向右转动");
  delay(150);
}

// 云台向上抬
void vTurnUp(){
  cur_v -= 20;
  cur_v = constrain(cur_v, v_min, v_max);
  servoV.write(cur_v);
  Serial.println("动作:水枪向上俯仰");
  delay(150);
}

// 云台向下压
void vTurnDown(){
  cur_v += 20;
  cur_v = constrain(cur_v, v_min, v_max);
  servoV.write(cur_v);
  Serial.println("动作:水枪向下俯仰");
  delay(150);
}

// 云台全部归位
void turretReset(){
  cur_h = h_center;
  cur_v = v_center;
  servoH.write(h_center);
  servoV.write(v_center);
  Serial.println("动作:云台已复位居中");
  delay(200);
}

// ===================== 水泵喷水控制函数 =====================
// 开启水泵
void pumpStart(){
  digitalWrite(PUMP_RELAY, HIGH);
  pump_state = true;
  spray_start_time = millis(); // 记录开始时间
  Serial.println("动作:水泵开启,开始喷水");
}

// 关闭水泵
void pumpStop(){
  digitalWrite(PUMP_RELAY, LOW);
  pump_state = false;
  Serial.println("动作:水泵关闭,停止喷水");
}

// 单点喷水(短时喷水)
void sprayOnce(){
  pumpStart();
  delay(spray_once_time);
  pumpStop();
  Serial.println("动作:单点喷水完成");
}

// ===================== 指令解析总入口 =====================
void runCommand(String cmd){
  if(cmd == "00"){
    turretReset();
    pumpStop();
  }
  else if(cmd == "01"){
    hTurnLeft();
  }
  else if(cmd == "02"){
    hTurnRight();
  }
  else if(cmd == "03"){
    vTurnUp();
  }
  else if(cmd == "04"){
    vTurnDown();
  }
  else if(cmd == "05"){
    turretReset();
  }
  else if(cmd == "10"){
    sprayOnce();
  }
  else if(cmd == "11"){
    pumpStart();
  }
  else if(cmd == "12"){
    pumpStop();
  }
  else if(cmd == "99"){
    turretReset();
    pumpStop();
    Serial.println("动作:全部设备停止,进入待机");
  }
}

六、语音模块配置教程(必做步骤)

  1. 打开语音模块配套上位机软件,选择「离线中文识别」模式;
  2. 新建词条,依次录入上文12条语音指令,绑定对应指令码(00、01、02...99);
  3. 通信参数设置:波特率 9600、数据位8、停止位1、无校验
  4. 输出格式设置:指令码 + 换行符 \n(代码依赖换行读取数据);
  5. 点击「烧录配置」,将词条写入语音模块,断电重启即可;
  6. 测试:打开Arduino串口监视器(9600波特),说出语音指令,查看是否正常接收指令码。

七、核心安全逻辑说明

  1. 舵机角度限位 :使用 constrain() 函数限制舵机转动范围,杜绝机械结构卡死、舵机烧毁;
  2. 水泵超时保护:连续喷水最长5秒,超时自动断电,防止微型水泵长时间空转/满载烧毁;
  3. 继电器电气隔离:水泵与主控物理隔离,避免电机反向电动势击穿Arduino;
  4. 指令防抖:语音模块输出带换行符,代码修剪多余字符,避免乱码误执行。

八、常见故障排查

1. 语音识别无反应

  • TX/RX 接反,互换D5、D6;
  • 所有设备未共地,重新检查GND接线;
  • 串口波特率不一致,统一改为9600。

2. 云台舵机不动/抖动

  • 舵机供电不足,单独给舵机引5V电源;
  • 机械支架卡滞,手动调整云台活动范围;
  • 信号线虚接,重新插紧杜邦线。

3. 水泵不工作

  • 检查继电器指示灯,指令触发后灯是否亮起;
  • 水泵正负极接反,调换接线;
  • 储水箱无水、水管堵塞,检查水路。

4. 喷水不停/关不掉

  • 继电器粘连,更换新继电器模块;
  • 代码 PUMP_RELAY 引脚定义错误,核对引脚。

5. 指令乱执行

  • 电机、水泵电磁干扰过大,将语音模块远离动力设备;
  • 缩短杜邦线长度,使用屏蔽线。

九、功能拓展方案(进阶修改)

  1. 增加蓝牙控制:加装HC-05蓝牙模块,实现手机APP+语音双控制;
  2. 红外遥控:叠加红外接收头,遥控器远程操控转向、喷水;
  3. 人体感应自动喷水:加装HC-SR501人体红外传感器,检测到人自动喷水;
  4. 水量检测:增加水位传感器,水箱缺水语音提示并禁止水泵工作;
  5. 声光提示:外接LED、蜂鸣器,转向/喷水时灯光、声音同步提醒;
  6. 连续转向:新增语音指令,实现云台持续左右扫动喷水。

十、项目总结

本套AI智能水枪基于离线语音+双轴云台+水泵驱动实现全功能,代码结构分层清晰、注释完整,新手可快速上手修改。整体成本低、硬件易采购、稳定性强,兼顾趣味性与技术学习价值。

代码内置多重安全保护,既适合课堂教学、科创竞赛,也适合个人DIY把玩,可在现有代码基础上自由拓展传感器、无线通信等更多智能功能。

相关推荐
逻辑君1 小时前
Foresight研究报告【20260015】
人工智能·数学建模
万粉变现经纪人1 小时前
2026最新CSDN博客质量分v6.0深度解读:从评分机制到80+实战提分指南
数据库·人工智能·深度学习·csdn·csdn博客·csdn博客质量分6.0·博客质量分
夜郎king1 小时前
告别低效单篇创作,CSDN AI 批量生成工具深度体验
大数据·人工智能·csdn ai 数字营销
星辰AI1 小时前
拒绝“祖传屎山”:用 Git Rebase 重构 Apache/GPL 许可证冲突的分支管理
人工智能·ai·语言模型
薛定猫AI1 小时前
【深度解析】Google Antigravity 2.0:多智能体协同编程、CLI 演进与工程化落地实践
人工智能
自律懒人1 小时前
AI Agent 记忆方案横评:Memoria vs OpenClaw vs MCP,让Agent记住你的3种方式
人工智能·大模型·ai编程
Allen正心正念20251 小时前
AI编程—claude code中plugin三种范围模式的配置方法
人工智能·ai编程
豆豆1 小时前
2026实测:AI生成UI设计稿后,如何优雅集成到PageAdmin CMS?(附标签替换代码)
人工智能·ui·cms·建站系统·ai工具·ai建站
梦想三三1 小时前
【NLP入门到实战】TF-IDF算法详解 + 红楼梦120回关键词提取
人工智能·python·计算机视觉