Intel Curie 加速度计驱动的体感触发灯光系统
核心硬件
- Arduino 101(内置 Intel Curie 模组,集成 6 轴 IMU 与 BLE)
项目目标
- 脚步声控灯:检测脚步冲击自动开关灯。
- 节拍同步闪烁:捕捉桌面敲击/舞蹈节奏,LED 跟随闪烁。
- 地震波记录仪:通过 USB/蓝牙实时输出加速度计/陀螺仪数据,供上位机分析。
GitHub 仓库
ckuzma/arduino-101-sketches — 包含全部示例草图。
核心示例草图
1. TapFlashTest — 单次敲击闪烁
#include "CurieIMU.h"
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
CurieIMU.begin();
CurieIMU.attachInterrupt(eventCallback);
CurieIMU.setDetectionThreshold(CURIE_IMU_SHOCK, 1050); // 1.05 g
CurieIMU.setDetectionDuration(CURIE_IMU_SHOCK, 75); // 75 ms
CurieIMU.interrupts(CURIE_IMU_SHOCK);
}
void loop() {}
static void eventCallback(void) {
if (CurieIMU.getInterruptStatus(CURIE_IMU_SHOCK)) {
digitalWrite(LED_BUILTIN, HIGH);
delay(50);
digitalWrite(LED_BUILTIN, LOW);
}
}
用于调节冲击阈值与持续时间,验证中断触发可靠性。
2. TapBeatMatch — 节拍同步闪烁
- 加权平均滤波抖动,稳定节拍估计。
- 可调冲击阈值,适应不同桌面/敲击力度。
- 板载 LED 实时跟随敲击节奏闪烁。
3. SeismicReader + Python 可视化
- Arduino 101 以 JSON 格式每 100 ms 串口输出 6 轴原始数据。
- 配套
CurieGraph.py(兼容 Python 2/3)读取串口,终端绘制简易波形,同时存 CSV 供 Excel 分析。 - 旨在证明:低成本众包地震监测网络可行。
4. VibrationLighting — 双击触发灯带
- 原设计检测脚步信噪比不足,改为双击触发。
- 灯带贴在玄关镜下,双击镜面开关灯带。
扩展:外接 MPU-6050 通用方案
为推广众包地震监测,提供兼容 MPU-6050 (GY-521) 的 ExternalGyroscope 草图,配合 CurieGraph.py 即可在任意 Arduino(UNO/Nano/Mega 等)上采集 6 轴数据并可视化。
#include <Wire.h>
const int MPU_addr = 0x68;
int16_t ax, ay, az, temp, gx, gy, gz;
String jsonEncodeValue(String key, float val) {
return "\"" + key + "\":" + String(val);
}
String assembleJson(String kv) { return "{" + kv + "}"; }
void setup() {
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true); // 唤醒
}
void loop() {
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); Wire.endTransmission(false);
Wire.requestFrom(MPU_addr, 14, true);
ax = Wire.read()<<8 | Wire.read();
ay = Wire.read()<<8 | Wire.read();
az = Wire.read()<<8 | Wire.read();
temp = Wire.read()<<8 | Wire.read();
gx = Wire.read()<<8 | Wire.read();
gy = Wire.read()<<8 | Wire.read();
gz = Wire.read()<<8 | Wire.read();
String kv = jsonEncodeValue("ax", ax) + ",";
kv += jsonEncodeValue("ay", ay) + ",";
kv += jsonEncodeValue("az", az) + ",";
kv += jsonEncodeValue("gx", gx) + ",";
kv += jsonEncodeValue("gy", gy) + ",";
kv += jsonEncodeValue("gz", gz);
Serial.println(assembleJson(kv));
delay(100);
}
若 CurieGraph.py 启动失败,多运行 2~3 次通常即可连接。
开发心得
- CurieIMU 中断机制极简,适合快速原型。
- 信噪比是脚步检测最大难点,双击/敲击更鲁棒。
- JSON + 串口/蓝牙 + Python 可视化链路通用性强,易移植。
制造工艺
- 用 Alexa 控制吊扇:分步指南
- 使用 Arduino Uno 轻松编程 Atmel AT89 系列单片机——分步指南
- 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- Arduino 电源控制中心:N-FET/P-FET/继电器/RTC 多功能扩展板
- 基于 Arduino MKR1000 与 ThingSpeak 的远程 IoT 机械臂控制系统
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- DIY Arduino 加湿器控制器:继电器安全控制高压电路
- Arduino Nano + 摇杆控制双步进电机:Visuino 图形化教程
- Arduino UNO + WiFi 盾板:串口实时推送温度到网页绘图
- Arduino 网页控制灯泡:PHPoC Shield 实现 WebSocket 实时控制
- 高级电机控制电路:自锁、停止与延时技术