J.A.R.V.I.S. - 基于 Arduino 101 的智能家居语音助手系统
核心硬件清单
| 组件 | 数量 | 功能 |
|---|---|---|
| Arduino 101 (Intel Curie) | 1 | 主控,内置 BLE 与 6 轴 IMU |
| Arduino 4 路继电器扩展板 | 1 | 控制风扇、灯、咖啡机等高压负载 |
| Arduino GSM Shield V2 | 1 | 短信远程查询/控制 |
| HC-05 蓝牙模块 | 1 | 与 Android App 通信 |
| 电能表 + LDR 光敏电阻 | 1 | 脉冲计数测量用电量 |
| LM358N 比较器电路 | 1 | 将 LDR 模拟信号整形为数字脉冲 |
辅助工具与软件平台
- 电烙铁、热熔胶枪
- Arduino IDE - 编程 Arduino 101
- Android Studio (Java/XML) - 开发手机 App
- Firebase Realtime Database - 云端数据同步
- Unity + Vuforia SDK - 开发 AR 增强现实控制界面
- Adobe Illustrator - 设计 AR 识别图像
系统架构与工作流程
整体信号流向
- 语音输入 → Android App (Google 语音识别 API)
- 自然语言处理 → App 本地 / 云端 (CNN 深度学习模型)
- 加密指令 → 蓝牙 (HC-05) → Arduino 101
- 指令解析执行 → 控制继电器通断
- 状态反馈 → 蓝牙 → App 语音播报 / 界面更新
引脚分配
| Arduino 引脚 | 功能 | 连接目标 |
|---|---|---|
| D8 | 脉冲输入 (中断) | 电能表 LDR 计数电路输出 |
| D6 | IN1 | 风扇继电器 |
| D4 | IN2 | 灯光继电器 |
| D5 | IN3 | 咖啡机继电器 |
| D7 | IN4 | 预留/指示灯 |
| TX/RX (硬件串口1) | GSM 通信 | GSM Shield |
| 软串口 (D2/D3) | 蓝牙通信 | HC-05 |
核心功能模块
1. 无线电能监测与短信查询
利用 LDR 监测电能表红色脉冲指示灯,LM358 整形后接入 D8 中断引脚计数。每个脉冲代表固定电量(如 5Wh)。用户发送短信 "#units*" 到 GSM 模块号码,系统回复当前用电度数与费用估算。
2. AI 语音虚拟助手
- 唤醒词:"Listen Up JARVIS"
- 支持指令:开/关灯、风扇、咖啡机,查询用电,再见(全关)
- Android App 使用 Google Speech-to-Text + 自训练 CNN 进行意图识别
- 指令经加密通过蓝牙发送至 Arduino 执行
3. AR 增强现实控制
- Unity + Vuforia 开发,识别预设图像目标(贴在设备上)
- 手机摄像头对准设备,屏幕叠加虚拟按钮
- 点击虚拟按钮 → 蓝牙指令 → 继电器动作
- 需两台手机:一台运行主 App,一台运行 AR App
电能表改装步骤
- 将 LDR 贴在电能表红色脉冲 LED 上方,用黑色胶带遮光防干扰
- LDR 串联电阻组成分压电路,输出接 LM358N 比较器
- 比较器输出数字脉冲接 Arduino D8 (中断脚)
- 相线经继电器控制负载,零线直通
- GSM 模块 TX/RX 与 Arduino 硬件串口交叉连接
关键代码片段
Arduino 主程序 - 电能计数与短信回复
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);
#define PULSE_PIN 8
volatile unsigned int pulse_count = 0;
float units = 0;
unsigned int rupees = 0;
char sms_buffer[70];
byte sms_idx = 0, sms_ready = 0;
void setup() {
lcd.begin(16,2);
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(PULSE_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PULSE_PIN), countPulse, FALLING);
gsm_init();
lcd.print("System Ready");
}
void loop() {
units = rupees / 5.0;
lcd.setCursor(0,0); lcd.print("Units:"); lcd.print(units);
lcd.setCursor(0,1); lcd.print("Cost:"); lcd.print(rupees);
checkSerial(); // 处理短信指令
}
void countPulse() {
pulse_count++;
rupees = pulse_count * 5; // 假设 1 脉冲 = 5 单位费用
}
void checkSerial() {
while (Serial.available()) {
if (Serial.find("#")) {
sms_idx = 0;
while (Serial.available()) {
char c = Serial.read();
sms_buffer[sms_idx++] = c;
if (c == '*') { sms_ready = 1; break; }
}
}
}
if (sms_ready && strncmp(sms_buffer, "units", 5) == 0) {
sendSMS("Units: " + String(units) + "\nCost: " + String(rupees));
sms_ready = 0;
}
}
// GSM 初始化、发送短信函数省略...
蓝牙指令控制继电器
#define CH_FAN 6
#define CH_LIGHT 4
#define CH_COFFEE 5
#define CH_EXTRA 7
void setup() {
Serial.begin(9600); // 蓝牙通信波特率
pinMode(CH_FAN, OUTPUT); pinMode(CH_LIGHT, OUTPUT);
pinMode(CH_COFFEE, OUTPUT); pinMode(CH_EXTRA, OUTPUT);
digitalWrite(CH_FAN, HIGH); digitalWrite(CH_LIGHT, HIGH);
digitalWrite(CH_COFFEE, HIGH); digitalWrite(CH_EXTRA, HIGH); // 低电平触发
}
void loop() {
if (Serial.available()) {
char cmd = Serial.read();
switch (cmd) {
case 'c': digitalWrite(CH_LIGHT, LOW); break; // 灯开
case 'e': digitalWrite(CH_LIGHT, HIGH); break; // 灯关
case 'd': digitalWrite(CH_FAN, LOW); break; // 风扇开
case 'f': digitalWrite(CH_FAN, HIGH); break; // 风扇关
case 'k': digitalWrite(CH_COFFEE, LOW); break; // 咖啡机开
case 'g': digitalWrite(CH_COFFEE, HIGH); break; // 咖啡机关
case 'z': allOff(); break; // 全关
}
}
}
void allOff() {
digitalWrite(CH_FAN, HIGH); digitalWrite(CH_LIGHT, HIGH);
digitalWrite(CH_COFFEE, HIGH); digitalWrite(CH_EXTRA, HIGH);
// 告别闪烁动画...
}
Android App 与 AR App
- 主 App (app-release.apk):语音助手、实时用电显示、设备开关控制、Firebase 云同步
- AR App (jarvisaugmented.apk):Vuforia 识别设备贴纸,叠加虚拟按钮控制
- 两 App 需安装在不同手机上,通过蓝牙连接同一 Arduino
电路原理图
完整原理图包含:ATX 电源改装(12V 供继电器/电机, 5V 供逻辑)、继电器驱动(L293D)、LCD1602(I2C)、按键分压、LDR 计数电路、GSM/蓝牙串口。详见项目附件原理图。
项目亮点与不足
亮点
- 多模态交互:语音 + 触控 + AR + 短信
- 硬件加密通信(蓝牙配对 + 应用层加密)
- 电能脉冲计数非侵入式改装,安全合规
- 模块化代码结构,易于扩展新设备
待改进
- Arduino 101 已停产,建议迁移至 ESP32 (WiFi/BLE 双模、性能更强、成本更低)
- CNN 语音识别模型需部署到手机端,模型更新不便,建议改用云端 ASR + NLP
- AR 识别依赖特定图像目标,鲁棒性受光照/角度影响大
- 代码中大量硬编码延时,建议改用非阻塞状态机
制造工艺
- 打造低成本家庭无线传感器网络:Arduino + 树莓派 + Xively 物联网平台
- 自制家用作业书写机:Arduino + GRBL 控制的笔绘仪
- 基于 Web 控制的 DMX 灯光系统 – Arduino 主控制器
- DIY 蓝牙控制 Arduino 间谍小车
- DIY VR 滑板:用 Arduino、Google Cardboard 与蓝牙打造虚拟滑雪体验
- 自主家庭助理机器人 O'nine - ROS + Alexa 语音控制 + 机械臂 + 麦克纳姆轮全向移动
- Alexa 语音控制 Arduino 智能家居中枢:基于 Yun + PubNub + AWS Lambda 全栈实现
- 无线Arduino编程盾:HC-05蓝牙模块实现免USB线烧录
- Arduino Nano 专用 2.8 英寸 TFT 扩展板 – 320×240 SPI 显示屏
- 适用于 Arduino UNO/MEGA 的 Nixie 管时钟扩展板 NCS314 – 兼容 IN-14/IN-12 型号
- 基于 Arduino Mega 与物联网传感器的高级家庭监控系统
- Arduino Mega 2560 驱动的开源植物生长箱控制器:固件与硬件全指南