detection_chute.ino
En caída libre la norma del vector de aceleración se desploma por debajo de 0,3 g: este sketch la vigila a 200 Hz y enciende el LED rojo tres segundos tras el evento. El detector de paquete caído, sensor arrancado o aviso de persona caída.
Hardware
Una Arduino Nicla Sense ME (nRF52832, solo BLE) con hub Bosch BHI260AP, BMM150, BMP390, BME688, LED RGB en driver I2C y cargador LiPo. La placa sola. Prueba: soltarla desde 30 cm sobre un cojín: la norma baja de 0,3 g durante la caída.
Cableado
Sin cableado. Fijar bien la placa si el objetivo es detectar la caída de un objeto, no la suya.
Funcionamiento
El bucle de 5 ms muestrea lo bastante rápido para caídas de menos de un segundo; el umbral de 0,3 g evita falsos positivos en movimiento normal. El LED RGB (IS31FL3194) da la señal visual.
Ejecución
Programación desde Arduino IDE (core ArduinoCore-mbed); librerías Arduino_BHY2 y Nicla_System; USB por puente serie.
Variantes
Notificar la caída por BLE a un reloj, cruzar con la presión (detectar el impacto), o registrar las marcas de tiempo de los golpes en memoria para un informe de transporte.
detection_chute.ino
// Détection de chute : la norme d'accélération tombe sous 0,3 g
// en chute libre. Usage : colis fragile, capteur tombé au sol,
// alerte homme-couché. La LED RVB passe au rouge sur événement.
#include "Arduino_BHY2.h"
#include "Nicla_System.h"
SensorAccel accel(0);
unsigned long derniereChute = 0;
void setup() {
Serial.begin(115200);
nicla::begin();
nicla::leds.begin();
BHY2.begin();
accel.begin();
BHY2.update();
}
void loop() {
BHY2.update();
if (accel.checkNewData()) {
float n = sqrtf(accel.x() * accel.x() +
accel.y() * accel.y() +
accel.z() * accel.z());
if (n < 0.3) { // quasi-impesanteur = chute
derniereChute = millis();
Serial.print("CHUTE detectee (norme=");
Serial.print(n);
Serial.println(" g)");
}
}
// Signal visuel 3 s après l'événement
if (millis() - derniereChute < 3000) {
nicla::leds.setColor(red);
} else {
nicla::leds.setColor(green);
}
delay(5); // boucle rapide : la chute dure < 1 s
}