Sistema de iluminación activado por movimiento con Intel Curie (Arduino 101)
Componentes y materiales
- Arduino 101 (Intel Curie) (x1)
Descripción del proyecto
Este proyecto explora las capacidades del acelerómetro y giroscopio integrados en el Intel Curie (Arduino 101) para tres objetivos:
- Encender/apagar luces automáticamente al detectar pasos.
- Sincronizar el parpadeo de luces con el tempo de golpes o baile cercano.
- Enviar lecturas de acelerómetro/giroscopio por USB/Bluetooth para detección de eventos sísmicos.
Repositorio GitHub
https://github.com/ckuzma/arduino-101-sketches
Sketches incluidos
1. TapFlashTest
Enciende el LED integrado al detectar un golpe (shock). Sirve para calibrar la detección de impulsos.
#include "CurieIMU.h"
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
CurieIMU.begin();
CurieIMU.attachInterrupt(eventCallback);
CurieIMU.setDetectionThreshold(CURIE_IMU_SHOCK, 1050); // 1,050 g = 1050 mg
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
Sincroniza el parpadeo del LED con el tempo de golpes sobre la mesa. Usa media ponderada para reducir ruido y umbral ajustable.
3. SeismicReader + Script Python de visualización
El Arduino 101 envía valores JSON de acelerómetro y giroscopio por Serial. Un script Python (CurieGraph.py) lee los datos, los grafica en terminal y guarda CSV para Excel. Compatible con Python 2.x/3.x multiplataforma.
4. VibrationLighting
Diseñado originalmente para detectar pasos y activar iluminación, se redujo a detección de doble golpe por relación señal/ruido. Una tira LED bajo un espejo de entrada se enciende/apaga al golpear dos veces el espejo.
Bonus: Uso con sensores externos (MPU-6050 / GY-521)
El código puede adaptarse fácilmente a sensores I2C externos (MPU-6050) conectados a casi cualquier Arduino, usando el mismo CurieGraph.py para visualizar datos. El sketch ExternalGyroscope lee el MPU-6050 por I2C y envía JSON por Serial.
#include
const int MPU_addr = 0x68;
int ax, ay, az, temp, gx, gy, gz;
void setup() {
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true);
}
String jsonEncodeValue(String key, float val) {
return "\"" + key + "\":" + String(val);
}
String assembleJson(String kv) { return "{" + kv + "}"; }
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)+","+jsonEncodeValue("ay",ay)+","+
jsonEncodeValue("az",az)+","+jsonEncodeValue("gx",gx)+","+
jsonEncodeValue("gy",gy)+","+jsonEncodeValue("gz",gz);
Serial.println(assembleJson(kv));
delay(100);
}
Código
Colección completa de sketches para Arduino 101 en el repositorio GitHub indicado.
Proceso de manufactura
- Controla tu Ventilador de Techo con Alexa: Guía Paso a Paso
- Programa fácilmente la serie Atmel AT89 con Arduino Uno – Guía paso a paso
- Mando universal Android con Arduino, 1Sheeld y control IR
- Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
- Centro de Control de Potencia Arduino: N-FET, P-FET, Relé y RTC
- Control Remoto IoT de Brazo Robótico Personalizado con Arduino MKR1000 y ThingSpeak
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Controlador de Humidificador DIY con Arduino y Relé: Configuración Segura de Alto Voltaje
- Controla Dos Motores Paso a Paso con Arduino Nano y Joystick - Tutorial Sencillo
- Arduino UNO + Shield WiFi: Visualización de Temperatura en Tiempo Real en Web vía Serial
- Circuitos avanzados de control de motor: retención, parada y técnicas de retardo