Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

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

Bewegingsgeactiveerd verlichtingssysteem met Intel Curie (Arduino 101)
  • 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

Bewegingsgeactiveerd verlichtingssysteem met Intel Curie (Arduino 101)
Bewegingsgeactiveerd verlichtingssysteem met Intel Curie (Arduino 101)
  • 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

Bewegingsgeactiveerd verlichtingssysteem met Intel Curie (Arduino 101)
Bewegingsgeactiveerd verlichtingssysteem met Intel Curie (Arduino 101)
  • 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

Bewegingsgeactiveerd verlichtingssysteem met Intel Curie (Arduino 101)
#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:

arduino-101-sketches repository

Productieproces

  1. Je plafondventilator bedienen met Alexa: Stap-voor-stap handleiding
  2. Atmel AT89-serie moeiteloos programmeren met Arduino Uno – Stapsgewijze handleiding
  3. Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
  4. Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
  5. Arduino Power Control Center: N-FET, P-FET, Relais & RTC Kit
  6. Externe IoT-besturing van een zelfgebouwde robotarm
  7. Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
  8. DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
  9. Twee Stappenmotors Sturen met Arduino Nano & Joystick – Simpele Tutorial
  10. Arduino UNO & WiFi Shield: Realtime Temperatuurweergave op het Web via Serieel
  11. Geavanceerde Motor Besturingsschakelingen: Latching, Stop, en Tijdvertraging Technieken