西斯风格智能家居入户系统:Particle Photon + Arduino 打造《星球大战》帝国进行曲欢迎仪式
核心硬件清单
- Particle Photon ×2(传感器端、触发端各一)
- Arduino UNO ×1
- Adafruit Music Maker MP3 Shield(VS1053) ×1 — 播放 MP3
- PIR 人体红外传感器 ×1
- 扬声器 3W/4Ω ×1
- LED 红/绿 ×2、220 Ω 电阻 ×2
- 面包板、跳线、Micro USB 电源、USB 数据线
软件与云服务
- Particle Web IDE / CLI
- Particle Cloud(发布/订阅消息总线)
- Arduino IDE
系统架构
传感器节点(车库) → PIR 检测到人 → Photon 发布私有事件 motion-detected 到 Particle Cloud → 触发节点(客厅) 订阅该事件 → GPIO 拉高 → Arduino + Music Maker Shield 检测到高电平 → 延时 60 秒 → 播放 SD 卡内 track001.mp3(帝国进行曲)。
分模块制作步骤
1. 传感器节点(约 10 分钟)
- Photon 插面包板,D0 接 LED+220Ω→GND(指示灯)。
- PIR:VIN→3.3V/5V(按模块规格)、GND→GND、OUT→D7。
- 上传固件:检测到 HIGH 即发布事件,LED 点亮;发布失败闪烁 10 次报警。
2. 触发节点(约 10 分钟)
- 第二个 Photon 同接 LED(D0)指示收到事件。
- D7 接跳线公头,后续连接 Music Maker Shield GPIO #7。
- VIN/GND 跳线引出,后续从 Arduino 5V/GND 取电。
- 上传固件:订阅
motion事件(MY_DEVICES仅限自有设备),收到即拉高 D7 2 秒后拉低。
3. Arduino + Music Maker Shield(约 20 分钟)
- 焊接 Music Maker Shield 排针,额外焊一排公针引出 GPIO 与 5V/GND。
- Photon D7 → Shield GPIO #7,Photon VIN/GND → Shield 5V/GND。
- 扬声器接 Shield 端子块(单声道接 LEFT 或 RIGHT 均可)。
- Micro SD 卡存放
track001.mp3(采样率 ≤ 44.1 kHz,CBR)。 - 上传 Arduino 代码:检测 GPIO #7 高电平 →
delay(60000)→playFullFile("track001.mp3")。
代码精粹
传感器 Photon 代码
int led = D0, pir = D6; bool published;
void setup(){ pinMode(led,OUTPUT); pinMode(pir,INPUT); digitalWrite(led,LOW); }
void loop(){
if(digitalRead(pir)==HIGH){
digitalWrite(led,HIGH);
published = Particle.publish("motion-detected", NULL, 60, PRIVATE);
if(!published){ for(int i=0;i<10;i++){digitalWrite(led,LOW);delay(500);digitalWrite(led,HIGH);delay(500);} }
}else digitalWrite(led,LOW);
delay(2000);
}
触发 Photon 代码
int led = D0, trigger = D7;
void soundAlarm(const char *event, const char *data){
digitalWrite(led,HIGH); digitalWrite(trigger,HIGH); delay(2000);
digitalWrite(trigger,LOW); digitalWrite(led,LOW);
}
void setup(){
Particle.subscribe("motion", soundAlarm, MY_DEVICES);
pinMode(led,OUTPUT); pinMode(trigger,OUTPUT);
}
void loop(){}
Arduino 代码
#include <SPI.h> #include <Adafruit_VS1053.h> #include <SD.h>
#define SHIELD_RESET -1 #define SHIELD_CS 7 #define SHIELD_DCS 6 #define CARDCS 4 #define DREQ 3
Adafruit_VS1053_FilePlayer musicPlayer = Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
int photonPin = 7;
void setup(){
musicPlayer.begin(); SD.begin(CARDCS); musicPlayer.setVolume(1,1);
musicPlayer.GPIO_pinMode(photonPin, INPUT);
}
void loop(){
if(musicPlayer.GPIO_digitalRead(photonPin)==HIGH){
delay(60000); musicPlayer.playFullFile("track001.mp3");
}
delay(500);
}
部署实测
- 传感器节点固定在车库货架,正对停车位。
- 触发节点 + Arduino + 音箱放置在客厅餐桌(女儿常在此等候)。
- 均由墙插 USB 充电器供电,稳定运行数月无故障。
- 女儿每次听到帝国进行曲都兴奋大喊“达斯维达回家了!”。
技术亮点
- 首次实践 Particle Cloud 发布/订阅模式,跨设备解耦极简。
- 混合异构 MCU(Photon Wi-Fi 云端 + Arduino 本地音频)协作范例。
- 私有事件防止误触发,GPIO 电平触发可靠无串扰。
制造工艺