Système d'éclairage activé par le mouvement basé sur Intel Curie (Arduino 101)
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino 101 (Intel Curie) | 1 |
À propos de ce projet
Objectifs
- Allumer/éteindre automatiquement les lumières à la détection de pas
- Synchroniser le clignotement des lumières avec le tempo détecté (danse, tapements)
- Transmettre les lectures accéléromètre/gyroscope via USB/Bluetooth pour la détection d'événements sismiques
Dépôt GitHub
https://github.com/ckuzma/arduino-101-sketches
Sketches (programmes)
1. TapFlashTest
#include "CurieIMU.h"
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
CurieIMU.begin();
CurieIMU.attachInterrupt(eventCallback);
CurieIMU.setDetectionThreshold(CURIE_IMU_SHOCK, 1050); // 1,050g = 1050mg
CurieIMU.setDetectionDuration(CURIE_IMU_SHOCK, 75); // 75ms
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);
}
}
- Fait clignoter la LED intégrée lors de la détection d'un choc
- Utilisé pour régler la détection d'impulsion
2. TapBeatMatch
- Synchronise le clignotement de la LED intégrée au tempo de tapements sur une surface près de l'Arduino 101
- Implémente une moyenne pondérée pour atténuer le bruit
- Seuil de détection de choc ajustable
3. SeismicReader + Script Python de visualisation
- L'Arduino 101 envoie les valeurs accéléromètre et gyroscope formatées en JSON via le port série vers un ordinateur connecté
- Un script Python lit les données et les affiche sous forme de graphiques simples dans le terminal / invite de commande
- Sauvegarde les résultats en CSV exploitable dans Excel
- Compatible Python 2.x / 3.x multiplateforme
4. VibrationLighting
- Conçu à l'origine pour détecter des pas approchants et activer l'éclairage, réduit à la détection de double tape car le rapport signal/bruit n'était pas suffisant pour l'installation finale
- Une bande LED collée sous un miroir d'entrée s'allume/éteint quand on frappe deux fois le miroir
Bonus : Capteur externe (MPU-6050 / GY-521)
Une conversation m'a fait réaliser qu'il est facile d'adapter le sketch pour fonctionner avec des capteurs accéléromètre/gyroscope autonomes connectés à presque n'importe quel Arduino, puis d'utiliser CurieGraph.py pour visualiser les données. Dans l'optique de collecter des données sismiques via du matériel peu coûteux, j'ai ressorti un capteur « ITG-MTU » / « GY-521 » / « MPU-6050 » et écrit le sketch suivant. CurieGraph.py peut échouer au démarrage 1-2 fois mais fonctionne généralement à la 3e tentative.
ExternalGyroscope
#include <Wire.h>
const int MPU_addr = 0x68; // Adresse I2C pour ITG-MTU
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 keyVal) {
return "\"" + key + "\":" + String(keyVal) + "";
}
String assembleJson(String keysAndVals) {
return "{" + keysAndVals + "}";
}
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();
// temp = temp/340.00+36.53; // Conversion température en °C - NON UTILISÉ
String keyVals = jsonEncodeValue("ax", ax) + ",";
keyVals += jsonEncodeValue("ay", ay) + ",";
keyVals += jsonEncodeValue("az", az) + ",";
keyVals += jsonEncodeValue("gx", gx) + ",";
keyVals += jsonEncodeValue("gy", gy) + ",";
keyVals += jsonEncodeValue("gz", gz);
Serial.println(assembleJson(keyVals));
delay(100);
}
Code
arduino-101-sketches : Une collection de sketches pour l'Arduino 101 exploitant l'accéléromètre et le gyroscope de l'Intel Curie.
https://github.com/ckuzma/arduino-101-sketches
Processus de fabrication
- Circuits de commande moteur avancés : verrouillage, arrêt et techniques à temporisation
- Contrôler votre ventilateur de plafond avec Alexa : Guide étape par étape
- Programmer facilement les Atmel AT89 avec Arduino Uno – Guide pas à pas
- Construire une télécommande Android universelle avec Arduino, 1Sheeld et contrôle IR
- Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
- Centre de contrôle d'alimentation Arduino : N-FET, P-FET, Relais et RTC
- Contrôle IoT à Distance d'un Bras Robotique Personnalisé avec Arduino MKR1000
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée