Bewegingsgeactiveerd verlichtingssysteem met Intel Curie (Arduino 101)
Onderdelen en benodigdheden
| Arduino 101 (Intel Curie) | × | 1 |
Over dit project
Doelstellingen
- Lichten automatisch in- en uitschakelen bij detectie van voetstappen
- Knipperen van lichten synchroniseren met de gedetecteerde tempo van dansen/tikken in de buurt
- Versnellingsmeter/gyroscoop uitlezen via USB/Bluetooth voor detectie van seismische gebeurtenissen
GitHub Repository
github.com/ckuzma/arduino-101-sketches
Sketches
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);
}
}
- Knippert de onboard LED bij detectie van een tik
- Gebruikt om drempelwaarden voor impulsdetectie te bepalen
TapBeatMatch
- Synchroniseert knipperen van onboard LED met tempo van tikken op tafeloppervlak bij de Arduino 101
- Geïmplementeerd gewogen gemiddelde om ruis te reduceren
- Instelbare schokdetectiedrempel
SeismicReader + Python Visualisatiescript
- Arduino 101 stuurt JSON-geformatteerde versnellingsmeter en gyroscoop waarden via Serial naar een aangesloten computer
- Klein Python-script leest data en graficeert in terminal/command prompt
- Resultaten worden opgeslagen in CSV voor Excel-analyse
- Multiplatform Python 2.x / 3.x compatibel
VibrationLighting
- Oorspronkelijk ontworpen om naderende voetstappen te detecteren en verlichting te activeren, teruggeschaald tot dubbele-tikdetectie omdat signaal-ruisverhouding niet schoon genoeg was voor de installatie
- LED-strip onder de entree-spiegel schakelt in/uit bij tweemaal achter elkaar kloppen op de spiegel
Bonus: Externe gyroscoop (MPU-6050 / GY-521)
Een gesprek met Bogdan deed me beseffen dat de sketch gemakkelijk aangepast kan worden voor standalone versnellingsmeter/gyroscoop sensoren (zoals MPU-6050) aangesloten op bijna elke Arduino, en daarna CurieGraph.py gebruikt kan worden voor visualisatie. Omdat het doel is om te bewijzen dat seismische data massaal gecrowdsourced kan worden zonder gespecialiseerde apparatuur, heb ik een MPU-6050 sensorboard gebruikt en de volgende sketch geschreven.
ExternalGyroscope
#include <Wire.h>
const int MPU_addr = 0x68; // I2C adres voor ITG-MTU / MPU-6050
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();
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);
}
Let op: CurieGraph.py kan een paar keer falen bij opstarten, maar vangt meestal bij de derde poging correct aan.
Code
De complete verzameling sketches voor Arduino 101, die gebruikmaakt van de Intel Curie's versnellingsmeters en gyroscopen, vind je op GitHub:
Productieproces
- Je plafondventilator bedienen met Alexa: Stap-voor-stap handleiding
- Atmel AT89-serie moeiteloos programmeren met Arduino Uno – Stapsgewijze handleiding
- Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
- Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
- Arduino Power Control Center: N-FET, P-FET, Relais & RTC Kit
- Externe IoT-besturing van een zelfgebouwde robotarm
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
- Twee Stappenmotors Sturen met Arduino Nano & Joystick – Simpele Tutorial
- Arduino UNO & WiFi Shield: Realtime Temperatuurweergave op het Web via Serieel
- Geavanceerde Motor Besturingsschakelingen: Latching, Stop, en Tijdvertraging Technieken